Если у нас большой интернет-магазин с множеством подкатегорий, и периодически появляются новые, то дополнительное внимание к этому можно привлечь лэйблом NEW. По дате мы этот функционал реализовать не сможем т.к. у терминов таксономий отсутствует этот параметр, создадим включение этой функции вручную.
Добавить slug к классам категории
Изначально функция прописывает только product-category и product, а также first и last. Расширим это, добавив класс в виде slug категории:
// Добавить класс к подкатегориям товаров в архиве
add_filter( 'product_cat_class' , 'add_class_to_category_list_element', 10, 3 );
function add_class_to_category_list_element( $classes, $class, $category ) {
if( is_object( $category ) )
$classes[] = $category->slug;
return $classes;
}
Этот вывод классов работает для категорий, подкатегорий и для вывода категорий через шорткоды WC.
Поле checkbox для категории товара
Создадим поле checkbox для терминов таксономии категория товара (+ вывод этого поля при добавлении нового термина)
//Создание метаполя
add_action('product_cat_add_form_fields', 'wh_taxonomy_add_new_meta_field', 10, 1);
add_action('product_cat_edit_form_fields', 'wh_taxonomy_edit_meta_field', 10, 1);
//Product Cat Create page
function wh_taxonomy_add_new_meta_field() {
?>
<div class="form-field">
<label for="wh_meta_desc">
<input type="hidden" name="wh_meta_desc" value="">
<input name="wh_meta_desc" type="checkbox" id="wh_meta_desc"> Новинка
</label>
</div>
<?php
}
//Product Cat Edit page
function wh_taxonomy_edit_meta_field($term) {
//getting term ID
$term_id = $term->term_id;
// retrieve the existing value(s) for this meta field.
$wh_meta_desc = get_term_meta($term_id, 'wh_meta_desc', true);
?>
<tr class="form-field">
<th scope="row" valign="top"><label for="wh_meta_desc">Новинка</label></th>
<td>
<label for="wh_meta_desc">
<input type="hidden" name="wh_meta_desc" value="">
<input name="wh_meta_desc" type="checkbox" id="wh_meta_desc" <?php if ($wh_meta_desc == 'on'){ echo 'checked'; }; ?>> Новинка
</label>
</td>
</tr>
<?php
}
// Сохранение данных метаполя
add_action('edited_product_cat', 'wh_save_taxonomy_custom_meta', 10, 1);
add_action('create_product_cat', 'wh_save_taxonomy_custom_meta', 10, 1);
// Save extra taxonomy fields callback function.
function wh_save_taxonomy_custom_meta($term_id) {
$wh_meta_desc = filter_input(INPUT_POST, 'wh_meta_desc');
update_term_meta($term_id, 'wh_meta_desc', $wh_meta_desc);
}
Далее дорабатываем вывод классов категорий WC
add_filter( 'product_cat_class' , 'add_class_to_category_list_element', 10, 3 );
function add_class_to_category_list_element( $classes, $class, $category ) {
if( is_object( $category ) )
$wh_meta_desc = get_term_meta($category->term_id, 'wh_meta_desc', true);
if ($wh_meta_desc == 'on'){ $classes[] = 'new-cat'; };
return $classes;
}
Стили лэйбла NEW
.new-cat:before {
content: 'NEW';
position: absolute;
font-size: 0.8rem;
line-height: 19px;
background: #32cd32;
color: #fff;
padding: 3px 15px;
left: 5px;
top: 30px;
box-shadow: 2px 2px 4px rgba(17,17,17,.5);
border-radius: 0 3px 3px 0;
}
.new-cat:after {
content: '';
position: absolute;
top: 55px;
left: 5px;
border: 10px solid transparent;
border-right: 0;
border-top-color: #297709;
}
Про добавление классов (в т.ч. NEW) к товарам, описано тут.
[site-socialshare]