将带有值的产品属性添加到 Woocommerce 中的产品
Posted
技术标签:
【中文标题】将带有值的产品属性添加到 Woocommerce 中的产品【英文标题】:Add Product Attributes with values to a product in Woocommerce 【发布时间】:2019-07-11 22:02:39 【问题描述】:我正在使用此代码添加自定义属性
$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
我添加的这段代码的结果只是产品属性名称没有术语值...
看图
我搜索了很多,但没有得到任何答案。
【问题讨论】:
【参考方案1】:您的代码中有一些错误。您的主要错误:要保存为产品元数据的属性术语(最后)需要是术语 ID 数组 (而不是术语名称)。
尝试以下重新访问的代码:
$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 );
经过测试并且有效。
注意:所有产品属性及其值都需要定义(使用您的实际代码)
相关:Create new product attribute programmatically in Woocommerce
【讨论】:
以上是关于将带有值的产品属性添加到 Woocommerce 中的产品的主要内容,如果未能解决你的问题,请参考以下文章
以编程方式创建具有新属性值的 WooCommerce 产品变体
php 将WooCommerce属性(最小数量)添加到“联系表单7”表单。可以很容易地适应其他属性,以及产品元
在 WooCommerce 产品页面中显示带有标签和值的自定义字段?