2016-12-03 12 views
2

Я хочу, чтобы добавить класс к тегу тела при просмотре категории и все ее подкатегорий, код сильфона работы, но это просто добавить класс к категории идет речь, но не все ее подкатегории:Добавить класс тела в категорию со всеми его подкатегориями | WooCommerce

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; 

} 

I попытался заменить is_product_category на in_category или is_product_tag, но он тоже не работает.

Любая помощь будет оценена по достоинству.

+0

Я не уверен, что правильно поняли ваш вопрос. Вы хотите добавить класс css на страницу категории и всю ее страницу подкатегории? То есть, у меня есть категория Fruit и подкатегория Apple, Lemon ... и вы хотите, чтобы страница подкатегории с Apple и Lemon имела имя класса css Fruit on the body? – ucheng

+0

да LoicTheAztec дала мне хорошее решение, спасибо в любом случае ucheng! – colapsnux

ответ

2

Вам нужно вместо того, чтобы использовать связанную 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; 

} 

Update 2 (основано на ваш комментарий):

При архивной категории (или подкатегории) pag es пустые, можно использовать функцию 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; 

} 

Таким образом, вы должны избегать случай при просмотре категории или подкатегории которым не содержат продукт, который не добавляет ваше тело пользовательский класс ...

+1

Он работает как шарм, как это, спасибо! – colapsnux

+0

При просмотре категории или подкатегории, в которой нет продукта, класс не добавляется, нормально ли это? Есть ли способ добавить класс в любом случае, у категории есть продукт или нет? – colapsnux

+0

@colapsnux has_term() работает только с сообщениями или пользовательскими сообщениями в качестве продуктов ... Итак, позвольте мне подумать ... Для категории без продуктов вы можете комбинировать has_term() с is_product_category() в состоянии с «OR» ... Но для подкатегории без продуктов , Я еще не знаю ... Мне нужно сделать некоторые тесты, прежде чем давать рабочее решение. – LoicTheAztec

 Смежные вопросы

  • Нет связанных вопросов^_^