如何在WooCommerce指定页面仅展示特定分类下的产品
问题原因
- 页面ID判断时机和逻辑错误:你将ID判断逻辑放在functions.php全局作用域,WordPress加载functions文件时主查询尚未初始化,无法正确获取当前页面ID,你用到的
$current_post_id没有做全局声明和正确赋值,判断逻辑不可靠,导致add_filter仅在functions加载时执行一次,条件不成立的情况下过滤器根本没有被挂载,所以函数不会触发。 - 分类查询运算符使用错误:tax_query中针对product_cat分类法的查询,单个分类匹配使用
IN运算符即可,=运算符不适用于分类法查询场景,会导致条件失效。 - 缺少查询场景判断:没有排除后台查询、非主查询的场景,可能会影响其他商品查询逻辑。
修正后可直接使用的代码
/* * 页面ID 811 仅显示packages分类商品 */ function show_only_category_in_page( $q ) { // 仅对前台主查询生效,不影响后台和其他自定义查询 if ( ! is_admin() && $q->is_main_query() ) { // 正确获取当前页面ID $current_post_id = get_queried_object_id(); if ( $current_post_id == 811 ) { $tax_query = (array) $q->get( 'tax_query' ); $tax_query[] = array( 'taxonomy' => 'product_cat', 'field' => 'slug', 'terms' => array( 'packages' ), 'operator' => 'IN' ); $q->set( 'tax_query', $tax_query ); } } } add_filter( 'woocommerce_product_query', 'show_only_category_in_page' ); /* END 页面ID 811 仅显示packages分类商品 */
补充说明
你之前实现的「非811页面隐藏packages分类产品」的旧代码,也可以用同样的逻辑优化,把ID判断放到过滤函数内部,避免全局判断时机错误的问题。
内容的提问来源于stack exchange,提问作者Maramal
相关产品推荐
相关产品推荐

