我正在以编程方式创建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);
}
}
以下是当前情况的屏幕截图:
答案 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);
}