首页 文章

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

提问于
浏览
4

在WooCommerce中 *(latest version)* I have one 变量 product with Id:9` .
通过下面的变体属性,我创建了多个产品变体 .

然后,我想从父产品ID( Id: 9 )和以下属性值获取特定的产品变体:

<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

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

enter image description here

我尝试了以下代码及其相应的结果 . 为简单起见,现在只尝试使用 pa_frame 属性 .

Try 1:

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

Try 2:

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

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

1 回答

  • 1

    变量产品中的产品属性 are set as meta data 在wp_postmeta数据库表中 . 然后 you will need to use a Meta query 而不是税查询 . 试试这个:

    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;
    }
    

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

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

    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)

相关问题