You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 06:42:00