0 レビュー
0 回答
php-Woocommerceにすでに存在する場合、プログラムで製品を追加すると重複するバリエーションが作成されます
Woocommerceを使用してWordpressに製品を自動的にインポートするAPIに取り組んでいます。すべての製品はバリエーション製品であり、最初の同期中はすべて正常に機能します。しかし、その後、製品を更新したい場合は、それを回避するためのコードがあっても、その製品のバリエーションが重複して作成されます。
コードは次のとおりです:
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"
}
- Wordpressバージョン:4.8.2
- Woocommerceバージョン:3.1.2
わからない
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。