問題描述

我在模板中提供 front-end 登入,使用功能 wp_login_form 。它在登入和登出後處理重定向非常整齊!但是如果使用者名稱/密碼不匹配或不存在,則使用者將被重定向到管理員登入頁面,並出現抖動的 js 錯誤。同樣的情況,當我嘗試重置密碼,它需要我到我的後端頁面,我必須輸入我的電子郵件重置密碼。我想在我的模板上顯示這兩個活動。有辦法我可以做到嗎

感謝您提前提供任何幫助。

最佳解決方案

是的,這是可能的。您必須為此建立三個過濾器。

管理員內部的一個類

class WPSE29338_Admin {
    public static function setup() {
        add_filter('login_url', array(__CLASS__, 'modifyLoginURL'), 10, 2);
        add_filter('lostpassword_url', array(__CLASS__, 'modifyLostPasswordURL'), 10, 2);
        add_filter('register', array(__CLASS__, 'modifyRegisterURL'));
    }

    public static function modifyLoginURL($loginUrl, $redirect = '') {
        $loginUrl = site_url('login'); // Link to login URL

        if(!empty($redirect)) {
            $loginUrl = add_query_arg('redirect_to', urlencode($redirect), $loginUrl);
        }

        return $loginUrl;
    }

    public static function modifyLostPasswordURL($lostpwUrl, $redirect = '') {
        $lostpwUrl = wp_login_url() . '#lostpassword'; // Link to lostpassword URL

        if(!empty($redirect)) {
            $lostpwUrl = add_query_arg('redirect_to', urlencode($redirect), $lostpwUrl);
        }

        return $lostpwUrl;
    }

    public static function modifyRegisterURL($registerUrl) {
        if(!is_user_logged_in()) {
            if (get_option('users_can_register')) {
                $registerUrl = '<a href="'%20.%20wp_login_url()%20.%20'#register" class="btn">' . __('Register') . '</a>'; // Link to register URL
            } else {
                $registerUrl = '';
            }
        }

        return $registerUrl;
    }
}

首先,我們需要過濾 wp_login_form()使用的函式 wp_login_url()的輸出,形式為 action 屬性。

看看方法 modifyLoginUrl()。這裡我們將頁面 login 的 URL 儲存在變數 $loginUrl 中。這個頁面必須存在於 WordPress 中,所以先建立它。

接下來,我們需要一個功能 wp_lostpassword_url()wp_register()的過濾器。基本上是一樣的站點的 URL 儲存在變數 $lostpwUrl$registerUrl 中。

最後但並非最不重要的是,您必須在正確的動作鉤上呼叫該類。對於主題,這應該是 after_setup_theme,對於外掛,您可以使用 plugins_loaded

主題/functions.php

add_action('after_setup_theme', 'wpse29338_admin_init');
function wpse29338_admin_init() {
    WPSE29338_Admin::setup();
}

Plugins

add_action('plugins_loaded', 'wpse29338_admin_init');
function wpse29338_admin_init() {
    WPSE29338_Admin::setup();
}

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。