对 WooCommerce 中的非 "on sale" 商品应用欢迎折扣
Apply a welcome discount to non "on sale" items in WooCommerce
我使用此代码为注册用户设置“欢迎”折扣:
add_action( 'woocommerce_cart_calculate_fees', 'personal_discount_based', 20, 1 );
function personal_discount_based( $cart ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
$user = get_user_data();
$usId = $user->ID;
update_user_meta( $usId, 'discount', 5 );
$personalDisconte = $user->discount;
$orderNumbers = wc_get_customer_order_count($usid);
if ( ! $personalDisconte == true )
return;
$percentage = $personalDisconte;
$discount = $cart->get_subtotal() * $percentage / 100;
if(!empty($orderNumbers) && $orderNumbers == 1){
update_user_meta( $usId, 'discount', 0 );
}elseif( $orderNumbers > 1){
$cart->add_fee( sprintf( __("Discount (%s)", "woocommerce"), $percentage . '%'), -$discount, true );
}else{
$cart->add_fee( sprintf( __("Discount (%s)", "woocommerce"), $percentage . '%'), -$discount, true );
}
}
这段代码发挥了它的作用。但现在我面临另一个问题。当然,折扣适用于整个订单金额。在这种情况下,订单可能已经包含有折扣的产品。而且这个选项不适合卖家。
一般情况下,此代码产生的折扣可能不适用于订单总金额。但仅限于那些没有折扣的产品。
例如,用户将三个产品添加到购物车:
项目一 50 美元
项目二 75 美元
商品三 90$(旧价 120$)
所以,我必须对 50 + 75 的总和应用折扣(这些是正价产品)
50 + 75 - 5% 加上 90 之后的结果就是最后的总和。
目前,我不知道该怎么做,也不确定是否可以这样做。如果有人能帮忙,请指教。
如果您要为尚未购买的新客户应用欢迎折扣,那么您的代码就白费了,所以我简化并简化了您的代码。
然后要获取非“特价”商品的购物车小计,您需要遍历购物车商品才能获得。
重访代码:
add_action( 'woocommerce_cart_calculate_fees', 'welcome_discount_on_normal_items', 20, 1 );
function welcome_discount_on_normal_items( $cart ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
$user_id = get_current_user_id();
if( $user_id > 0 ) {
$percentage = 5; // Discount percentage
$orders_count = (int) wc_get_customer_order_count($user_id);
$subtotal = 0; // Initializing
// Loop through cart items
foreach( $cart->get_cart() as $cart_item ) {
// Add non on sale items to subtotal
if( ! $cart_item['data']->is_on_sale() ) {
$subtotal += $cart_item['line_subtotal'];
}
}
// Discount percentage amount on non "on sale" items subtotal
$discount = $subtotal * $percentage / 100;
// For new customer only that haven't purchase yet
if( $subtotal > 0 && $orders_count === 0 ) {
$cart->add_fee( sprintf( __("Discount (%s)", "woocommerce"), $percentage . '%'), -$discount, true );
}
}
}
代码进入活动子主题(或活动主题)的 functions.php 文件。已测试并有效。
我使用此代码为注册用户设置“欢迎”折扣:
add_action( 'woocommerce_cart_calculate_fees', 'personal_discount_based', 20, 1 );
function personal_discount_based( $cart ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
$user = get_user_data();
$usId = $user->ID;
update_user_meta( $usId, 'discount', 5 );
$personalDisconte = $user->discount;
$orderNumbers = wc_get_customer_order_count($usid);
if ( ! $personalDisconte == true )
return;
$percentage = $personalDisconte;
$discount = $cart->get_subtotal() * $percentage / 100;
if(!empty($orderNumbers) && $orderNumbers == 1){
update_user_meta( $usId, 'discount', 0 );
}elseif( $orderNumbers > 1){
$cart->add_fee( sprintf( __("Discount (%s)", "woocommerce"), $percentage . '%'), -$discount, true );
}else{
$cart->add_fee( sprintf( __("Discount (%s)", "woocommerce"), $percentage . '%'), -$discount, true );
}
}
这段代码发挥了它的作用。但现在我面临另一个问题。当然,折扣适用于整个订单金额。在这种情况下,订单可能已经包含有折扣的产品。而且这个选项不适合卖家。
一般情况下,此代码产生的折扣可能不适用于订单总金额。但仅限于那些没有折扣的产品。
例如,用户将三个产品添加到购物车:
项目一 50 美元 项目二 75 美元 商品三 90$(旧价 120$)
所以,我必须对 50 + 75 的总和应用折扣(这些是正价产品) 50 + 75 - 5% 加上 90 之后的结果就是最后的总和。
目前,我不知道该怎么做,也不确定是否可以这样做。如果有人能帮忙,请指教。
如果您要为尚未购买的新客户应用欢迎折扣,那么您的代码就白费了,所以我简化并简化了您的代码。
然后要获取非“特价”商品的购物车小计,您需要遍历购物车商品才能获得。
重访代码:
add_action( 'woocommerce_cart_calculate_fees', 'welcome_discount_on_normal_items', 20, 1 );
function welcome_discount_on_normal_items( $cart ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
$user_id = get_current_user_id();
if( $user_id > 0 ) {
$percentage = 5; // Discount percentage
$orders_count = (int) wc_get_customer_order_count($user_id);
$subtotal = 0; // Initializing
// Loop through cart items
foreach( $cart->get_cart() as $cart_item ) {
// Add non on sale items to subtotal
if( ! $cart_item['data']->is_on_sale() ) {
$subtotal += $cart_item['line_subtotal'];
}
}
// Discount percentage amount on non "on sale" items subtotal
$discount = $subtotal * $percentage / 100;
// For new customer only that haven't purchase yet
if( $subtotal > 0 && $orders_count === 0 ) {
$cart->add_fee( sprintf( __("Discount (%s)", "woocommerce"), $percentage . '%'), -$discount, true );
}
}
}
代码进入活动子主题(或活动主题)的 functions.php 文件。已测试并有效。