问题描述
我在模板中提供 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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。