我正在使用来自 json 提要的数据创建可变产品。但问题是我在开始时没有所有属性值,所以当我解析提要时,我应该添加新的 - 追加。相反,我正在替换它们,所以我只有最后一个。如何更改代码以附加产品属性?
这是我的代码:
function create_product_variation( $product_id, $variation_data ){
global $wpdb;
// Get the Variable product object (parent)
$product = wc_get_product($product_id);
//check if variation exists, if no create the variation
if( $wpdb->get_var( $wpdb->prepare( "SELECT post_id FROM $wpdb->postmeta WHERE meta_key='_sku' AND meta_value='%s' LIMIT 1", $variation_data['sku'] )) == NULL ){
$variation_post = array(
'post_title' => $variation_data['title'],
'post_name' => 'product-'.$product_id.'-variation',
'post_status' => 'publish',
'post_parent' => $product_id,
'post_type' => 'product_variation',
'guid' => $product->get_permalink()
);
// Creating the product variation
$variation_id = wp_insert_post( $variation_post );
// Get an instance of the WC_Product_Variation object
$variation = new WC_Product_Variation( $variation_id );
}
else{
$variation_id = $wpdb->get_var( $wpdb->prepare( "SELECT post_id FROM $wpdb->postmeta WHERE meta_key='_sku' AND meta_value='%s' LIMIT 1", $variation_data['sku'] ));
$variation = wc_get_product($variation_id);
}
$variation->set_name($variation_data['title']);
$variation->set_description($variation_data['title']);
// Iterating through the variations attributes
delete_post_meta($variation_id, '_product_attributes');
if($variation_data['color'] != null && !empty($variation_data['color'])){
wp_set_object_terms( $product_id, $variation_data['color'], 'pa_color' );
$att_color = Array('pa_color' =>Array(
'name'=>'pa_color',
'value'=>sanitize_title(make_greeklish($variation_data['color'])),
'is_visible' => '1',
'is_taxonomy' => '1',
'is_variation' => '1',
));
}
if($variation_data['size'] != null && !empty($variation_data['size'])){
wp_set_object_terms( $product_id, $variation_data['size'], 'pa_size' );
$att_size = Array('pa_size' =>Array(
'name'=>'pa_size',
'value'=>sanitize_title(make_greeklish($variation_data['size'])),
'is_visible' => '1',
'is_taxonomy' => '1',
'is_variation' => '1',
));
}
$check2 = update_post_meta( $product_id, '_product_attributes', array_merge((array)$att_color, (array)$att_size));
wp_set_object_terms($product_id, 'variable', 'product_type', true);
update_post_meta($variation_id, 'attribute_pa_color', get_term_by('name', $variation_data['color'], 'pa_color')->slug);
update_post_meta($variation_id, 'attribute_pa_size', get_term_by('name', $variation_data['size'], 'pa_size')->slug);
## Set/save all other data.......