限制为一个已应用的优惠券,删除Woocommerce中其他先前已应用的优惠券 [英] Limit to one applied coupon, removing other previous applied coupons in Woocommerce

查看:52
本文介绍了限制为一个已应用的优惠券,删除Woocommerce中其他先前已应用的优惠券的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在动态制作优惠券以将用户电子邮件用作优惠券,但是如何限制用户每个购物车仅使用一张优惠券.如果使用多个自动,则从购物车中删除前一个.

I am making coupon dynamically to use user email as coupon but how can I restrict user to use only one coupon per cart. If use multiple auto removed the previous one from cart.

    add_filter ( 'woocommerce_get_shop_coupon_data', 'generate_coupons', 10, 2  );
    function generate_coupons( $data, $code) {
        global $wpdb, $woocommerce;
        $vpm_options        = get_option( 'vpm_email_coupon_option_name' ); // Array of All Options
        $amount             = $vpm_options['coupon_value_3']; // coupon_discount
        $offer_type         = $vpm_options['offer_type_2'];  // Type: fixed_cart, percent, fixed_product, percent_product
        //getting the coupon input value 
        if (filter_var($code, FILTER_VALIDATE_EMAIL) && email_exists( $code )) {
            $code = $code ;
        }else{
            $code = '';
        }  
        // Check if the coupon has already been created in the database
        $sql = $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_title = %s AND post_type = 'shop_coupon' AND post_status = 'publish' ORDER BY post_date DESC LIMIT 1;", $code );
        $coupon_id = $wpdb->get_var( $sql );

        if ( empty( $coupon_id ) ) {
            // Create a coupon with the properties you need
            $data = array(
                'discount_type'              => $offer_type,
                'coupon_amount'              => $amount, // value
                'product_ids'                => array(),
                'exclude_product_ids'        => array(),
                'usage_limit'                => '',
                'usage_limit_per_user'       => '',//Limit
                'limit_usage_to_x_items'     => '',
                'usage_count'                => '',
                'expiry_date'                => '2020-12-31', // YYYY-MM-DD
            );
            // Save the coupon in the database
            $coupon = array(
                'post_title'    => $code,
                'post_content'  => '',
                'post_status'   => 'publish',
                'post_author'   => 1,
                'post_type'     => 'shop_coupon'
            );
            $new_coupon_id = wp_insert_post( $coupon );

            // Write the $data values into postmeta table
            foreach ($data as $key => $value) {
                update_post_meta( $new_coupon_id, $key, $value );
            }
            //apply the coupon 
            $woocommerce->cart->add_discount( $code );
            return $data;
        }
    }

推荐答案

以下代码将删除第一个应用的优惠券,如果客户应用了另一个优惠券代码,则购物车(最后一个购物车中只有一个应用的优惠券)应用的优惠券):

The following code will remove the first applied coupon, if customer applies another coupon code, so there will be only one applied coupon in cart (the last applied coupon):

add_action( 'woocommerce_before_calculate_totals', 'one_applied_coupon_only', 10, 1 );
function one_applied_coupon_only( $cart ) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
        return;

    // For more than 1 applied coupons only
    if (  sizeof($cart->get_applied_coupons()) > 1 && $coupons = $cart->get_applied_coupons() ){
        // Remove the first applied coupon keeping only the last appield coupon
        $cart->remove_coupon( reset($coupons) );
    }
}

代码进入您的活动子主题(活动主题)的function.php文件中.经过测试,可以正常工作.

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

这篇关于限制为一个已应用的优惠券,删除Woocommerce中其他先前已应用的优惠券的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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