从主页隐藏处于待处理状态的 WooCommerce 产品

问题描述 投票:0回答:1

我有一个 WooCommerce 网站,我使用 WCFM 多供应商插件。当任何供应商提交产品时,它都会处于待审核状态,但该产品显示在主页中,当单击该产品时,它会显示 404,因为产品状态为待审核,用户无权执行此操作。我尝试了很多不同的方法,但找不到解决方案。

我已经尝试过:

function exclude_pending_products($query) { 
    // Check if it's the main query and if it's on the front-end 
    if (is_admin() || !$query->is_main_query()) { 
        return;
    }

    //Check if it's a product query 
    if ($query->is_post_type_archive('product') || $query->is_tax('product_cat') || $query->is_tax('product_tag')) { 
        //Exclude pending products
        $query->set('post_status', array('publish'));
    } 
} 
add_action('pre_get_posts', 'exclude_pending_products');

我尝试了很多方法,但没有任何效果。

php wordpress woocommerce product
1个回答
0
投票

也许您的主题主页正在使用

[products]
短代码来显示产品,例如在 WooCommerce StoreFront 主题中......在这种情况下,您应该尝试以下操作:

// For products shortcode (Home page?)
add_filter( 'woocommerce_shortcode_products_query', 'shortcode_product_query_excl_pending_status', 50, 3 );
function shortcode_product_query_excl_pending_status( $query_args, $atts, $loop_name ){
    $query_args['post_status'] = 'publish';
    return $query_args;
}

// For WooCommerce Archive pages
add_action( 'woocommerce_product_query', 'product_query_excl_pending_status', 50, 2 );
function product_query_excl_pending_status( $q, $query ) { 
    if ( ! is_admin() && $q->is_main_query() && $q->is_archive() ) { 
        $q->set('post_status', 'publish');
    }
} 

代码位于子主题的functions.php 文件中(或插件中)。它可以工作。

© www.soinside.com 2019 - 2024. All rights reserved.