Home > Backend Development > PHP Tutorial > How to Create a Variable Product and Add New Attribute Values Programmatically in WooCommerce?

How to Create a Variable Product and Add New Attribute Values Programmatically in WooCommerce?

DDD
Release: 2024-11-09 18:42:02
Original
873 people have browsed it

How to Create a Variable Product and Add New Attribute Values Programmatically in WooCommerce?

Create a Variable Product and Add New Attribute Values Programmatically in WooCommerce

WooCommerce offers a flexible framework for managing products, including the ability to create product variations with unique attribute values. This guide will demonstrate how to programmatically create a WooCommerce variable product and add new attribute values to it.

1. Create a Variable Product:

Assuming you have a parent or variable product ID, you can create a new product variation using the following code:

function create_product_variation($product_id, $variation_data) {
    // Get the parent variable product object
    $product = wc_get_product($product_id);

    $variation_post = array(
        'post_title' => $product->get_name(),
        'post_name' => 'product-' . $product_id . '-variation',
        'post_status' => 'publish',
        'post_parent' => $product_id,
        'post_type' => 'product_variation',
        'guid' => $product->get_permalink()
    );

    // Insert the product variation
    $variation_id = wp_insert_post($variation_post);

    // Create an instance of the variation object
    $variation = new WC_Product_Variation($variation_id);
    ...
}
Copy after login

2. Add New Attribute Values:

For each attribute and value you want to add, you'll need to check if the term exists and create it if not:

foreach ($variation_data['attributes'] as $attribute => $term_name) {
    $taxonomy = 'pa_' . $attribute; // The attribute taxonomy

    // Check if the term exists
    if (!term_exists($term_name, $taxonomy)) {
        wp_insert_term($term_name, $taxonomy); // Create the term
    }

    $term_slug = get_term_by('name', $term_name, $taxonomy)->slug; // Get the term slug

    // Set the attribute data in the product variation
    update_post_meta($variation_id, 'attribute_' . $taxonomy, $term_slug);
}
Copy after login

3. Set Additional Variation Data:

Set any additional values, such as SKU, prices, and stock, by calling the appropriate methods on the variation object:

$variation->set_sku($variation_data['sku']);
$variation->set_price($variation_data['regular_price']);
$variation->set_manage_stock(true);
$variation->set_stock_quantity($variation_data['stock_qty']);
...
Copy after login

4. Save the Variation:

Finally, save all the changes made to the variation:

$variation->save(); 
Copy after login

Example Usage:

To create a variable product with two attributes and two variations:

$parent_id = 123; // Your parent variable product ID

$variation_data_1 = array(
    'attributes' => array(
        'color' => 'Blue',
        'size' => 'Small'
    ),
    'sku' => 'VAR-1234-BLUE-SMALL',
    'regular_price' => '29.99',
    'stock_qty' => 20
);

$variation_data_2 = array(
    'attributes' => array(
        'color' => 'Green',
        'size' => 'Medium'
    ),
    'sku' => 'VAR-1234-GREEN-MEDIUM',
    'regular_price' => '39.99',
    'stock_qty' => 10
);

create_product_variation($parent_id, $variation_data_1);
create_product_variation($parent_id, $variation_data_2);
Copy after login

The above is the detailed content of How to Create a Variable Product and Add New Attribute Values Programmatically in WooCommerce?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template