Php 通过URL获取优惠券代码,并将其应用于WooCommerce结帐页面

Php 通过URL获取优惠券代码,并将其应用于WooCommerce结帐页面,php,wordpress,woocommerce,cart,coupon,Php,Wordpress,Woocommerce,Cart,Coupon,我有一个WooCommerce网站,当客户添加到购物车产品时,它会被重定向到结帐页面,所以购物车页面无法访问 我想通过结账页面上的URL(GET)申请优惠券,比如https://example.com/?coupon_code=highfive 当客户单击此URL时,优惠券代码将存储在浏览器会话中。然后,如果他将任何产品添加到购物车,则优惠券将应用到结帐页面 这可能吗?更新3:这可以通过以下两个挂钩函数以非常简单的方式完成: 第一个将捕获Url中的优惠券代码,并在WC_会话中设置它 第二个将应

我有一个WooCommerce网站,当客户添加到购物车产品时,它会被重定向到结帐页面,所以购物车页面无法访问

我想通过结账页面上的URL(
GET
)申请优惠券,比如
https://example.com/?coupon_code=highfive

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


这可能吗?

更新3:这可以通过以下两个挂钩函数以非常简单的方式完成:

  • 第一个将捕获Url中的优惠券代码,并在WC_会话中设置它
  • 第二个将应用结帐页面会话中的优惠券代码
以下是代码:

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文件。测试和工作

受此答案代码的启发,发布了一个插件:


如何在优惠券成功应用后删除会话值??并且在尝试此代码时,我收到错误消息“抱歉,此优惠券仅对初始付款有效,购物车不需要初始付款。”@developerme抱歉,你是对的……抱歉……我已更新了代码,请重试。谢谢它对我有用谢谢但当我删除结帐页面上提交的优惠券申请时它不起作用…表格你能帮我吗?受你回答的启发,我创建了一个WooCommerce插件这个问题绝对不是太广泛…只需几行代码就可以完成(最多5分钟回答)。