Woocommerce优惠券-无法以编程方式使用update_post_meta更新产品ID

时间:2019-08-21 09:22:37

标签: php wordpress woocommerce

当我使用页面模板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
                    (
                    )
)

1 个答案:

答案 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);

我希望这会有所帮助。祝你有美好的一天。