Woocommerce类别显示:显示子类别&不包括子类别产品的产品

时间:2018-04-08 03:05:10

标签: php wordpress woocommerce

我需要一些关于Woocommerce的类别显示选项的帮助。 在Wordpress仪表板中,我按照以下链接全局设置类别显示选项 外观 - >自定义 - > Woocommerce - >产品目录 - >类别显示

有三种显示选项可用。

  1. 显示产品
  2. 显示子类别
  3. 显示子类别&产品
  4. 目前,选择了第三个选项,它显示了子类别以及父类别和子类别下的所有产品。 但是,我想排除子类别下的所有产品。 换句话说,我想仅在父类别下显示子类别和产品。

    我在几个教程网站上找到了以下代码段。代码完全按照我想要的方式工作,但它也禁用了管理产品搜索和过滤功能(无论如何都不会返回结果)。
    知道为什么会这样吗?

    function exclude_product_cat_children($wp_query) {
    if ( isset ( $wp_query->query_vars['product_cat'] ) && $wp_query->is_main_query()) {
    $wp_query->set('tax_query', array(
                                     array (
                                        'taxonomy' => 'product_cat',
                                        'field' => 'slug',
                                        'terms' => $wp_query->query_vars['product_cat'],
                                        'include_children' => false
                                    )
                                  )
            );
        }
    }
    add_filter('pre_get_posts', 'exclude_product_cat_children');
    

    WP:v4.9.5 / Woocommerce:v3.3.4 /主题:店面v2.2.8

2 个答案:

答案 0 :(得分:0)

尝试一下,它对我有用

function exclude_product_cat_children($wp_query) { 
if ( isset ( $wp_query->query_vars['product_cat'] ) && $wp_query->is_main_query()) {
$wp_query->set('tax_query', array(
                                array (
                                    'taxonomy' => 'product_cat',
                                    'field' => 'slug',
                                    'terms' => $wp_query->query_vars['product_cat'],
                                    'include_children' => false
                                )
                             )
);
}
}
add_filter('pre_get_posts', 'exclude_product_cat_children');

答案 1 :(得分:0)

为避免此问题,请在以下脚本之间插入脚本:if(!is_admin()){}

完整代码:

    if ( ! is_admin() ) {
function exclude_product_cat_children($wp_query) {
if ( isset ( $wp_query->query_vars['product_cat'] ) && $wp_query->is_main_query()) {
    $wp_query->set('tax_query', array( 
                                    array (
                                        'taxonomy' => 'product_cat',
                                        'field' => 'slug',
                                        'terms' => $wp_query->query_vars['product_cat'],
                                        'include_children' => false
                                    ) 
                                 )
    );
  }
}  
add_filter('pre_get_posts', 'exclude_product_cat_children');

}