問題描述
我在模板中提供 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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。