Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * Create a product variation for a defined variable product ID.
- *
- * @since 3.0.0
- * @param int $product_id post ID of the product parent variable product.
- * @param array $variation_data post ID of the product parent variable product.
- */
- function create_product_variation( $product_id, $variation_data ){
- // Get the Variable product object (parent)
- $product = wc_get_product($product_id);
- $variation_post = array(
- 'post_title' => $product->get_title(),
- 'post_name' => 'product-'.$product_id.'-variation',
- 'post_status' => 'publish',
- 'post_parent' => $product_id,
- 'post_type' => 'product_variation',
- 'guid' => $product->get_permalink()
- );
- // Creating the product variation
- $variation_id = wp_insert_post( $variation_post );
- // Get an instance of the WC_Product_Variation object
- $variation = new WC_Product_Variation( $variation_id );
- // Iterating through the variations attributes
- foreach ($variation_data['attributes'] as $attribute => $term_name )
- {
- $taxonomy = 'pa_'.$attribute; // The attribute taxonomy
- $term_slug = get_term_by('name', $term_name, $taxonomy )->slug; // Get the term slug
- // Check if the Term name exist and if not we create it.
- if( ! term_exists( $term_name, $taxonomy ) )
- wp_insert_term( $term_name, $taxonomy ); // Create the term
- // Get the post Terms names from the parent variable product.
- $post_term_names = wp_get_post_terms( $product_id, $taxonomy, array('fields' => 'names') );
- // Check if the post term exist and if not we set it in the parent variable product.
- if( ! in_array( $term_name, $post_term_names ) )
- wp_set_post_terms( $product_id, $term_name, $taxonomy, true );
- // Set/save the attribute data in the product variation
- update_post_meta( $variation_id, 'attribute_'.$taxonomy, $term_slug );
- }
- ## Set/save all other data
- // SKU
- if( ! empty( $variation_data['sku'] ) )
- $variation->set_price( $variation_data['sku'] );
- // Prices
- if( empty( $variation_data['sale_price'] ) ){
- $variation->set_price( $variation_data['regular_price'] );
- } else {
- $variation->set_price( $variation_data['sale_price'] );
- $variation->set_sale_price( $variation_data['sale_price'] );
- }
- $variation->set_regular_price( $variation_data['regular_price'] );
- // Stock
- if( ! empty($variation_data['stock_qty']) ){
- $variation->set_stock_quantity( $variation_data['stock_qty'] );
- $variation->set_manage_stock(true);
- $variation->set_stock_status('');
- } else {
- $variation->set_manage_stock(false);
- }
- $variation->set_weight(''); // weight (reseting)
- $variation->save(); // Save the data
- }
- $parent_id = 746; // Or get the variable product id dynamically
- // The variation data
- $variation_data = array(
- 'attributes' => array(
- 'size' => 'M',
- 'color' => 'Green',
- ),
- 'sku' => '',
- 'regular_price' => '22.00',
- 'sale_price' => '',
- 'stock_qty' => 10,
- );
- // The function to be run
- create_product_variation( $parent_id, $variation_data );
Add Comment
Please, Sign In to add comment