Добавить класс в категории все подкатегории | категории
Я хочу добавить класс в тег body при просмотре категории и всех ее подкатегорий, код ниже работает, но он просто добавляет класс в рассматриваемую категорию, но не все ее подкатегории:
add_filter( 'body_class','custom_body_class' );
function custom_body_class( $classes ) {
if ( is_product_category( 802 ) ) {
$classes[] = 'class1';
} else if ( is_product_category( array( 'femme', 'homme', 'enfant' ) ) ) {
$classes[] = 'class2';
}
return $classes;
}
Я попытался заменить is_product_category
на in_category
или is_product_tag, но это тоже не работает.
Любая помощь будет признательна.
1 ответ:
Вместо этого вам нужно использовать соответствующую условную функцию WordPress
has_term()
с аргументом таксономии'product_cat'
для целевых категорий продуктов таким образом:add_filter( 'body_class','custom_body_class' ); function custom_body_class( $classes ) { if ( has_term( 802, 'product_cat' ) ) { // assuming that 802 is the id of a product category. $classes[] = 'class1'; } else if ( has_term( array( 'femme', 'homme', 'enfant' ), 'product_cat' ) ) { $classes[] = 'class2'; } return $classes; }
Обновление 2 (на основе вашего комментария):
Когда страницы категории архива (или подкатегории) пусты, можно использовать
get_queried_object()
функция, чтобы получить текущий объект термина и адаптировать условия в вашей функции для обработки этих случаев.Вот что код:
add_filter( 'body_class','custom_body_class' ); function custom_body_class( $classes ) { // Only on product category (or subcategory) archives pages if(is_product_category()): // Set HERE your Main category ID (the parent ID of subcategories IDs) $main_cat = 802; // Set HERE your subcategories slugs $sub_cats_arr = array( 'femme', 'homme', 'enfant' ); // Getting the current term (object) of category or subcategory archives page $term = get_queried_object(); // All the needed data from current term (object) $term_id = $term->term_id; // term ID $term_slug = $term->slug; // term slug $term_name = $term->name; // term name $term_taxonomy = $term->taxonomy; // Always 'product_cat' for woocommerce product categories $term_parent_id = $term->parent; // the parent term_id // FOR YOUR MAIN CATEGORY ID '802' (Handle empty archive page case too) if ( has_term( $main_cat, $term_taxonomy ) || $term_id == $main_cat ) $classes[] = 'class1'; // FOR YOUR MAIN 3 SUBCATEGORIES SLUGS (Handle empty archive page case too) if ( has_term( $sub_cats_arr, $term_taxonomy ) || in_array($term_slug, $sub_cats_arr) ) $classes[] = 'class2'; endif; return $classes; }
Таким образом, вы должны избегать случая при просмотре категории или подкатегории, которые не содержат продукта, который не добавляет ваш собственный класс тела ...