根据在商店 woocommerce 中的总花费自动应用优惠券
Auto apply coupon based on total spent in shop woocommerce
我需要根据登录用户在商店的总消费,在 woocommerce 购物车中应用之前创建的优惠券。例如,如果用户在之前的订单中已经花费了 300 美元或更多,则在下一个订单中,自动应用 "xxx" 优惠券。
基于 "" 回答线程,这就是我目前所拥有的:
add_action( 'woocommerce_before_calculate_totals', 'auto_add_coupon_based_on_cart_items_count', 25, 1 );
function auto_add_coupon_based_on_cart_items_count( $user_id, $cart ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
// Setting and initialising variables
$coupon = 'descuentolealtad'; // <=== Coupon code
$matched = false;
$customer = new WC_Customer( $user_id );
if( $customer->get_total_spent >= 60 ){
$matched = true; // Set to true
}
// If conditions are matched add coupon is not applied
if( $matched && ! $cart->has_discount( $coupon )){
// Apply the coupon code
$cart->add_discount( $coupon );
// Optionally display a message
wc_add_notice( __('Descuento de Lealtad aplicado'), 'notice');
}
// If conditions are not matched and coupon has been appied
elseif( ! $matched && $cart->has_discount( $coupon )){
// Remove the coupon code
$cart->remove_coupon( $coupon );
// Optionally display a message
//wc_add_notice( __('Descuento de Lealtad removido'), 'error');
}
}
我正在尝试使用 woocommerce 的专用 get_total_spent()
功能,但给我一个空白屏幕。
感谢任何帮助。
编辑
这是我的工作代码,因为我使用的是负费用:
add_action('woocommerce_cart_calculate_fees' , 'discount_based_on_customer_orders', 10, 1);
function discount_based_on_customer_orders( $cart_object ){
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
// Getting "completed" customer orders
$customer_orders = get_posts( array(
'numberposts' => -1,
'meta_key' => '_customer_user',
'meta_value' => get_current_user_id(),
'post_type' => 'shop_order', // WC orders post type
'post_status' => 'wc-completed' // Only orders with status "completed"
) );
// Orders count
$customer_orders_count = count($customer_orders);
// The cart total
$cart_total = WC()->cart->get_total(); // or WC()->cart->get_total_ex_tax()
// First customer order discount
if( empty($customer_orders) || $customer_orders_count == 0 ){
$discount_text = __('Loyalty Discount', 'woocommerce');
$discount = -7;
}
}
已更新 - 您的代码中有很多错误,例如:
- 这个钩子只有一个变量参数:
$cart
…而不是$user_id
和$cart
- 从 Woocommerce 3 开始,使用方法
get_total_spent()
而不是 属性 get_total_spent
.
- 您应该首先检查用户是否也已登录。
改用以下重新访问的代码:
add_action( 'woocommerce_before_calculate_totals', 'auto_add_coupon_based_on_total_spent', 10, 1 );
function auto_add_coupon_based_on_total_spent( $cart ) {
if ( ( is_admin() && ! defined( 'DOING_AJAX' ) ) || ! is_user_logged_in() )
return;
if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
return;
// Setting and initialising variables
$coupon = 'summer'; // <=== Coupon code
$spent_amount = 60;
$customer = new WC_Customer(get_current_user_id());
// If conditions are matched add coupon is not applied
if( $customer->get_total_spent() >= $spent_amount && ! $cart->has_discount( $coupon )){
// Apply the coupon code
$cart->add_discount( $coupon );
// Optionally display a message
wc_add_notice( __('Descuento de Lealtad aplicado'), 'notice');
}
// If conditions are not matched and coupon has been appied
elseif($customer->get_total_spent() < $spent_amount && $cart->has_discount( $coupon )){
// Remove the coupon code
$cart->remove_coupon( $coupon );
}
}
代码进入您的活动子主题(或活动主题)的 function.php 文件。它应该更好用。
我需要根据登录用户在商店的总消费,在 woocommerce 购物车中应用之前创建的优惠券。例如,如果用户在之前的订单中已经花费了 300 美元或更多,则在下一个订单中,自动应用 "xxx" 优惠券。
基于 "
add_action( 'woocommerce_before_calculate_totals', 'auto_add_coupon_based_on_cart_items_count', 25, 1 );
function auto_add_coupon_based_on_cart_items_count( $user_id, $cart ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
// Setting and initialising variables
$coupon = 'descuentolealtad'; // <=== Coupon code
$matched = false;
$customer = new WC_Customer( $user_id );
if( $customer->get_total_spent >= 60 ){
$matched = true; // Set to true
}
// If conditions are matched add coupon is not applied
if( $matched && ! $cart->has_discount( $coupon )){
// Apply the coupon code
$cart->add_discount( $coupon );
// Optionally display a message
wc_add_notice( __('Descuento de Lealtad aplicado'), 'notice');
}
// If conditions are not matched and coupon has been appied
elseif( ! $matched && $cart->has_discount( $coupon )){
// Remove the coupon code
$cart->remove_coupon( $coupon );
// Optionally display a message
//wc_add_notice( __('Descuento de Lealtad removido'), 'error');
}
}
我正在尝试使用 woocommerce 的专用 get_total_spent()
功能,但给我一个空白屏幕。
感谢任何帮助。
编辑
这是我的工作代码,因为我使用的是负费用:
add_action('woocommerce_cart_calculate_fees' , 'discount_based_on_customer_orders', 10, 1);
function discount_based_on_customer_orders( $cart_object ){
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
// Getting "completed" customer orders
$customer_orders = get_posts( array(
'numberposts' => -1,
'meta_key' => '_customer_user',
'meta_value' => get_current_user_id(),
'post_type' => 'shop_order', // WC orders post type
'post_status' => 'wc-completed' // Only orders with status "completed"
) );
// Orders count
$customer_orders_count = count($customer_orders);
// The cart total
$cart_total = WC()->cart->get_total(); // or WC()->cart->get_total_ex_tax()
// First customer order discount
if( empty($customer_orders) || $customer_orders_count == 0 ){
$discount_text = __('Loyalty Discount', 'woocommerce');
$discount = -7;
}
}
已更新 - 您的代码中有很多错误,例如:
- 这个钩子只有一个变量参数:
$cart
…而不是$user_id
和$cart
- 从 Woocommerce 3 开始,使用方法
get_total_spent()
而不是 属性get_total_spent
. - 您应该首先检查用户是否也已登录。
改用以下重新访问的代码:
add_action( 'woocommerce_before_calculate_totals', 'auto_add_coupon_based_on_total_spent', 10, 1 );
function auto_add_coupon_based_on_total_spent( $cart ) {
if ( ( is_admin() && ! defined( 'DOING_AJAX' ) ) || ! is_user_logged_in() )
return;
if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
return;
// Setting and initialising variables
$coupon = 'summer'; // <=== Coupon code
$spent_amount = 60;
$customer = new WC_Customer(get_current_user_id());
// If conditions are matched add coupon is not applied
if( $customer->get_total_spent() >= $spent_amount && ! $cart->has_discount( $coupon )){
// Apply the coupon code
$cart->add_discount( $coupon );
// Optionally display a message
wc_add_notice( __('Descuento de Lealtad aplicado'), 'notice');
}
// If conditions are not matched and coupon has been appied
elseif($customer->get_total_spent() < $spent_amount && $cart->has_discount( $coupon )){
// Remove the coupon code
$cart->remove_coupon( $coupon );
}
}
代码进入您的活动子主题(或活动主题)的 function.php 文件。它应该更好用。