В выделенной области я проверяю, доступен родитель или нет (если идентификатор родителя доступен, то у продуктов будут варианты), а затем я также проверяю, доступен ли идентификатор варианта в списке ранее добавленного нами варианта. идентификаторы (если он недоступен, то следует добавить варианты продуктов), но он по-прежнему добавляет дубликаты вариантов для некоторых продуктов, а не для всех
Для проверки вариантов в API Я использую этот код
$childinfo = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}postmeta WHERE meta_key = 'lmup_childs' ORDER by meta_id limit 30");
if(is_array($childinfo))
foreach($childinfo as $info)
{
$token = ApiHandler::getToken();
$parent_id = $info->post_id;
$childs = unserialize($info->meta_value);
$attrs = [];
$data = [];
foreach($childs as $id){
// get product info from API
$result = self::getProduct($id, $token);
if(!property_exists($result, 'error')){
$attr = $result->parent_option_value;
$attrEng = $result->translated_parent_option_value;
$attrs[] = !empty($attrEng)? $attrEng :$attr;
$data[$id] = $result;
}
}
self::addAttributes($parent_id, $attrs);
$ids = [];
foreach($data as $id => $single){
$ids[$id] = self::addVariantion($parent_id, $single);
}
delete_post_meta($parent_id, 'lmup_childs');
}
Для добавления вариантов я использую этот код
function addVariantion( $product_id, $data )
{
try {
$option = $data->translated_parent_option_value;
$option = !empty($option) ? $option : $data->parent_option_value;
$option = wc_sanitize_taxonomy_name( stripslashes( $option ));
$variation = new WC_Product_Variation();
//$variation->set_sku( $data->sku );
$variation->set_parent_id($product_id);
$variation->set_attributes(["pa_options" => $option]);
$variation->set_manage_stock( true );
$variation->set_status("publish");
$variation->set_weight( $data->weight ); //Set the product's weight.
$variation->set_length( $data->box_length ); //Set the product length.
$variation->set_width( $data->box_width ); //Set the product width.
$variation->set_height( $data->box_height ); //Set the product height.
$variation_id = $variation->save();
update_post_meta($variation_id, 'ch_api_id', $data->id );
return $variation_id;
} catch(Exception $e) {
return $e->getMessage();
}
}