我正在开发一个API,通过Woocommerce自动导入Wordpress上的产品。所有产品都是变体产品,在第一次同步时,一切正常。但在那之后,如果我想更新产品,即使我有一个代码来避免它,它也会为该产品创建重复的变体。
以下是代码:
function insert_product_variations ($post_id, $variations) {
foreach ($variations as $index => $variation)
{
$variation_id = find_matching_product_variation( $post_id, $variation['attributes'] );
if ( $variation_id == 0 ) {
$variation_post = array(
'post_title' => 'Variation #'.$index.' of '.count($variations).' for product#'. $post_id,
'post_name' => 'product-'.$post_id.'-variation-'.$index,
'post_status' => 'publish',
'post_parent' => $post_id,
'post_type' => 'product_variation',
'guid' => home_url() . '/?product_variation=product-' . $post_id . '-variation-' . $index
);
$variation_post_id = wp_insert_post($variation_post);
} else {
$variation_post_id = $variation_id;
}
foreach ($variation['attributes'] as $attribute => $value)
{
$attribute_term = get_term_by('name', $value, 'pa_'.$attribute);
update_post_meta($variation_post_id, 'attribute_pa_'.$attribute, $attribute_term->slug);
}
update_post_meta($variation_post_id, '_price', $variation['price']);
update_post_meta($variation_post_id, '_regular_price', $variation['price']);
update_post_meta($variation_post_id, '_sku', $variation['sku']);
}
}
function find_matching_product_variation( $product_id, $attributes ) {
$product = wc_get_product( $product_id );
if( class_exists('WC_Data_Store') ) {
$data_store = WC_Data_Store::load( 'product' );
return $data_store->find_matching_product_variation( $product, $attributes );
} else {
return $product->get_matching_variation( $attributes );
}
}
$post_id
是原始产品的parent_id,$variations
是一个像这样的对象数组:
{
"attributes": {
"size" : "Small",
"color" : "Red"
},
"price" : "8.00",
"sku" : "TS1000"
}