即使在WooCommerce中购物车为空,也可以通过URL中的GET方法申请优惠券折扣

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了即使在WooCommerce中购物车为空,也可以通过URL中的GET方法申请优惠券折扣相关的知识,希望对你有一定的参考价值。

我有一个插件,可以向他们输入的电子邮件发送支持者推荐优惠券代码。当观众收到这封电子邮件时,我想创建一个流程,他们可以点击电子邮件中的“立即购物”,优惠券将自动添加。

截至目前,对于“立即购物”按钮下的链接,我输入了以下内容:

websitename.biz/cart__trashed?code=DISCOUNTCODE

要处理$code,我把它放在我的functions.php文件中:

add_action('woocommerce_before_cart', 'discount');
function discount( ) {
    global $woocommerce;
    $code= $_GET["code"];
   if(!empty($code)){       
    if($woocommerce->cart->add_discount($code)){ 
    echo '<div class="woocommerce_message"><strong>Applied coupon!</strong></div>';
        }
    }
}

我面临的问题是:

  • 如果观众访问网站时购物车中没有任何内容,则优惠券将不会被应用。
  • 如果有一些东西被添加并留在那里(因为一个cookie),那么优惠券代码将被完美地应用。

我相信它是因为购物车是空的,代码不起作用。

只需要在受众点击链接时应用代码即可。

我怎样才能使这个工作?

答案

正确的方法应该是:

  • 将购物车会话中的URL中的优惠券代码设置为自定义数据。
  • 当客户将第一个商品添加到购物车时,应用此优惠券代码的折扣。
  • 如果客户空车,请从此优惠券中删除折扣

您可以从任何网址(如商店页面,其他存档页面,产品页面,我的帐户页面或任何现有页面)中添加现有网址中的任何现有优惠券代码: ?code=DISCOUNTCODE在最后(DISCOUNTCODE是你的优惠券代号)。

这是代码:

// Set coupon code as custom data in cart session
add_action('wp_loaded', 'add_coupon_code_to_cart_session');
function add_coupon_code_to_cart_session() {
    // Exit if no code in URL or if the coupon code is already set cart session
    if( empty( $_GET["code"] ) || WC()->session->get( 'custom_discount' ) ) return;

    if( ! WC()->session->get( 'custom_discount' ) ) {
        $coupon_code = esc_attr($_GET["code"]);
        WC()->session->set( 'custom_discount', $coupon_code );
        // If there is an existing non empty cart active session we apply the coupon
        if( ! WC()->cart->is_empty() ){
            WC()->cart->add_discount( $coupon_code );
        }
    }
}

// Add coupon code when a product is added to cart once
add_action('woocommerce_add_to_cart', 'add_coupon_code_to_cart', 10, 6 );
function add_coupon_code_to_cart( $cart_item_key, $product_id, $quantity, $variation_id, $variation, $cart_item_data ){
    $coupon_code = WC()->session->get( 'custom_discount' );
    $applied_coupons = WC()->session->get('applied_coupons');

    if( empty($coupon_code) || in_array( $coupon_code, $applied_coupons ) ) return;

    WC()->cart->add_discount( $coupon_code );
}

// Remove coupon code when user empty his cart
add_action('woocommerce_cart_item_removed', 'check_coupon_code_cart_items_removed', 10, 6 );
function check_coupon_code_cart_items_removed( $cart_item_key, $cart ){
    $coupon_code = WC()->session->get( 'custom_discount' );

    if( $cart->has_discount( $coupon_code ) && $cart->is_empty() );
        $cart->remove_coupon( $coupon_code );
}

代码位于活动子主题(或活动主题)的function.php文件中或任何插件文件中。

这是经过测试和运作的

另一答案

使用下面的代码使coupan在任何情况下都有效

add_filter('woocommerce_coupon_is_valid','coupon_always_valid',10,1);
function coupon_always_valid($valid){
     $valid = true;
     return $valid ; 
}
另一答案
add_action('woocommerce_before_cart', 'discount');
function discount( ) {
    global $woocommerce;
    $code= $_GET["code"];
   if(!empty($code)){       
    if(WC()->session->set( 'applied_coupons', $code )){ 
    echo '<div class="woocommerce_message"><strong>Applied coupon!</strong></div>';
        }
    }
}

以上是关于即使在WooCommerce中购物车为空,也可以通过URL中的GET方法申请优惠券折扣的主要内容,如果未能解决你的问题,请参考以下文章

Woocommerce - 未登录用户的购物车为空

如果购物车为空,购物车页面将重定向到 WooCommerce 中的商店页面?

当 Woocommerce 购物车为空时,向项目添加 CSS 类

当 Woocommerce 购物车为空时更改元素颜色

php WooCommerce |测试购物车是否为空

WooCommerce 产品循环中添加 Ajax 选项的复选框添加到购物车