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

本篇文章更新時間:2020/10/08
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知。
一介資男的 LINE 社群開站囉!歡迎入群聊聊~


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 '<script>window.location.href = "' . $redirect . '";</script>';
            }

        }
    }
}
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% 的年輕人。[//////////____30%_________]

發佈留言

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