WP_Query Woocommerce按属性和变化过滤可变产品常规价格

时间:2017-06-22 01:52:40

标签: php wordpress filter woocommerce product

我有可变产品,它的属性名称为:'数量'其变体有' 100' 200' 200' 500'。所有这些变化都有定期价格。我想过滤和显示变量产品,其中包含数量变化' 200'并且有正常价格10。

我正在使用此代码,但它显示了所有具有数量变化的产品' 200'但不能按变化的正常价格进行过滤。

            $query = array(
                'post_status' => 'publish',
                'post_type' => array('product', 'product_variation'),
                'posts_per_page' => 10,
                'tax_query' => array(
                    'relation' => 'AND',
                    array(
                        'taxonomy' => 'pa_quantity',
                        'field' => 'term_id',
                        'terms' => '67',
                    ),
                'meta_query' => array(
                    array(
                        'key' => '_regular_price',
                        'value' => 10,
                        'compare' => '=',
                        'type' => 'NUMERIC'
                    ),
                ),
                )
            );

例如,我使用的是属性Quantity的第200个id,即67.

2 个答案:

答案 0 :(得分:2)

所以,我终于找到了答案......这可能会对将来有所帮助。

以下是首先过滤属性Quantity的变量产品的查询,该变量产品的期限为75,然后它将进一步筛选价格为500的变体的结果。

            $query = array(
                'post_status' => 'publish',
                'post_type' => array('product', 'product_variation'),
                'posts_per_page' => 10,
                'tax_query' => array(
                    'relation' => 'AND',
                    array(
                    'taxonomy' => 'pa_quantity',
                    'field' => 'term_id',
                    'terms' => '75',
                    ),
                ),
                'meta_key' => '_price',
                'meta_value' => 500,
            );

            $wc_query = new WP_Query($query);

答案 1 :(得分:1)

在您的示例代码中,您在放入元查询之前没有关闭tax_query数组。

如果您只有一个元字段值,也可以尝试不使用元查询。相反,定义元键和元值,如下所示:

$query = array(
            'post_status' => 'publish',
            'post_type' => array('product', 'product_variation'),
            'posts_per_page' => 10,
            'tax_query' => array(
                'relation' => 'AND',
                array(
                    'taxonomy' => 'pa_quantity',
                    'field' => 'term_id',
                    'terms' => '67',
                ),
            ),
            'meta_key' => '_regular_price',
            'meta_value' => 10,
        );

以下是在启动meta_query之前关闭tax_query的查询的更正版本

$query = array(
            'post_status' => 'publish',
            'post_type' => array('product', 'product_variation'),
            'posts_per_page' => 10,
            'tax_query' => array(
                'relation' => 'AND',
                array(
                    'taxonomy' => 'pa_quantity',
                    'field' => 'term_id',
                    'terms' => '67',
                ),
            ),
            'meta_query' => array(
                array(
                    'key' => '_regular_price',
                    'value' => 10,
                    'compare' => '=',
                    'type' => 'NUMERIC'
                ),
            ),
        );