This answer assumes you are using WooCommerce version 3.0 or newer.
下面是修改后的函数,以便在WooCommerce中使用新的CRUD对象。这是在更新版本的WooCommerce中编辑产品和向产品添加数据的方法。我们使用wc\\u get\\u products()来获取产品对象的数组,此函数接受各种参数,用于您可以签出的所有选项
https://github.com/woocommerce/woocommerce/wiki/wc_get_products-and-WC_Product_Query. 要查看产品对象上存在哪些setter,可以签出
https://docs.woocommerce.com/wc-apidocs/class-WC_Product.html.
我们还使用WC\\u Product\\u Attribute对象来创建属性。更多信息可在此处找到https://docs.woocommerce.com/wc-apidocs/class-WC_Product_Attribute.html.
有关函数功能的说明,请参见注释
function wccategory_set_attributes($categoryslug, $attributes) {
// Get any products in the category matching the slug we pass in
$products = wc_get_products(array(
\'status\' => \'publish\',
\'category\' => array($categoryslug),
));
// Loop the products
foreach($products as $product) {
$product_attributes = array();
foreach($attributes as $key => $val) {
// Create a new attribute for each of the attributes we have passed to the function
$new_attribute = new WC_Product_Attribute();
// If attribute exists globally we set the correct attribute id
$new_attribute->set_id(wc_attribute_taxonomy_id_by_name($key));
$new_attribute->set_name($key);
// Because we cast to array you can choose to pass in an array of values/options for the attribute
$new_attribute->set_options((array)$val);
$new_attribute->set_visible(1);
$new_attribute->set_variation(0);
$product_attributes[] = $new_attribute;
}
// Set the attributes on the product object
$product->set_attributes($product_attributes);
// Store the product
$product->save();
}
}
调用该函数(假设您有一个带有slug“theslug”的产品类别)
wccategory_set_attributes(\'theslug\', array(\'pa_length\' => \'\', \'pa_width\' => \'\'));
调用函数时,需要考虑很多事情。如果属性尚未全局创建(意味着它们不存在于WooCommerce中的Products->Attributes下),则在属性前面加上“pa\\u0”将在属性名称中包含“pa\\u0”。您可能不希望这样,您可以将“pa\\u length”替换为“length”,以此类推。像这样:
wccategory_set_attributes(\'theslug\', array(\'Length\' => \'\', \'Width\' => \'\'));
当属性不包含任何选项时,它将删除此产品存在的任何选项。如果要包含选项,可以通过传递单个值为每个选项包含一个选项,也可以传递一个选项数组。两个示例如下所示:
选项1
wccategory_set_attributes(\'theslug\', array(\'pa_length\' => \'100\', \'pa_width\' => \'500\'));
选项2
wccategory_set_attributes(\'theslug\', array(\'pa_length\' => array(\'100\', \'200\'), \'pa_width\' => array(\'500\', \'1000\')));
"type" is a reserved taxonomy name therefore you cannot create "pa_type" globally. 但是,您可以在产品上本地创建名为“Type”的产品属性。