0

我正在使用来自 json 提要的数据创建可变产品。但问题是我在开始时没有所有属性值,所以当我解析提要时,我应该添加新的 - 追加。相反,我正在替换它们,所以我只有最后一个。如何更改代码以附加产品属性?

这是我的代码:

function create_product_variation( $product_id, $variation_data ){
    global $wpdb;
    // Get the Variable product object (parent)
    $product = wc_get_product($product_id);
    
    //check if variation exists, if no create the variation
    if( $wpdb->get_var( $wpdb->prepare( "SELECT post_id FROM $wpdb->postmeta WHERE meta_key='_sku' AND meta_value='%s' LIMIT 1", $variation_data['sku'] )) == NULL ){
    
        $variation_post = array(
            'post_title'  => $variation_data['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 );
    }
    else{
        $variation_id = $wpdb->get_var( $wpdb->prepare( "SELECT post_id FROM $wpdb->postmeta WHERE meta_key='_sku' AND meta_value='%s' LIMIT 1", $variation_data['sku'] ));
        $variation = wc_get_product($variation_id);
    }
    
    $variation->set_name($variation_data['title']);
    $variation->set_description($variation_data['title']);
    
    // Iterating through the variations attributes
    delete_post_meta($variation_id, '_product_attributes');
    if($variation_data['color'] != null && !empty($variation_data['color'])){
        wp_set_object_terms( $product_id, $variation_data['color'], 'pa_color' );

        $att_color = Array('pa_color' =>Array(
            'name'=>'pa_color',
            'value'=>sanitize_title(make_greeklish($variation_data['color'])),
            'is_visible' => '1',
            'is_taxonomy' => '1',
            'is_variation' => '1',
        ));
        
        
    }


    if($variation_data['size'] != null && !empty($variation_data['size'])){
        wp_set_object_terms( $product_id, $variation_data['size'], 'pa_size' );

        $att_size = Array('pa_size' =>Array(
            'name'=>'pa_size',
            'value'=>sanitize_title(make_greeklish($variation_data['size'])),
            'is_visible' => '1',
            'is_taxonomy' => '1',
            'is_variation' => '1',
        ));
        
        
    }

    $check2 = update_post_meta( $product_id, '_product_attributes', array_merge((array)$att_color, (array)$att_size));
    wp_set_object_terms($product_id, 'variable', 'product_type', true); 
    update_post_meta($variation_id, 'attribute_pa_color', get_term_by('name', $variation_data['color'], 'pa_color')->slug);
    update_post_meta($variation_id, 'attribute_pa_size', get_term_by('name', $variation_data['size'], 'pa_size')->slug);
    ## Set/save all other data.......

4

0 回答 0