[WooCommerce] 結帳前要求使用者先登入或是註冊的方法

本篇文章更新時間:2020/10/08
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知。
一介資男的 LINE 社群開站囉!歡迎入群聊聊~
如果本站內容對你有幫助,歡迎使用 BFX Pay 加密貨幣新台幣 贊助支持。


WooCommerce 後台有設定(「允許客戶免帳號下訂單」)可以決定下單是否需要註冊登入帳號,使用者體驗彈性設計下,預設有兩個地方可以登入註冊,一個是「/my-account/」另個是「/checkout/」。

根據業主的需求及其背後的原因都不同,有人是分析行為用途,有人是希望快速結帳,所以沒有絕對的設定。

本文紀錄的方法是:加入購物車後結帳前要求先至我的帳號 /my-account/ 登入網站

手動版本

function mxp_wc_logged_in_before_checkout() {
    $page_id = 7; //checkout page id
    if (!is_user_logged_in() && is_page($page_id)) {
        //沒登入又是 checkout 頁面的話
        $url = add_query_arg(
            'redirect_to_checkout',
            get_permalink($page_id),
            site_url('/my-account/')
        );
        wp_redirect($url);
        exit;
    }
    if (is_user_logged_in()) {
        //my-account page id
        if (is_page(8)) {
            $redirect = $_GET['redirect_to_checkout'];
            if (isset($redirect)) {
                echo '';
            }

        }
    }
}
add_action('template_redirect', 'mxp_wc_logged_in_before_checkout');

function mxp_wc_login_redirect($redirect) {
    if (isset($_GET['redirect_to_checkout'])) {
        return wc_get_checkout_url();
    }
    return $redirect;
}
add_filter('woocommerce_login_redirect', 'mxp_wc_login_redirect', 999, 1);

將上述的程式碼片段加入(子)主題下的 functions.php

記得改程式對應頁面的 Post ID 編號。

也要確定

外掛版本

後台下載安裝並啟用這款「WooCommerce Force Authentification Before Checkout」,搞定!

後記

這兩個方法其實是一樣的設計,外掛僅多一個包裝,可以不用修改程式碼來變更這項需求。

會特別抽出來寫也是如果有其他延伸判斷登入與跳轉不同頁面的設計需求等,都可以使用第一個手動版本修改。而此外掛則已經把需求寫死,安裝啟用即有效果!


Share:

作者: Chun

資訊愛好人士。主張「人人都該為了偷懶而進步」。期許自己成為斜槓到變進度條 100% 的年輕人。[///////////____36%_________]

參與討論

  1. abcorzdef
  2. Chun

4 則留言

  1. 謝謝提供這方法
    第一次,結帳流程沒問題,登入帳號結帳,綠界刷卡完可以跳轉回來感謝頁面。
    第二次,帳號沒登出,直接再購買一次商品,綠界刷卡完會跳轉去結帳頁面,不會跳去感謝頁面。

    1. 目前還沒遇過這個情況,請問發生這問題的網站是?另外就是有測試過其他金流方式看會不會也有一樣錯誤?(貨到付款、銀行轉帳..等非綠界金流)

  2. 只要是從綠界刷卡頁面跳轉回來網站都有這個問題,第一次購買完正常,可以跳到感謝頁,不登出直接第二次購買,綠界刷卡完,跳轉回來不會去感謝頁面,會跑到Cart頁面顯示購物車以空。
    貨到付款正常,使用RY外掛

    1. 關掉結帳前登入的功能就都正常了嗎?如果是,那可能綠界的機制有跟這結帳登入註冊機制有衝突,或是就單純綠界的有問題。如果換套綠界外掛還是有問題就是綠界,換套金流外掛沒問題就是原本RY的外掛跟你網站之間有問題。再試試看排除囉

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *


文章
Filter
Apply Filters
Mastodon