我正在使用wp_login_form函数在模板中提供前端登录。登录和注销后,它可以很好地处理重定向!但是,如果用户名/密码不匹配,或者不存在,用户将被重定向到管理员登录页面,并出现不稳定的js错误。当我尝试重设密码时,情况也是如此,它带我到后端页面,在该页面中我必须输入电子邮件以重设密码。我想在我的模板上显示这两个活动。有办法吗?
感谢您的任何帮助。
我正在使用wp_login_form函数在模板中提供前端登录。登录和注销后,它可以很好地处理重定向!但是,如果用户名/密码不匹配,或者不存在,用户将被重定向到管理员登录页面,并出现不稳定的js错误。当我尝试重设密码时,情况也是如此,它带我到后端页面,在该页面中我必须输入电子邮件以重设密码。我想在我的模板上显示这两个活动。有办法吗?
感谢您的任何帮助。
Answers:
是的,有可能。您必须为此创建三个过滤器。
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="' . wp_login_url() . '#register" class="btn">' . __('Register') . '</a>'; // Link to register URL
} else {
$registerUrl = '';
}
}
return $registerUrl;
}
}
首先,我们需要过滤forms 属性中wp_login_url()
使用的函数的输出。wp_login_form()
action
看一下方法modifyLoginUrl()
。在这里,我们将页面的URL存储login
在变量中$loginUrl
。此页面必须存在于WordPress中,因此请首先创建它。
接下来,我们需要为函数wp_lostpassword_url()
和过滤wp_register()
。基本上是一样的。网站的网址存储在变量$lostpwUrl
和中$registerUrl
。
最后但并非最不重要的一点是,您必须在正确的动作挂钩上调用该类。对于主题应该是这样after_setup_theme
,对于插件可以使用plugins_loaded
。
add_action('after_setup_theme', 'wpse29338_admin_init');
function wpse29338_admin_init() {
WPSE29338_Admin::setup();
}
add_action('plugins_loaded', 'wpse29338_admin_init');
function wpse29338_admin_init() {
WPSE29338_Admin::setup();
}
$loginUrl = site_url('login'); // Link to login URL
。只需更改“登录”以匹配您要使用的登录页面的标签即可。除非Rofflox犯了我没有看到的语法错误,否则看起来它会很好地工作。