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

如何隐藏WCFM多商户网站首页的Pending状态WooCommerce商品?

解决WooCommerce+WCFM待审核商品显示在首页的问题

问题分析

你之前的代码未生效,核心原因是首页的产品查询并不属于is_post_type_archive('product')、分类/标签页的查询范围,导致条件判断未命中,无法过滤待审核状态的商品。以下是几个针对性的解决方案:

方案1:扩展pre_get_posts的查询覆盖范围

修改原有代码,将首页的主查询也纳入过滤范围,确保所有前端核心产品查询都只加载已发布商品:

function exclude_pending_products($query) { 
    // 跳过后台查询和非主查询
    if (is_admin() || !$query->is_main_query()) { 
        return;
    }

    // 覆盖首页、产品归档、分类、标签页的产品查询
    if ( $query->is_home() || $query->is_front_page() ||
         $query->is_post_type_archive('product') || 
         $query->is_tax('product_cat') || $query->is_tax('product_tag') ) { 
        // 仅保留已发布状态的商品
        $query->set('post_status', array('publish'));
        // 强制限定为产品类型,避免其他内容被误过滤
        $query->set('post_type', 'product');
    } 
} 
add_action('pre_get_posts', 'exclude_pending_products');

方案2:利用WCFM和WooCommerce专属过滤钩子

直接针对WCFM和WooCommerce的产品查询逻辑进行过滤,更精准适配多商户场景:

function filter_pending_products_from_frontend( $args ) {
    // 仅在前端页面过滤待审核商品
    if ( !is_admin() ) {
        $args['post_status'] = array('publish');
    }
    return $args;
}
// 适配WCFM的产品查询
add_filter( 'wcfm_product_query_args', 'filter_pending_products_from_frontend' );
// 适配WooCommerce原生产品查询
add_filter( 'woocommerce_product_query_args', 'filter_pending_products_from_frontend' );

方案3:处理短代码/区块的产品查询

如果首页是通过WooCommerce短代码(如[products])或区块展示商品,需要额外过滤这些自定义查询:

function exclude_pending_from_shortcode_products( $query_args, $atts ) {
    $query_args['post_status'] = array('publish');
    return $query_args;
}
add_filter( 'woocommerce_shortcode_products_query', 'exclude_pending_from_shortcode_products', 10, 2 );

必要步骤:清除缓存

修改代码后,请务必清除网站的所有缓存(包括缓存插件、CDN缓存、浏览器缓存),否则修改可能无法立即生效。

内容的提问来源于stack exchange,提问作者Rabi Thakur

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 09:19:56