web-dev-qa-db-ja.com

URL経由でクーポンコードを取得し、WooCommerceチェックアウトページに適用する

私はWooCommerceウェブサイトを持っていて、顧客が商品をカートに追加すると、チェックアウトページにリダイレクトされるため、カートページにアクセスできません。

チェックアウトページのhttps://example.com/?coupon_code=highfiveのようなURL(GET)を介してクーポンを適用したいと思います。

顧客がこのURLをクリックすると、クーポンコードがブラウザセッションに保存されます。次に、カートに商品を追加すると、クーポンがチェックアウトページに適用されます。

これは可能ですか?

8
developerme

Update 3:これは、次の2つのフック関数を使用して非常に簡単な方法で実行できます。

  • 最初のコードは、Urlでクーポンコードをキャッチし、WC_Sessionsで設定します。
  • 2つ目は、チェックアウトページのセッションからクーポンコードを適用します。

これがこのコードです:

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( !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

13
LoicTheAztec