wordpress 隐藏WooCommerce产品,如果价格为0或没有主图像,从档案,小部件和简码

o4hqfura  于 2024-01-06  发布在  WordPress
关注(0)|答案(1)|浏览(156)

以下代码隐藏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或如果他们没有主图像,我不想要什么。我试图在自己的代码没有成功。
我错过了什么?

zbdgwd5y

zbdgwd5y1#

首先,由于您只对meta_query进行更改,因此woocommerce_product_query action hook可以替换为woocommerce_product_query_meta_query filter hook。
然后,您将能够为产品widgetfilter hook使用相同的功能代码(如果需要,甚至可以为产品shortcodefilter hook)。
替换代码 (也处理产品小部件和简码)

// 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文件中(或插件中)。测试和工作。

相关问题