如何隐藏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
相关产品推荐
相关产品推荐

