Woocommerce以编程方式创建变量产品多个属性

时间:2016-02-17 05:46:43

标签: php wordpress woocommerce

我正在以编程方式创建woocommerce变量产品。成功创建了单个属性(大小),但现在我正在尝试创建另一个属性(颜色)。我的表单中有这个属性数组。

Array
(
    [0] => size
    [1] => color
)

这是我试过的代码:

       $args_t = array(
                'orderby' => 'name',
                'order' => 'ASC',
                'hide_empty' => true,
                'fields' => 'names'
            );

        if ($product_attributes) {
            foreach ($product_attributes as $attr) {
                $avail_attributes = array();
                $avail_attributes = get_terms(wc_attribute_taxonomy_name($attr), $args_t);
                $attr = 'pa_'.$attr;
                wp_set_object_terms($new_product_id, $avail_attributes, $attr);
                $thedata = array();
                $thedata = Array($attr => Array(
                        'name' => $attr,
                        'value' => '',
                        'postion' => '0',
                        'is_visible' => '1',
                        'is_variation' => '1',
                        'is_taxonomy' => '1'
                ));
                update_post_meta($new_product_id, '_product_attributes', $thedata);
            }
        }

以下是当前情况的屏幕截图:

enter image description here

1 个答案:

答案 0 :(得分:2)

你的代码中存在问题..显而易见的是你正在更新foreach循环中的post meta。使其覆盖当前值直到最后一个。请尝试下面的代码。

    if ($product_attributes) {
        $thedata = array();
        foreach ($product_attributes as $attr) {
            $avail_attributes = array();
            $avail_attributes = get_terms(wc_attribute_taxonomy_name($attr), $args_t);
            $attr = 'pa_'.$attr;
            wp_set_object_terms($new_product_id, $avail_attributes, $attr);
            $thedata[sanitize_title($attr)] = Array(
                    'name' => wc_clean($attr),
                    'value' => '',
                    'postion' => '0',
                    'is_visible' => '1',
                    'is_variation' => '1',
                    'is_taxonomy' => '1'
            );
        }
        update_post_meta($new_product_id, '_product_attributes', $thedata);
    }