当我使用页面模板ID中的ACF字段在单页模板上提交优惠券属性时,我试图以编程方式创建Woocommerce优惠券。
看看Woocommerce documentation的操作方法,他们建议在插入新的优惠券后使用update_post_meta()
设置属性。
但是,在执行此操作时,打印出生成的优惠券的WC_Coupon
对象并返回一个空数组时,产品ID不会被添加。
我已经确保分别打印时,ACF字段landing_page_products
返回一个ID数组,但是由于某种原因,它不会添加到对象或显示在管理优惠券屏幕中。
我发现,如果我使用$coupon->set_product_ids($products);
而不是更新meta,那么这似乎可行。
谁能解释为什么产品ID的更新元不起作用?
$coupon = [
'post_title' => $coupon_code,
'post_content' => '',
'post_status' => 'publish',
'post_author' => 1,
'post_type' => 'shop_coupon'
];
$coupon_id = wp_insert_post($coupon);
// Get products meta from current landing page $post_id //
$products = get_field('landing_page_products', $post_id);
/** Set default coupon meta **/
update_post_meta($coupon_id, 'individual_use', 'yes');
update_post_meta($coupon_id, 'apply_before_tax', 'no' );
update_post_meta($coupon_id, 'free_shipping', 'no' );
update_post_meta($coupon_id, 'product_ids', $products );
WC_Coupon Object
(
[data:protected] => Array
(
[product_ids] => Array
(
)
)
答案 0 :(得分:1)
我以前曾使用Woo Docs-尽管有此文档,但update_post_meta的array()参数不起作用。我曾经以编程方式创建和更新Woocommerce优惠券。
这是我的代码(已测试),现在正在运行,update_post_meta的“ product_ids” 需要字符串,而不是数组。 ID为130和131的产品的示例代码:
update_post_meta( $_newCouponID, 'product_ids', "130, 131");
//or
$product_ids = "130, 131";
update_post_meta( $_newCouponID, 'product_ids', $product_ids);
//still use wp_update_post at the end of your code
wp_update_post($_newCouponID);
我希望这会有所帮助。祝你有美好的一天。