将 body class 添加到类别及其所有子类别 | Woocommerce
Add body class to category with all its subcategories | Woocommerce
我想在查看类别及其所有子类别时将 class 添加到 body 标签,下面的代码有效但它只是将 class 添加到相关类别而不是所有类别子类别:
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;
}
我尝试用 in_category
或 is_product_tag 替换 is_product_category
但它也不起作用。
如有任何帮助,我们将不胜感激。
您需要使用相关的 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 (based on your comment):
当存档类别(或子类别)页面为空时,可以使用get_queried_object()
函数获取当前术语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;
}
这样您应该避免在查看类别或子类别时不包含未添加您的 body 自定义 class 的产品的情况...
我想在查看类别及其所有子类别时将 class 添加到 body 标签,下面的代码有效但它只是将 class 添加到相关类别而不是所有类别子类别:
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;
}
我尝试用 in_category
或 is_product_tag 替换 is_product_category
但它也不起作用。
如有任何帮助,我们将不胜感激。
您需要使用相关的 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 (based on your comment):
当存档类别(或子类别)页面为空时,可以使用get_queried_object()
函数获取当前术语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;
}
这样您应该避免在查看类别或子类别时不包含未添加您的 body 自定义 class 的产品的情况...