自 WooCommerce 3+ 起以编程方式创建优惠券

问题描述

我使用此代码以编程方式在 woocommerce 中添加优惠券。

    if(empty($coupon_post)){

        $coupon = array(
            'post_title'    => $coupon_code,'post_content'  => '','post_status'   => 'publish','post_author'   => 1,'post_type'     => 'shop_coupon'
        );

        $new_coupon_id = wp_insert_post( $coupon );

        // Add meta
update_post_meta( $new_coupon_id,'discount_type',$discount_type );
update_post_meta( $new_coupon_id,'coupon_amount',$amount );
update_post_meta( $new_coupon_id,'individual_use','yes' );
update_post_meta( $new_coupon_id,'product_ids','' );
update_post_meta( $new_coupon_id,'exclude_product_ids','usage_limit','expiry_date','apply_before_tax','free_shipping','no' );      
update_post_meta( $new_coupon_id,'exclude_sale_items','no' );     
update_post_meta( $new_coupon_id,'product_categories','' );       
update_post_meta( $new_coupon_id,'exclude_product_categories','minimum_amount','customer_email','' ); 
    }

但它总是说usage_limit = 1。

我添加了额外的代码来更新:

add_action( 'save_post_shop_coupon','my_child_after_coupon_save',10,3 );

function my_child_after_coupon_save( $post_id,$post,$update ) {
   update_post_meta( $post_id,'');
}

但它首先不起作用。但是如果我在后端打开优惠券并更新而不做任何更改。使用限制设置为无限制。

怎么触发这个,我不需要打开所有的优惠券。

解决方法

从 WooCommerce 3 开始,您的代码有点过时了,例如 apply_before_tax 不再使用。您最好使用所有可用的 WC_Coupon setter methods 来创建优惠券。

在下面的代码中,我只使用了必要的 setter 方法(与您的代码相关)

// Get an empty instance of the WC_Coupon Object
$coupon = new WC_Coupon();

// Set the necessary coupon data (since WC 3+)
$coupon->set_code( $coupon_code ); // (string)
// $coupon->set_description( $description ); // (string)
$coupon->set_discount_type( $discount_type ); // (string)
$coupon->set_amount( $coupon_amount ); // (float)
// $coupon->set_date_expires( $date_expires ); // (string|integer|null)
// $coupon->set_date_created( $date_created ); // (string|integer|null)
// $coupon->set_date_modified( $date_created ); // (string|integer|null)
// $coupon->set_usage_count( $usage_count ); // (integer)
$coupon->set_individual_use( true ); // (boolean) 
// $coupon->set_product_ids( $product_ids ); // (array)
// $coupon->set_excluded_product_ids( $excl_product_ids ); // (array)
$coupon->set_usage_limit( 0 ); // (integer)
// $coupon->set_usage_limit_per_user( $usage_limit_per_user ); // (integer)
// $coupon->set_limit_usage_to_x_items( $limit_usage_to_x_items ); // (integer|null)
// $coupon->set_free_shipping( $free_shipping ); // (boolean) | default: false
// $coupon->set_product_categories( $product_categories ); // (array)
// $coupon->set_excluded_product_categories( $excl_product_categories ); // (array)
// $coupon->set_exclude_sale_items( $excl_sale_items ); // (boolean)
// $coupon->set_minimum_amount( $minimum_amount ); // (float)
// $coupon->set_maximum_amount( $maximum_amount ); // (float)
// $coupon->set_email_restrictions( $email_restrictions ); // (array)
// $coupon->set_used_by( $used_by ); // (array)
// $coupon->set_virtual( $is_virtual ); // (array)

// Create,publish and save coupon (data)
$coupon->save();

现在要更新优惠券,您可以将以下挂钩函数与任何 setter 方法一起使用,例如:

add_action( 'woocommerce_coupon_options_save','action_coupon_options_save',10,2 );
function action_coupon_options_save( $post_id,$coupon ) {
    $coupon->set_usage_limit( 0 );
    $coupon->save();
}

代码位于活动子主题(或活动主题)的functions.php 文件中。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...