按照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产品列表进行更多的定制,只需要根据需要把修改后的查询参数放到这里即可。