通过URL获取优惠券代码并在WooCommerce结账页面应用

14

我有一个WooCommerce网站,当客户添加产品到购物车后,会自动重定向到结帐页面,因此无法访问购物车页面。

我想通过URL(GET)在结帐页面上应用优惠券,例如https://example.com/?coupon_code=highfive

当客户单击此URL时,优惠码将存储在浏览器会话中。然后,如果他将任何产品添加到购物车,则会将优惠券应用于结帐页面。

这个可能吗?


10
这个问题绝对不会太宽泛,可以用几行代码来解决(最多需要5分钟回答)。 - LoicTheAztec
1个回答

25

更新3:可以通过以下两个钩子函数非常简单地完成此操作:

  • 第一个函数将捕获URL中的优惠券代码,并将其设置在WC_Sessions中。
  • 第二个函数将在结账页面中从会话中应用优惠券代码。

以下是代码:

add_action('init', 'get_custom_coupon_code_to_session');
function get_custom_coupon_code_to_session(){
    if( isset($_GET['coupon_code']) ){
        // Ensure that customer session is started
        if( isset(WC()->session) && ! WC()->session->has_session() )
            WC()->session->set_customer_session_cookie(true);
            
        // Check and register coupon code in a custom session variable
        $coupon_code = WC()->session->get('coupon_code');
        if(empty($coupon_code)){
            $coupon_code = esc_attr( $_GET['coupon_code'] );
            WC()->session->set( 'coupon_code', $coupon_code ); // Set the coupon code in session
        }
    }
}

add_action( 'woocommerce_before_checkout_form', 'add_discout_to_checkout', 10, 0 );
function add_discout_to_checkout( ) {
    // Set coupon code
    $coupon_code = WC()->session->get('coupon_code');
    if ( ! empty( $coupon_code ) && ! WC()->cart->has_discount( $coupon_code ) ){
        WC()->cart->add_discount( $coupon_code ); // apply the coupon discount
        WC()->session->__unset('coupon_code'); // remove coupon code from session
    }
}

代码放在当前使用的子主题(或主题)的function.php文件中。经过测试,能够正常工作。

灵感来自这个答案的代码,Lukasz Wiktor发布了一个插件:Woo Coupon URL


如何在成功应用优惠券后删除会话值? - developerme
@developerme 对不起,你是正确的... 道歉... 我已经更新了我的代码,请再试一次。谢谢 - LoicTheAztec
是的,它对我有效。谢谢你。但是当我在结账页面上删除优惠券应用字段时,它不起作用...你能帮我解决这个问题吗? - developerme
3
受到您的回答启发,我创建了一个WooCommerce插件:https://wordpress.org/plugins/woo-coupon-url/。 - Lukasz Wiktor
@LoicTheAztec - 谢谢你的回复。这个方法在最新版本的WooCommerce上还有效吗?我已经尝试过了,但没有任何效果。你有什么想法吗? - inspirednz
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接