WooCommerce通过简单产品的CRUD更改产品全局属性值

时间:2018-05-16 作者:Daniel Klose

我有一个简单的Woocommerce产品和一个名为Foil(slug:Foil)(pa id:pa\\U Foil)的全局属性。箔片属性可以有两个值“是”(slug:Yes)或“否”(slug:No)。

现在我有了简单的乘积49,它给属性“Foil”赋值为“No”。我想使用CRUD以编程方式将该值更改为“Yes”。这是我的代码:

global $woocommerce;
$product = wc_get_product(\'49\');
$attribute_object = new WC_Product_Attribute();;
                    $attribute_object->set_name( \'pa_foil\' );
                    $attribute_object->set_options( \'yes\' );
                    $attribute_object->set_visible( 1 );
                    $attribute_object->set_variation( 0 );
                    $attribute_object->set_taxonomy ( 1 );
                    $attributes[] = $attribute_object;
$product->set_attributes( $attributes );
$product->save();
它所做的是创建一个名为pa\\u foil的新自定义产品属性,该属性的值为空。如何应用全局产品属性Foil并设置预定义的“否”值?

1 个回复
最合适的回答,由SO网友:Sally CJ 整理而成

我不确定您使用的是哪个WooCommerce版本,但在最新版本(3.3.5)中,WC_Product_Attribute 没有set_taxonomy() 方法所以我把它改成:

$attribute_object->set_id( 1 ); // set the taxonomy ID
其次,这里你应该通过array 术语ID和非string: (在本例中,123 是术语的IDYes “箔片”或pa_foil 分类法)

$attribute_object->set_options( \'yes\' ); // incorrect
$attribute_object->set_options( [ 123 ] ); // correct
总之,我使用的代码如下:

// Array of $taxonomy => WC_Product_Attribute $attribute
$attributes = $product->get_attributes();

$term = get_term_by( \'name\', \'Yes\', \'pa_foil\' );
// Or use $term = get_term_by( \'slug\', \'yes\', \'pa_foil\' );

// Attribute `options` is an array of term IDs.
$options = [ $term->term_id ];
// Or set a static ID: $options = [ 123 ];

$attribute_object = new WC_Product_Attribute();
$attribute_object->set_name( \'pa_foil\' );
$attribute_object->set_options( $options );
$attribute_object->set_visible( 1 );
$attribute_object->set_variation( 0 );
$attribute_object->set_id( 1 );
$attributes[\'pa_foil\'] = $attribute_object;

$product->set_attributes( $attributes );
$product->save();

结束

相关推荐