我正在尝试仅在function so_32165017_conditionally_remove_sidebar
中添加一个正文类,如果条件触发器意味着说当删除操作在该时间删除侧栏时add_filter( 'body_class', 'my_class_names' );
应该触发此添加过滤器但在我的情况下,如果我添加add_filter语句作为独立它是正常工作如果我添加相同的条件它不是,我在哪里出错我不确定,。
function so_32165017_get_product_cat_depth($catid)
{
$depth = 0;
while ($catid) {
$cat = get_term_by('id', $catid, 'product_cat'); // get the object for the catid
if ($cat->parent > 0) {
$depth++;
}
$catid = $cat->parent; // assign parent ID (if exists) to $catid
// the while loop will continue whilst there is a $catid
}
return $depth;
}
add_action('woocommerce_before_main_content', 'so_32165017_conditionally_remove_sidebar');
/**
* Hide the sidebar for items 2 levels deep or more
*/
function so_32165017_conditionally_remove_sidebar()
{
if (is_product_category()) {
$t_id = get_queried_object()->term_id;
if (so_32165017_get_product_cat_depth($t_id) < 2) {
remove_action('storefront_sidebar', 'storefront_get_sidebar', 10);
// ****when added hear it is not working ****??//
add_filter('body_class', 'my_class_names');
}
}
}
添加课程代码:
// **** works fine hear ****//
add_filter( 'body_class', 'my_class_names' );
function my_class_names( $classes ) {
// add 'class-name' to the $classes array
$classes[] = 'My-Class';
// return the $classes array
return $classes;
}
答案 0 :(得分:1)
您需要的是分别致电您的行动。你的行动woocommerce_before_main_content
在身体类之后运行,因此在行动之后添加过滤器将不起作用。
add_action('woocommerce_before_main_content', 'so_32165017_conditionally_remove_sidebar');
function so_32165017_conditionally_remove_sidebar()
{
if (is_product_category()) {
$t_id = get_queried_object()->term_id;
if (so_32165017_get_product_cat_depth($t_id) < 2) {
remove_action('storefront_sidebar', 'storefront_get_sidebar', 10);
}
}
}
add_filter('body_class', 'my_class_names',10,2);
function my_class_names( $classes ) {
if (is_product_category()) {
$t_id = get_queried_object()->term_id;
if (so_32165017_get_product_cat_depth($t_id) < 2) {
$classes[] = 'My-Class';
}
}
// return the $classes array
return $classes;
}
答案 1 :(得分:0)
它不起作用,因为在调用woocommerce_before_main_content
后触发了body_class()
操作,因此您应该使用之前的操作。
或者您可以直接使用body_class
过滤器:
add_filter('body_class', 'so_32165017_conditionally_remove_sidebar');
/**
* Hide the sidebar for items 2 levels deep or more
*/
function so_32165017_conditionally_remove_sidebar( $classes )
{
if (is_product_category()) {
$t_id = get_queried_object()->term_id;
if (so_32165017_get_product_cat_depth($t_id) < 2) {
remove_action('storefront_sidebar', 'storefront_get_sidebar', 10);
$classes[] = 'my_class_names';
}
}
return $classes;
}