在我正在开发的网站上,我需要所有与登录相关的表单都位于定制的品牌页面上。我几乎涵盖了所有这些,但我只有一个案例无法正确处理。
我已经为丢失的密码设置了自定义页面页面,方法是添加下面的过滤器,然后使用自定义模板创建一个新页面,该模板呈现插入电子邮件以获取链接表单。
function custom_lost_password_page( $lostpassword_url, $redirect ) {
return home_url( \'/lost-password/\' );
}
add_filter( \'lostpassword_url\', \'custom_lost_password_page\', 10, 2 );
在页面模板上,我设置了一个自定义
redirect_to
输入字段,以便成功的请求重定向到带有特定消息的自定义登录页面。
<input type="hidden" name="redirect_to" value="<?= site_url(\'/login?resetlink=sent\') ?>">
到目前为止还不错。我似乎无法截获的是,当用户输入一封不存在的电子邮件时。在这种情况下,无论如何,我都会被重定向到
/wp-login.php?action=lostpassword
, 这是一个我们不想要的本地WP页面,带有相应的错误消息。
在这种特殊情况下,我似乎找不到可以锁定的操作或过滤器。不幸的是,谷歌没有提供帮助,这里的所有类似问题似乎都无法处理这个非常具体的案例。
有什么想法吗?提前谢谢,祝你今天愉快!
最合适的回答,由SO网友:djboris 整理而成
尝试以下操作:
add_action( \'lost_password\', \'wpse316932_redirect_wrong_email\' );
function wpse316932_redirect_wrong_email() {
global $errors;
if ( $error = $errors->get_error_code() ) {
wp_safe_redirect( \'lost-password/?error=\' . $error );
} else {
wp_safe_redirect( \'lost-password/\' );
}
}
这是利用
lost_password
action hook 在丢失密码表单之前触发。
您遇到这种情况是因为WP只会将您重定向到中指定的urlredirect_to
无错误时输入字段。如果它在处理表单时发现错误(这里的情况很明显),它只会继续在wp-login.php
页通过使用此操作,您可以在此之前挂接到此过程。
SO网友:GigiSan
我暂时找到了一种解决方法,但它并不准确,所以I\'m still open to ideas. :)
我卸下了过滤器
function custom_lost_password_page( $lostpassword_url, $redirect ) {
return home_url( \'/lost-password/\' );
}
add_filter( \'lostpassword_url\', \'custom_lost_password_page\', 10, 2 );
并在上添加了操作
lost_password
相反
function custom_lost_password_page() {
// If the referrer is lost-password then it\'s a failed attempt,
// show the form again with an error
if (strstr($_SERVER[\'HTTP_REFERER\'], \'lost-password\')) {
wp_redirect(home_url(\'/lost-password?error=invalidemail\'));
}
else {
wp_redirect(home_url(\'/lost-password/\'));
}
}
add_action( \'lost_password\', \'custom_lost_password_page\', 10, 0 );
如您所见,它会截获来自自身的所有调用,将任何可能的错误屏蔽为
invalidemail
错误它符合目的,但不是很干净。