问题描述
我在WooCommerce中的每个产品都有几个属性。其中一个名为my-availability
,我需要根据库存变化和某些条件逻辑来动态更改其值。因此,当更改库存数量(通常按顺序减少)时,my-availability
属性的值将更改。它不应添加任何新属性,而只需更改现有属性的值即可。我完全不使用产品变体。
我是个初学者,并且尝试使用大量Google搜索在几天内构建这段代码。现在我有这样的东西:
function changeatt( $order )
{
$items = $order->get_items();
foreach( $items as $item ) {
$value2 = get_field( "naceste",$item['product_id']); //need to get value of custom field "naceste"
$value = get_post_meta( $item['product_id'],'_stock',true ); //need to get how many pcs is on stock
if ($value == 0 && $value2 > 0)
{$avl = 'Coming soon';}
if ($value == 0 && $value2 == 0)
{ $avl = 'Not in stock';}
if ($value > 0)
{ $avl = 'In stock';}
// update_post_meta( $item['product_id'],'my-availability',$avl );
wp_set_object_terms( $item['product_id'],$avl,'pa_my-availability',false);
}
}
add_action( 'woocommerce_reduce_order_stock',changeatt );
此代码实际上使用正确的值创建了新的自定义字段my-availability
,但是我需要将其保存到名为my-availability
的现有属性中。我想念什么?
解决方法
我找到了! update_post_meta
不能用于更改属性,不知道为什么。必须改为使用 wp_set_object_terms
,并且必须将pa_
添加到属性名称。我已将问题中的代码编辑为工作版本。 //
已为其他初学者删除了先前的无效行,他们将解决相同的情况并从中学习。我花了几天的时间解决了这个问题。
现在我很好奇,如何确定,可以使用update_post_meta
更改哪些类型的变量,以及使用wp_set_object_terms
可以更改哪些类型。