WooCommerce父类产品列类表中隐藏子类产品

按照WooCommerce插件的默认逻辑,子类中的产品会自动出现在父类的产品列表中。按照常理,这是正确的显示逻辑,一个产品既然属于子类,肯定也属于父类,就像朝阳区属于北京市,肯定也属于中国。可是在某些项目中,不需要这样的显示。在父级产品列表页面,只显示子分类和父级分类中的产品,WooCommerce的分类设置中没有这样的设置,不过我们可以直接修改WooCommerce产品查询来实现这一功能。

修改主查询实现在父类产品列表中隐藏子类产品的功能

直接把下面的代码添加的主题的functions.php中即可实现此功能。不难看出,下面的代码中,主要起作用的就是'include_children' => false,这一行,意思是告诉产品查询,在当前查询中,不要包含子分类中的产品。

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

基于以上代码中的原理,我们可以对WooCommerce产品列表进行更多的定制,只需要根据需要把修改后的查询参数放到这里即可。

THE END