I am creating the variations for each variable product after creating the, product
//inserting product variations
function insert_product_variations ($post_id, $variations) {
global $wpdb;
global $posts_table;
$post_title = get_the_title($post_id);
$variable_ids = array();
$tickets = new WC_Product_Variable($post_id);
$variables = $tickets->get_available_variations();
$data = $wpdb->get_results("DELETE FROM $posts_table WHERE post_parent=$post_id AND post_type='product_variation'");
foreach ($variations as $index => $variation) {
$variation_post = array(
'post_title' => $post_title,
'post_name' => $post_title,
'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);
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, '_sale_price', $variation['sale_price']);
update_post_meta($variation_post_id, '_sale_price_dates_from', $variation['sale_price_dates_from']);
update_post_meta($variation_post_id, '_sale_price_dates_to', $variation['sale_price_dates_to']);
update_post_meta($variation_post_id, '_sku', $variation['sku']);
update_post_meta($variation_post_id, '_manage_stock', $variation['manage_stock']);
update_post_meta($variation_post_id, '_stock', $variation['stock']);
update_post_meta($variation_post_id, '_backorders', $variation['backorders']);
}
}
//inserting product attributs
function insert_product_attributes ($post_id, $available_attributes, $variations) {
foreach ($available_attributes as $attribute) {
$values = array();
foreach ($variations as $variation) {
$attribute_keys = array_keys($variation['attributes']);
foreach ($attribute_keys as $key) {
if ($key === $attribute) {
$values[] = $variation['attributes'][$key];
}
}
}
$values = array_unique($values);
wp_set_object_terms($post_id, $values, 'pa_' . $attribute);
}
$product_attributes_data = array();
foreach ($available_attributes as $attribute) {
$product_attributes_data['pa_'.$attribute] = array(
'name' => 'pa_'.$attribute,
'value' => '',
'is_visible' => '1',
'is_variation' => '1',
'is_taxonomy' => '1'
);
}
update_post_meta($post_id, '_product_attributes', $product_attributes_data);
}