建站学院

当前位置:

构建自定义的WordPress用户流程,第三部分:密码重置

浏览量:1728次

在本系列的前两个教程中,我们构建了用于登录和注册新用户的自定义页面。现在,登录流程中只剩下一个部分需要探索和替换:如果用户忘记密码并想要重置 wordpress 密码,会发生什么?

在本教程中,我们将解决最后一步并完成我们在整个系列中构建的个性化登录插件。

WordPress 中的密码重置功能或多或少遵循当今网站上的标准方法:

  1. 用户通过输入用户名或电子邮件地址并请求 WordPress 重置密码来启动重置。
  2. 创建临时密码重置令牌并将其存储在用户数据中。包含此令牌的链接将发送到用户的电子邮件地址。
  3. 用户点击链接。
  4. 在重置密码页面上,令牌会经过验证,如果它与用户的数据匹配,他们就可以选择一个新密码。

就像登录和新用户注册一样,此功能是通过 wp-login.php 处理的。因此,我们如何自定义此流程的总体思路现在大部分都是以前的教程所熟悉的。

如果您尚未阅读前两个教程,最好从第 1 部分开始并按顺序浏览该系列。您可以按照教程自行编写代码,也可以从链接的 GitHub 存储库下载完整的源代码。

现在,让我们开始替换流程中的第一个屏幕。

启动 WordPress 重置密码

当用户到达您的登录页面但不记得他们在该网站上使用的密码时,就会开始重置 WP 密码。

为此,我们在本系列第一部分的登录表单底部放置了一个忘记密码?消息模板链接。默认情况下,在 WordPress 支持的网站上,此链接指向 wp-login.php?action=lostpassword,页面如下所示:

构建自定义的WordPress用户流程,第三部分:密码重置

要将此页面替换为自定义页面,我们将创建一个函数来将用户重定向到我们的自定义页面,并将该函数挂钩到 WordPress 操作。

在这种情况下,我们有两个选项可供选择:我们可以使用操作 lost_password,该操作在页面渲染之前调用,或者我们在之前的教程中使用的操作: login_form_{action},这次是login_form_lostpassword。

我们可以采取两种方法,但为了限制执行的不必要代码的数量,让我们选择后一个选项。

但首先,让我们创建新的 WordPress 自定义密码重置页面:

第 1 步:创建重置密码页面 p>

正如您所记得的,在第 1 部分中,我们使用 plugin_activated 回调函数创建了一个在插件激活时创建 WordPress 页面的函数。

在此函数中,将新页面的定义添加到 $page_definitions 数组的末尾。在 WordPress 密码重置流程中,我们还需要第二个页面来选择新密码。因此,为了节省时间,我们现在还添加第二页。

为了清楚起见,这是整个数组(添加了最后两个页面定义):

// Information needed for creating the plugin's pages
$page_definitions = array(
    'member-login' => array(
        'title' => __( 'Sign In', 'personalize-login' ),
        'content' => '[custom-login-form]'
    ),
    'member-account' => array(
        'title' => __( 'Your Account', 'personalize-login' ),
        'content' => '[account-info]'
    ),
    'member-register' => array(
        'title' => __( 'Register', 'personalize-login' ),
        'content' => '[custom-register-form]'
    ),
    'member-password-lost' => array(
        'title' => __( 'Forgot Your Password?', 'personalize-login' ),
        'content' => '[custom-password-lost-form]'
    ),
    'member-password-reset' => array(
        'title' => __( 'Pick a New Password', 'personalize-login' ),
        'content' => '[custom-password-reset-form]'
    )
);
登录后复制

[声明]本网转载网络媒体稿件是为了传播更多的信息,此类稿件不代表本网观点,本网不承担此类稿件侵权行为的连带责任。故此,如果您发现本网站的内容侵犯了您的版权,请您的相关内容发至此邮箱【915688610@qq.com】,我们在确认后,会立即删除,保证您的版权。