我想使用WP本机登录/注册/还原密码/。。功能,但显示漂亮的URL,而不是wp登录。php
我一直在查看核心代码,注意到大多数与登录相关的表单都有硬编码的操作URL。例如,还原密码表单具有以下操作URL
<form name="resetpassform" id="resetpassform" action="<?php echo esc_url( site_url( \'wp-login.php?action=resetpass&key=\' . urlencode( $_GET[\'key\'] ) . \'&login=\' . urlencode( $_GET[\'login\'] ), \'login_post\' ) ); ?>" method="post">
因此,当我单击“重置密码”按钮时,信息将提交给wp登录。包含指定操作、键和登录查询变量的php文件。
如果信息未通过验证,则会重新显示表单,浏览器中的URL是表单操作中指定的URL,因此在本例中是http://example.com/wp-login.php?action=resetpass&key=xyz&login=zyx
.
我希望是这样http://example.com/password-restore?action=resetpass&key=xyz&login=zyx
为了实现这一点,我尝试了以下解决方案。然而,我最终进入了重定向循环。
Step 1. 初始还原密码URL为http://example.com/wp-login.php?action=rp&key=xyz&login=zyx
. 为了使其美观,我添加了一个重写规则:
add_action( \'init\', \'pretty_login_urls\' );
function pretty_login_urls() {
add_rewrite_rule( \'password-restore?([^/]+)/?$\', "wp-login.php?$1", \'top\' );
}
因此,恢复表单的初始URL正在工作。
Step 2. 但是,当我提交一个不匹配的密码时,表单会重新显示,URL现在是http://example.com/wp-login.php?action=resetpass&key=xyz&login=zyx
. 请注意,该操作已更改。
这就是我要说的stack。我想把那个URL显示得很漂亮。我尝试了以下解决方案,试图重定向wp-login.php
到一个漂亮的URL:
add_action( \'login_init\', \'pretty_login_urls_form_action_fix\' );
function pretty_login_urls_form_action_fix(){
$action = isset( $_REQUEST[\'action\'] ) ? $_REQUEST[\'action\'] : \'\';
if( in_array( $action, array(\'rp\', \'resetpass\') ) ){
$url = home_url( \'/password-restore?action=\'. $action .\'&key=\' . urlencode( $_GET[\'key\'] ) . \'&login=\' . urlencode( $_GET[\'login\'] ), \'login_post\' );
wp_redirect( $url );
exit;
}
}
然而,这样我就进入了重定向循环。
当通过表单的动作URL访问页面时,是否有一种方法可以使URL在浏览器地址栏中显示得漂亮。
如果有任何提示,我将不胜感激。
非常感谢,Dasha