如果价格为 0 或没有主图像,则隐藏档案、小部件和短代码中的 WooCommerce 产品

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

以下代码隐藏在 WooCommerce 存档页面、价格为零的产品或没有主图像的产品中:

add_action( 'woocommerce_product_query', 'custom_pre_get_posts_query' );

function custom_pre_get_posts_query( $query ) {
    $meta_query = $query->get( 'meta_query' );

    $meta_query[] = array(
        'relation' => 'AND',
        array(
            'key' => '_thumbnail_id',
            'value' => '0',
            'compare' => '>',
        ),
        array(
            'key' => '_price',
            'value' => '0',
            'compare' => '>',
            'type' => 'NUMERIC',
        ),
    );

    $query->set( 'meta_query', $meta_query );
}

但是当我在主页上放置一个小部件“产品”时,它会显示所有产品,即使价格为 0 或者如果它们没有主图像,这是我不想要的。 我尝试自己编写此代码,但没有成功。

我错过了什么?

php wordpress woocommerce product hook-woocommerce
1个回答
0
投票

首先,由于您仅对

meta_query
进行更改,因此
woocommerce_product_query
操作挂钩可以替换为
woocommerce_product_query_meta_query
过滤器挂钩…

然后您将能够对产品widget过滤器挂钩使用相同的功能代码(如果需要,甚至可以对产品短代码过滤器挂钩使用相同的功能代码。

替换代码(还处理产品小部件和短代码)

// For product archive pages (replacement hook and code)
add_filter( 'woocommerce_product_query_meta_query', 'filter_products_query_meta_query', 10, 1 );
// For products widget
add_filter( 'woocommerce_products_widget_query_args', 'filter_products_query_meta_query', 10, 1 );
// For products shortcode
add_filter( 'woocommerce_shortcode_products_query', 'filter_products_query_meta_query', 10, 1 );
function filter_products_query_meta_query( $query_args ) {
    if( is_admin() ) {
        return $query_args;
    }

    $query_args['meta_query'][] = array(
        'relation' => 'AND',
        array(
            'key' => '_thumbnail_id',
            'value' => '0',
            'compare' => '>',
        ),
        array(
            'key' => '_price',
            'value' => '0',
            'compare' => '>',
            'type' => 'NUMERIC',
        ),
    );

    return $query_args;
}

代码位于子主题的functions.php 文件中(或插件中)。已测试并有效。

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