根据在WooCommerce中的总支出,每位用户仅自动应用一次优惠券 [英] Auto apply coupon only one time per user based on total spent in WooCommerce

查看:88
本文介绍了根据在WooCommerce中的总支出,每位用户仅自动应用一次优惠券的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想根据客户的总消费金额自动应用优惠券。此优惠券仅需要客户一次使用。

I would like to apply a coupon automatically based on customer total spent amount. This coupon needs to be applied only one time by customer.

这是到目前为止我尝试过的操作,但屏幕空白:

This is what I've tried so far but I'm getting a blank screen:

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 );
        }
    }
}

我们将不胜感激。

推荐答案

首先,您需要为优惠券将每个用户的使用限制选项设置为1 (并保存),例如:

First you need to set, for your coupon, the "Usage limit per user" option to 1 (and save) like:

现在以下重新访问的代码仅在客户总支出达到定义的金额时才自动应用一次特定的优惠券:

Now the following revisited code will auto apply a specific coupon only once when the customer total spent has reached a defined amount:

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文件中。经过测试并有效。

Code goes in function.php file of your active child theme (or active theme). Tested and works.

这篇关于根据在WooCommerce中的总支出,每位用户仅自动应用一次优惠券的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆