>백엔드 개발 >PHP 튜토리얼 >프로그래밍 방식으로 새로운 속성 값을 사용하여 WooCommerce 제품 변형을 만드는 방법은 무엇입니까?

프로그래밍 방식으로 새로운 속성 값을 사용하여 WooCommerce 제품 변형을 만드는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-10 11:36:02463검색

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

프로그래밍 방식으로 새로운 속성 값을 사용하여 WooCommerce 제품 변형을 만드는 방법

소개

WooCommerce 다양한 속성과 값을 가진 다양한 제품을 만들 수 있습니다. 프로그래밍 방식으로 새 변형을 추가하려면 다음을 고려해야 합니다.

  • 변수 제품(상위)에 원하는 속성이 설정되어 있는지 확인하세요.
  • 각 변형에 대해 새 변형을 생성하거나 속성 값을 사용하거나 이미 존재하는 경우 설정합니다.

제품 변형을 생성하는 사용자 정의 함수

다음 사용자 정의 함수는 특정 변수에 대한 제품 변형을 생성합니다. 제품 ID:

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();
}

사용 예

"사이즈" 및 "색상" 속성이 있는 가변 제품의 경우 다음과 같이 변형을 생성할 수 있습니다.

$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 );

이렇게 하면 지정된 속성과 데이터가 포함된 변형이 변수 제품에 추가됩니다.

위 내용은 프로그래밍 방식으로 새로운 속성 값을 사용하여 WooCommerce 제품 변형을 만드는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.