我有一个 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');
我尝试了很多方法,但没有任何效果。
也许您的主题主页正在使用
[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 文件中(或插件中)。它可以工作。