How to Create Virtual Product Variations in WooCommerce Programmatically
In this tutorial, you will learn about creating virtual product variations programmatically in WooCommerce. These variations are ideal for digital products, as they don’t require physical shipping.
Here’s a quick guide to creating a virtual product variation.
Before proceeding, ensure that:
- You have a variable product already created in WooCommerce.
- You have the product ID of the parent variable product.
$variation = new WC_Product_Variation();
$variation->set_parent_id( $product_id );
$variation->set_attributes( array( 'attribute_magical' => 'Yes' ) );
$variation->set_sku( 'Qaisar-123' );
$variation->set_image_id( $featured_image_id );
// some basics
$variation->set_downloadable( true ); // default – false
$variation->set_virtual( true ); // default – false
$variation->set_stock_status( 'instock' ); // outofstock, onbackorder
// define prices
$variation->set_regular_price( 40 );
$variation->set_sale_price( 10 );
// set date range if applicable
$variation->set_date_on_sale_from( '2024-01-01' );
$variation->set_date_on_sale_to( '2026-01-01' );
$variation->set_description( 'Programmatically created variation' ); // your description
// downloadable variation
$variation->set_downloads( $downloads );
$variation->set_download_limit( 1 ); // Download limit if applicable
$variation->set_download_expiry( 7 ); // expiry time if applicable
$variation->save();
$variation->set_parent_id( $product_id );
$variation->set_attributes( array( 'attribute_magical' => 'Yes' ) );
$variation->set_sku( 'Qaisar-123' );
$variation->set_image_id( $featured_image_id );
// some basics
$variation->set_downloadable( true ); // default – false
$variation->set_virtual( true ); // default – false
$variation->set_stock_status( 'instock' ); // outofstock, onbackorder
// define prices
$variation->set_regular_price( 40 );
$variation->set_sale_price( 10 );
// set date range if applicable
$variation->set_date_on_sale_from( '2024-01-01' );
$variation->set_date_on_sale_to( '2026-01-01' );
$variation->set_description( 'Programmatically created variation' ); // your description
// downloadable variation
$variation->set_downloads( $downloads );
$variation->set_download_limit( 1 ); // Download limit if applicable
$variation->set_download_expiry( 7 ); // expiry time if applicable
$variation->save();