Rumah >pembangunan bahagian belakang >tutorial php >Bagaimana untuk Mencipta Variasi Produk WooCommerce dengan Nilai Atribut Baharu Secara Program?

Bagaimana untuk Mencipta Variasi Produk WooCommerce dengan Nilai Atribut Baharu Secara Program?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-10 11:36:02476semak imbas

How to Create a WooCommerce Product Variation with New Attribute Values Programmatically?

Cara Membuat Variasi Produk WooCommerce dengan Nilai Atribut Baharu Secara Pengaturcaraan

Pengenalan

WooCommerce membolehkan anda mencipta produk berubah-ubah dengan atribut dan nilai yang berbeza. Untuk menambah variasi baharu secara pengaturcaraan, anda perlu mempertimbangkan perkara berikut:

  • Pastikan produk pembolehubah (induk) mempunyai set atribut yang diingini.
  • Untuk setiap variasi, sama ada buat yang baharu nilai atribut atau tetapkannya jika sudah wujud.

Fungsi Tersuai untuk Mencipta Produk Variasi

Fungsi tersuai berikut akan mencipta variasi produk untuk ID produk pembolehubah yang diberikan:

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

    // Create variation post data
    $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 variation post and create WC_Product_Variation object
    $variation_id = wp_insert_post( $variation_post );
    $variation = new WC_Product_Variation( $variation_id );

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

        // Create taxonomy if doesn't exist
        if( ! taxonomy_exists( $taxonomy ) )
            register_taxonomy(
                $taxonomy,
                'product_variation',
                array(
                    'hierarchical' => false,
                    'label'        => ucfirst( $attribute ),
                    'query_var'    => true,
                    'rewrite'      => array( 'slug' => sanitize_title($attribute) ),
                ),
            );

        // Check if term exists and create if not
        if( ! term_exists( $term_name, $taxonomy ) )
            wp_insert_term( $term_name, $taxonomy ); // Create term

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

        // Check if post term exists and set if not
        $post_term_names =  wp_get_post_terms( $product_id, $taxonomy, array('fields' => 'names') );
        if( ! in_array( $term_name, $post_term_names ) )
            wp_set_post_terms( $product_id, $term_name, $taxonomy, true );

        // Set attribute data in variation
        update_post_meta( $variation_id, 'attribute_'.$taxonomy, $term_slug );
    }

    // Set other variation data
    if( ! empty( $variation_data['sku'] ) )
        $variation->set_sku( $variation_data['sku'] );

    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'] );

    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(''); // Reset weight

    $variation->save();
}

Contoh Penggunaan

Untuk produk berubah-ubah dengan atribut "Saiz" dan "Warna", anda boleh membuat variasi sebagai berikut:

$parent_id = 746; // Variable product ID

$variation_data = array(
    'attributes' => array(
        'size'  => 'M',
        'color' => 'Green',
    ),
    'sku'           => '',
    'regular_price' => '22.00',
    'sale_price'    => '',
    'stock_qty'     => 10,
);

create_product_variation( $parent_id, $variation_data );

Ini akan menambah variasi dengan atribut dan data yang ditentukan pada produk pembolehubah.

Atas ialah kandungan terperinci Bagaimana untuk Mencipta Variasi Produk WooCommerce dengan Nilai Atribut Baharu Secara Program?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn