自定义重置密码表单重定向问题

时间:2018-11-13 作者:odedta

我想创建自己的重置密码表单和页面,我指的是此页面:enter image description here
我已经为重置密码表单创建了一个页面模板,代码为:

<?php
/*
 * Template Name: Page - Reset Password
 */
if( !is_user_logged_in() ) {
    wp_redirect( site_url( \'login\' ) );
}
get_header();
?>

<div id="content" class="content-area" role="main">
    <div class="forms-wrapper">
        <div class="form-reset-password-wrapper">
            <h1>Reset your password</h1>
            <form id="form-reset-password" name="resetpassform" class="form-reset-password" action="<?php echo site_url( \'/wp-login.php?action=resetpass\', \'https\' ); ?>" method="post" autocomplete="off">
                <input type="hidden" id="user_login" value="<?php echo $_GET[\'login\']; ?>" autocomplete="off">
                <p class="form-row">
                    <label for="user_pass">New password
                    <input type="password" name="user_pass" id="user_pass">
                </p>
                <p class="form-row">
                    <label for="user_pass_confirm">Confirm new password
                    <input type="password" name="user_pass_confirm" id="user_pass_confirm">
                </p>
                <p class="reset-password-submit">
                    <input type="submit" id="reset-password-btn" class="reset-password-btn" value="Submit"/>
                </p>
                <div class="form-reset-password-errors"></div>
            </form>
        </div>
    </div>
</div>

<?php get_footer(); ?>
这就是它的样子:
enter image description here

在表单提交中,我使用Ajax启动一个函数来验证这些密码,并在一切顺利的情况下对其进行更改,目前为止一切顺利。

How do people get to see this page? 基本上是使用电子邮件地址表单请求密码重置,如下所示:
enter image description here

收到电子邮件后,用户可以单击类似以下内容的链接:

https://example.com/wp-login.php?action=rp&key=tkFUnvcJmhu30nRxqjpt&login=example%gmail.com
现在,在PHP函数中,我使用此函数将用户重定向到我的自定义页面$_GET 变量,但它不起作用,我需要你的帮助!代码如下:

/*
 * Redirect to custom reset password page
 */
function override_reset_password_form_redirect() {
    $action = isset( $_GET[\'action\'] ) ? $_GET[\'action\'] : \'\';
    $key = isset( $_GET[\'key\'] ) ? $_GET[\'key\'] : \'\';
    $login = isset( $_GET[\'login\'] ) ? $_GET[\'login\'] : \'\';

    if ( \'wp-login.php\' === $GLOBALS[\'pagenow\'] && ( \'rp\' == $action  || \'resetpass\' == $action ) ) {
        wp_redirect( site_url( \'/reset-password/\' ) . \'?key=\' . $key . \'&login=\' . $login );
        exit;
    }
}
add_action( \'init\', \'override_reset_password_form_redirect\' );

1 个回复
最合适的回答,由SO网友:Liam Stewart 整理而成

您可以将以下内容添加到functions.php 实现你的目标。行动init 似乎没有及时为您寻找的内容开火。

if($_GET[\'action\']===\'rp\' && strpos($_SERVER[\'REQUEST_URI\'],\'wp-login.php\')) {
    $key = isset( $_GET[\'key\'] ) ? $_GET[\'key\'] : \'\';
    $login = isset( $_GET[\'login\'] ) ? $_GET[\'login\'] : \'\';
    wp_redirect( site_url( \'/reset-password/\' ) . \'?key=\' . $key . \'&login=\' . $login );
    exit;
}

结束

相关推荐

管理页面帖子ID wp_Reset_postdata不起作用

有2个插件,为WP中的一些额外woocommerce自定义选项提供电源。两个钩子都连接到加载的plugins\\u。从外观上看,第一个插件并没有重置为原始的post数据。一个插件是带有post metaboxes的下拉列表示例。该插件使用WP\\u Query查询数据库,以输出一个选择选项框。我在之后运行wp\\u reset\\u postdata()。第二个插件是一个不同的选择框,它没有使用正确的post id进行拉取,因此元数据永远不会正确保存,因为id不正确,也永远不会在加载时选择正确的选项。禁用