根据 WooCommerce 中的订单数量设置折扣
Set discount based on number of orders in WooCommerce
在WooCommerce中,如何根据订单数量设置折扣?
例如我想根据客户订单应用折扣:
- 首单优惠 $50
- 二阶优惠$30
- 第三次订单折扣 10 美元?
我搜索了互联网,但没有找到任何可用的解决方案或插件。
谢谢。
这是一个挂接到 woocommerce_cart_calculate_fees
的自定义函数,它将根据客户订单数量向购物车添加自定义折扣,这样:
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
if( empty($customer_orders) || $customer_orders_count == 0 ){
$discount_text = __('First Order Discount', 'woocommerce');
$discount = -50;
}
// 2nd orders discount
elseif( $customer_orders_count == 1 ){
$discount_text = __('2nd Order Discount', 'woocommerce');
$discount = -30;
}
// 3rd orders discount
elseif( $customer_orders_count == 2 ){
$discount_text = __('3rd Order Discount', 'woocommerce');
$discount = -10;
}
// Apply discount
if( ! empty( $discount ) ){
// Note: Last argument is related to applying the tax (false by default)
$cart_object->add_fee( $discount_text, $discount, false);
}
}
代码在您的活动子主题(或主题)的 function.php 文件或任何插件文件中。
此代码已经过测试并且有效。
The only problem can be if customer is not logged in.
You may add, at the beginning, in first condition ! is_user_logged_in()
this way:
if ( is_admin() && ! defined( 'DOING_AJAX' ) && ! is_user_logged_in() )
return;
在WooCommerce中,如何根据订单数量设置折扣?
例如我想根据客户订单应用折扣:
- 首单优惠 $50
- 二阶优惠$30
- 第三次订单折扣 10 美元?
我搜索了互联网,但没有找到任何可用的解决方案或插件。
谢谢。
这是一个挂接到 woocommerce_cart_calculate_fees
的自定义函数,它将根据客户订单数量向购物车添加自定义折扣,这样:
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
if( empty($customer_orders) || $customer_orders_count == 0 ){
$discount_text = __('First Order Discount', 'woocommerce');
$discount = -50;
}
// 2nd orders discount
elseif( $customer_orders_count == 1 ){
$discount_text = __('2nd Order Discount', 'woocommerce');
$discount = -30;
}
// 3rd orders discount
elseif( $customer_orders_count == 2 ){
$discount_text = __('3rd Order Discount', 'woocommerce');
$discount = -10;
}
// Apply discount
if( ! empty( $discount ) ){
// Note: Last argument is related to applying the tax (false by default)
$cart_object->add_fee( $discount_text, $discount, false);
}
}
代码在您的活动子主题(或主题)的 function.php 文件或任何插件文件中。
此代码已经过测试并且有效。
The only problem can be if customer is not logged in.
You may add, at the beginning, in first condition
! is_user_logged_in()
this way:if ( is_admin() && ! defined( 'DOING_AJAX' ) && ! is_user_logged_in() ) return;