I’m building a site where WooCommerce Variable products (with Products Variations) are inserted programmatically. I have followed this tutorial successfully:
Insert WooCommerce Products & Variations Programmatically
I need just something that is missing:
How to set variations default attributes values for a variable product?
Is it possible?
Advertisement
Answer
1). You will need to insert in your json
data for each variable product this piece of array like:
"variations_default_attributes": [ { "size" : "Medium", "color" : "Blue" } ]
Or
"variations_default_attributes": { "size" : "Medium", "color" : "Blue" }
This array is made with the attribute short slug (without ‘pa_
‘) and the default term name values.
2). Then the dedicated function:
function insert_variations_default_attributes( $post_id, $products_data ){ foreach( $products_data as $attribute => $value ) $variations_default_attributes['pa_'.$attribute] = get_term_by( 'name', $value, 'pa_'.$attribute )->slug; // Save the variation default attributes to variable product meta data update_post_meta( $post_id, '_default_attributes', $variations_default_attributes ); }
3). You will need to trigger this function adding one line at the end:
function insert_product ($product_data) { $post = array( // Set up the basic post data to insert for our product 'post_author' => 1, 'post_content' => $product_data['description'], 'post_status' => 'publish', 'post_title' => $product_data['name'], 'post_parent' => '', 'post_type' => 'product' ); $post_id = wp_insert_post($post); // Insert the post returning the new post id if (!$post_id) // If there is no post id something has gone wrong so don't proceed { return false; } update_post_meta($post_id, '_sku', $product_data['sku']); // Set its SKU update_post_meta( $post_id,'_visibility','visible'); // Set the product to visible, if not it won't show on the front end wp_set_object_terms($post_id, $product_data['categories'], 'product_cat'); // Set up its categories wp_set_object_terms($post_id, 'variable', 'product_type'); // Set it to a variable product type insert_product_attributes($post_id, $product_data['available_attributes'], $product_data['variations']); // Add attributes passing the new post id, attributes & variations insert_product_variations($post_id, $product_data['variations']); // Insert variations passing the new post id & variations ## Insert variations default attributes passing the new post id & variations_default_attributes insert_variations_default_attributes( $post_id, $products_data['variations_default_attributes'] ); }
Code goes in function.php file of your active child theme (or theme) or also in any plugin file.
This code is tested and works.