获取Woocommerce中特定产品属性值的所有产品变体

时间:2018-05-01 19:56:50

标签: php wordpress woocommerce product variation

在WooCommerce中product with变量Id: 9 Id:9`。
通过下面的变体属性,我创建了多个产品变体。

然后,我想从父产品ID(<attribute_for_variation>: <attribute_value_to_filter> pa_size: size_8x10 pa_material: mat_luster_photo_paper pa_frame: fra_silver_wood pa_mat_usage: musa_yes )和以下属性值中获取特定的产品变体:

pa_frame

您可以在下面找到该变体的屏幕截图:

enter image description here

我尝试了以下代码及其相应的结果。 为简单起见,目前仅尝试使用static function filterVariations() { $query = [ 'post_parent' => 9, 'post_status' => 'publish', 'post_type' => ['product_variation'], 'posts_per_page' => -1, ]; $result = []; $wc_query = new \WP_Query($query); while ($wc_query->have_posts()) { $wc_query->next_post(); $result[] = $wc_query->post; } return $result; } // ---> RESULT: all the variations, that's OK 属性。

尝试1:

static function filterVariations() {
    $query = [
        'post_parent' => 9,
        'post_status' => 'publish',
        'post_type' => ['product_variation'],
        'posts_per_page' => -1,
        'tax_query' => [
            'relation' => 'AND',
            [
                'taxonomy' => 'pa_frame',
                'field' => 'slug',
                'terms' => [ 'fra_silver_wood' ],
            ],
        ],
    ];
    $result = [];
    $wc_query = new \WP_Query($query);
    while ($wc_query->have_posts()) {
        $wc_query->next_post();
        $result[] = $wc_query->post;
    }
    return $result;
}
// ---> RESULT: empty list

尝试2:

filterNot()

有关如何使用特定属性值返回所有变体的任何想法吗?

1 个答案:

答案 0 :(得分:3)

变量产品中的产品属性在wp_postmeta数据库表中设置为元数据。然后您需要使用Meta查询而不是Tax查询。试试这个:

static function filterVariations() {
    $query = new \WP_Query( array(
        'post_parent' => 9,
        'post_status' => 'publish',
        'post_type' => 'product_variation',
        'posts_per_page' => -1,
        'meta_query' => array( array(
            'key' => 'attribute_pa_frame',
            'value' => 'fra_silver_wood',
        ) ),
    ) );
    $result = array();
    if($query->have_posts()){
        while ($query->have_posts()) {
            $query->next_post();
            $result[] = $query->post;
        }
        wp_reset_postdata();
    }
    wp_reset_query();

    return $result;
}

这应该按预期工作......

对于您的问题中列出的多个产品属性对(键/值),您只需在WP_Query中使用它们:

public function filterVariations() {
    $query = new \WP_Query( array(
        'post_parent' => 40,
        'post_status' => 'publish',
        'post_type' => 'product_variation',
        'posts_per_page' => -1,
        'meta_query' => array(
            array(
                'key'   => 'attribute_pa_size',
                'value' => 'size_8x10',
            ),
            array(
                'key'   => 'attribute_pa_material',
                'value' => 'mat_luster_photo_paper',
            ),
            array(
                'key'   => 'attribute_pa_frame',
                'value' => 'fra_silver_wood',
            ),
            array(
                'key'   => 'attribute_pa_mat_usage',
                'value' => 'musa_yes',
            ),
        ),
    ) );
    $result = array();
    if($query->have_posts()){
        while ($query->have_posts()) {
            $query->next_post();
            $result[] = $query->post;
        }
        wp_reset_postdata();
    }
    wp_reset_query();

    return $result;
}

然后您将获得相应的产品变化(仅一个)......

  

注意:产品属性元键始于attribute_pa_,而不仅仅是pa_

文档:WP_Query and Custom Field Parameters (meta query)