根据在 WooCommerce 中的总花费,每位用户仅自动应用一次优惠券
Auto apply coupon only one time per user based on total spent in WooCommerce
我想根据客户总消费金额自动应用优惠券。此优惠券仅需客户使用一次。
这是我迄今为止尝试过的方法,但出现空白屏幕:
add_action( 'woocommerce_before_calculate_totals', 'loyalty_order_discount', 10, 1 );
function loyalty_order_discount( $order_id ) {
global $woocommerce;
$coupon = 'loyaltydiscount';
$customer = new WC_Customer(get_current_user_id());
$total_spent = 30;
$order = wc_get_order( $order_id );
foreach( $order->get_used_coupons( $customer ) as $coupon_name ){
// Retrieving the coupon ID
$coupon_post_obj = get_page_by_title($coupon_name, OBJECT, 'shop_coupon');
$coupon_id = $coupon_post_obj->ID;
$coupons_obj = new WC_Coupon($coupon_id);
if( $coupons_obj == $coupon && $customer->get_total_spent() < $total_spent ){
$woocommerce->cart->remove_coupon( $coupon );
}
elseif ( ! $coupons_obj == $coupon && $customer->get_total_spent() >= $total_spent){
$woocommerce->cart->add_discount( $coupon );
}
}
}
感谢任何帮助。
首先,您需要将优惠券的 "Usage limit per user" 选项设置为 1 (并保存),例如:
现在,当客户总花费达到定义的金额时,以下重新访问的代码将仅自动应用一次特定优惠券:
add_action( 'woocommerce_before_calculate_totals', 'enable_customer_loyalty_discount', 10, 1 );
function enable_customer_loyalty_discount( $cart ) {
if ( ( is_admin() && ! defined( 'DOING_AJAX' ) ) || ! is_user_logged_in() )
return;
if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
return;
//Your settings below
$coupon_code = 'loyaltydiscount';
$coupon_code = 'summer';
$total_spent = 30;
if( ! in_array( $coupon_code, $cart->get_applied_coupons() ) ) {
$user_id = get_current_user_id(); // User ID
// Get the WC_Customer instance Object
$customer = New WC_Customer( $user_id );
$email = $customer->get_billing_email(); // Billing email
// If the user total spent has not reached the define amount, we exit
if( $customer->get_total_spent() < $total_spent ) {
return;
}
// Get the WC_Coupon instance Object
$coupon = New WC_Coupon( $coupon_code );
// If the coupon has already been used by the customer, we exit
if( array_intersect( array($user_id, $email), $coupon->get_used_by() ) {
return;
}
$cart->apply_coupon( $coupon_code );
}
}
代码进入您的活动子主题(或活动主题)的 function.php 文件。已测试并有效。
我想根据客户总消费金额自动应用优惠券。此优惠券仅需客户使用一次。
这是我迄今为止尝试过的方法,但出现空白屏幕:
add_action( 'woocommerce_before_calculate_totals', 'loyalty_order_discount', 10, 1 );
function loyalty_order_discount( $order_id ) {
global $woocommerce;
$coupon = 'loyaltydiscount';
$customer = new WC_Customer(get_current_user_id());
$total_spent = 30;
$order = wc_get_order( $order_id );
foreach( $order->get_used_coupons( $customer ) as $coupon_name ){
// Retrieving the coupon ID
$coupon_post_obj = get_page_by_title($coupon_name, OBJECT, 'shop_coupon');
$coupon_id = $coupon_post_obj->ID;
$coupons_obj = new WC_Coupon($coupon_id);
if( $coupons_obj == $coupon && $customer->get_total_spent() < $total_spent ){
$woocommerce->cart->remove_coupon( $coupon );
}
elseif ( ! $coupons_obj == $coupon && $customer->get_total_spent() >= $total_spent){
$woocommerce->cart->add_discount( $coupon );
}
}
}
感谢任何帮助。
首先,您需要将优惠券的 "Usage limit per user" 选项设置为 1 (并保存),例如:
现在,当客户总花费达到定义的金额时,以下重新访问的代码将仅自动应用一次特定优惠券:
add_action( 'woocommerce_before_calculate_totals', 'enable_customer_loyalty_discount', 10, 1 );
function enable_customer_loyalty_discount( $cart ) {
if ( ( is_admin() && ! defined( 'DOING_AJAX' ) ) || ! is_user_logged_in() )
return;
if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
return;
//Your settings below
$coupon_code = 'loyaltydiscount';
$coupon_code = 'summer';
$total_spent = 30;
if( ! in_array( $coupon_code, $cart->get_applied_coupons() ) ) {
$user_id = get_current_user_id(); // User ID
// Get the WC_Customer instance Object
$customer = New WC_Customer( $user_id );
$email = $customer->get_billing_email(); // Billing email
// If the user total spent has not reached the define amount, we exit
if( $customer->get_total_spent() < $total_spent ) {
return;
}
// Get the WC_Coupon instance Object
$coupon = New WC_Coupon( $coupon_code );
// If the coupon has already been used by the customer, we exit
if( array_intersect( array($user_id, $email), $coupon->get_used_by() ) {
return;
}
$cart->apply_coupon( $coupon_code );
}
}
代码进入您的活动子主题(或活动主题)的 function.php 文件。已测试并有效。