我正在使用此代码添加自定义属性
$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
这个代码的结果我得到了添加只是产品属性名称没有术语值...
我找了很多,但没有得到任何答案。
你的代码中有一些错误。您的主要错误:要保存为产品元数据的属性术语(在最后)需要是术语标识数组(而不是术语名称)。
请尝试以下重新访问的代码:
$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 );
}
测试和工作。
注意:所有产品属性及其值都需要定义(使用您的实际代码)
相关:在Woocommerce中以编程方式创建新产品属性
第一件事:这是我在stackoverflow上发布的第一个问题。换句话说,这是我在你们的帮助下无法独自解决的第一个问题(非常感谢你们,你们让世界运转起来!)。 我的问题与@LoictheAztec对另一个问题的回答有关(我原本计划在那篇文章的评论中发布我的问题,但由于我是/曾经是潜伏者,我缺乏这样做的声誉):https://stackoverflow.com/a/47766413/13263330
我正在尝试向现有的WooCommerce产品添加一个具有多个值的新属性。 这是我正在使用的代码。我把它简化了一点,使它更清楚。 该属性显示在产品的属性列表中。然而,条款没有添加。 数据库中也有这些术语: 我做错了什么?我做了很多研究,读了一些其他的问题,但它们对我没有帮助。 在WooCommerce中以编程方式创建新产品属性
如何通过代码为woocommerce属性添加值?我已经创建了一个名为“Dispatch time”(分类法:pa_Dispatch)的属性,现在我想为特定产品的Dispatch属性添加值。 如何通过编程实现这一点?
当我试图获得所有产品属性时,它们没有任何值。 回应- 阵列([pa_品牌]= 但它在后端显示值
我正在以编程方式创建属性变体(变量产品)。我见过的所有东西都很容易做到这一点,但是值就是不显示出来。下面是我的代码: null 我已经尝试了所有的方法:将上面的值设置为术语slugs的数组,ID的数组,ID或slug/VALUE的简单字符串。什么都不管用。我还跟踪了这些stackoverflow问题: WooCommerce:向产品属性添加值br>创建WooCommerce产品变体添加空属性值br
在WooCommerce中,我试图使用以下代码将产品类别转换为产品属性: Is的部分工作原理与我在后端产品中需要看到的一样