2016-12-03 5 views
2

Ich möchte Klasse an den Körper Tag hinzuzufügen, wenn eine Kategorie und alle Unterkategorien sehen, den Code unten Arbeit, aber es nur die Klasse in der Kategorie in Frage hinzuzufügen, aber nicht alle Unterkategorien:Körperklasse zur Kategorie mit allen Unterkategorien | hinzufügen 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 versucht, is_product_category durch in_category oder is_product_tag zu ersetzen, aber es funktioniert auch nicht.

Jede Hilfe wäre willkommen.

+0

ich nicht sicher bin ich nicht hinzufügen verstehe deine Frage richtig. Möchten Sie die css-Klasse zur Kategorieseite und deren Unterkategorien hinzufügen? Das heißt, ich habe eine Kategorie namens Fruit und die Unterkategorie Apple, Lemon ... und wollen die Unterkategorie Seite mit Apple und Lemon alle haben css class name Obst auf seinem Körper? – ucheng

+0

ja LoicTheAztec gab mir die gute Lösung, danke sowieso ucheng! – colapsnux

Antwort

2

Sie müssen stattdessen die im Zusammenhang Wordpress bedingte Funktion has_term() mit dem 'product_cat' Taxonomie Argumente verwenden Produktkategorien auf diese Weise zum Ziel:

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 (basierend auf Ihrem Kommentar):

Wenn Archiv Kategorie (oder Unterkategorie) pag Es ist leer, kann get_queried_object() Funktion verwendet werden, um das aktuelle Begriff Objekt zu erhalten und die Bedingungen in Ihrer Funktion anzupassen, um diese Fälle zu behandeln.

Hier ist der Code:

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; 

} 

diese Weise können Sie den Fall vermeiden sollte, wenn Kategorie oder Unterkategorie Wich sehen kein Produkt enthalten, die nicht Ihren Körper benutzerdefinierte Klasse ...

+1

Es funktioniert so charmant, danke! – colapsnux

+0

Wenn eine Kategorie oder Unterkategorie angezeigt wird, die kein Produkt enthält, wird die Klasse nicht hinzugefügt, ist das normal? Gibt es eine Möglichkeit, die Klasse hinzuzufügen, wie auch immer die Kategorie ein Produkt hat oder nicht? – colapsnux

+0

@colapsnux has_term() funktioniert nur mit Post oder benutzerdefinierten Posts als Produkte ... Also lass mich darüber nachdenken ... Für Kategorie ohne Produkte können Sie has_term() mit is_product_category() in der Bedingung mit einem "ODER" kombinieren ... Aber für Unterkategorie ohne Produkte , Ich weiß es noch nicht ... Ich muss einige Tests machen, bevor ich eine funktionierende Lösung gebe. – LoicTheAztec

Verwandte Themen