简体   繁体   English

将带有值的产品属性添加到 Woocommerce 中的产品

[英]Add Product Attributes with values to a product in Woocommerce

I am using this code to add custom attributes我正在使用此代码添加自定义属性

$attributes = array(
    array("name"=>"Size","options"=>array("S","L","XL","XXL"),"position"=>1,"visible"=>1,"variation"=>1),
    array("name"=>"Color","options"=>array("Red","Blue","Black","White"),"position"=>2,"visible"=>1,"variation"=>1)
);
if($attributes){
    $productAttributes=array();
    foreach($attributes as $attribute){
        $attr = wc_sanitize_taxonomy_name(stripslashes($attribute["name"])); // remove any unwanted chars and return the valid string for taxonomy name
        $attr = 'pa_'.$attr; // woocommerce prepend pa_ to each attribute name
        if($attribute["options"]){
            foreach($attribute["options"] as $option){
                wp_set_object_terms($product_id,$option,$attr,true); // save the possible option value for the attribute which will be used for variation later
            }
        }
        $productAttributes[sanitize_title($attr)] = array(
            'name' => sanitize_title($attr),
            'value' => $attribute["options"],
            'position' => $attribute["position"],
            'is_visible' => $attribute["visible"],
            'is_variation' => $attribute["variation"],
            'is_taxonomy' => '1'
        );
    }
    update_post_meta(11874,'_product_attributes',$productAttributes); // save the meta entry for product attributes

The result of this code I got added just product attribute Name without term values...这段代码的结果我只添加了产品属性名称而没有术语值...

See the picture看图在此处输入图片说明

I searched about that very much but did not got any answer.我搜索了很多,但没有得到任何答案。

There is some mistakes in your code.您的代码中有一些错误。 Your main mistake: The attribute terms to save as product meta data (at the end) need to be an array of term IDs (instead of term names) .您的主要错误:保存为产品元数据(最后)的属性术语需要是一组术语 ID (而不是术语名称)

Try the following revisited code:尝试以下重新访问的代码:

$product_id = 11874;

$attributes_data = array(
    array('name'=>'Size',  'options'=>array('S', 'L', 'XL', 'XXL'), 'visible' => 1, 'variation' => 1 ),
    array('name'=>'Color', 'options'=>array('Red', 'Blue', 'Black', 'White'), 'visible' => 1, 'variation' => 1 )
);

if( sizeof($attributes_data) > 0 ){
    $attributes = array(); // Initializing

    // Loop through defined attribute data
    foreach( $attributes_data as $key => $attribute_array ) {
        if( isset($attribute_array['name']) && isset($attribute_array['options']) ){
            // Clean attribute name to get the taxonomy
            $taxonomy = 'pa_' . wc_sanitize_taxonomy_name( $attribute_array['name'] );

            $option_term_ids = array(); // Initializing

            // Loop through defined attribute data options (terms values)
            foreach( $attribute_array['options'] as $option ){
                if( term_exists( $option, $taxonomy ) ){
                    // Save the possible option value for the attribute which will be used for variation later
                    wp_set_object_terms( $product_id, $option, $taxonomy, true );
                    // Get the term ID
                    $option_term_ids[] = get_term_by( 'name', $option, $taxonomy )->term_id;
                }
            }
        }
        // Loop through defined attribute data
        $attributes[$taxonomy] = array(
            'name'          => $taxonomy,
            'value'         => $option_term_ids, // Need to be term IDs
            'position'      => $key + 1,
            'is_visible'    => $attribute_array['visible'],
            'is_variation'  => $attribute_array['variation'],
            'is_taxonomy'   => '1'
        );
    }
    // Save the meta entry for product attributes
    update_post_meta( $product_id, '_product_attributes', $attributes );
}

Tested and works.测试和工作。

Note: All product attributes and their values need to be defined (with your actual code)注意:需要定义所有产品属性及其值(使用您的实际代码)

Related: Create new product attribute programmatically in Woocommerce相关: 在 Woocommerce 中以编程方式创建新的产品属性

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM