现在的位置: 首页 > WP 专题 > 正文

如何解决wordpress密码设置链接失效的问题

2020年05月04日 WP 专题 ⁄ 共 1803字 ⁄ 字号 暂无评论 ⁄ 阅读 239 次

对于开放注册的 wordpress 站点而言,当用户注册或者忘记密码需重获密码时,wordpress 都会自动向用户邮箱中发送一个验证链接,点击后就可以设置密码。但经常出现用户打开链接后,提示“您的密码重设链接无效”。此非 wordpress 本身的原因。正常的 wordpress 设置密码链接地址是没有超链接的,而是某些邮箱,主要是QQ邮箱收到邮件后,会将密码设置链接地址及其前后的“<>”一起当成链接地址生成超链接,结果造成链接错误。

网上有很多解决此问题的方法,但基本都是通过修改 wordpress 程序文件来解决的。这样一来,每次升级 wordpress 都需要重新修改程序文件,很是不便。下面分享一个简单的方法,让你一劳永逸的解决此问题。具体操作如下:

添加如下代码到 wordpress主题函数模板 functions.php 文件中,保存即可。

  1. // 修正忘记密码获取新密码链接
  2. add_filter('retrieve_password_message', 'zm_reset_password_message_amend', 99, 1);
  3. function zm_reset_password_message_amend($string) {
  4.     return preg_replace('/<(' . preg_quote(network_site_url(), '/') . '[^>]*)>/', '\1', $string);
  5. }
  6. // 修正用户注册设置密码链接
  7. add_filter( 'wp_new_user_notification_email' , 'zm_user_notification_email_amend', 10, 3 );
  8. function zm_user_notification_email_amend( $wp_new_user_notification_email$user$user_email ) {
  9.     global $wpdb$wp_hasher;
  10.     $key = wp_generate_password( 20, false );
  11.     do_action( 'retrieve_password_key', $user->user_login, $key );
  12.     if ( emptyempty$wp_hasher ) ) {
  13.         require_once ABSPATH . WPINC . '/class-phpass.php';
  14.         $wp_hasher = new PasswordHash( 8, true );
  15.     }
  16.     $hashed = time() . ':' . $wp_hasher->HashPassword( $key );
  17.     $wpdb->update( $wpdb->users, array( 'user_activation_key' => $hashed ), array( 'user_login' => $user->user_login ) );
  18.     $switched_locale = switch_to_locale( get_user_locale( $user ) );
  19.     $message = sprintf(__('Username: %s'), $user->display_name) . "\r\n\r\n";
  20.     $message .= __('To set your password, visit the following address:') . "\r\n\r\n";
  21.     $message .= '' . network_site_url("wp-login.php?action=rp&key=$key&login=" . rawurlencode($user->user_login), 'login') . "\r\n\r\n";
  22.     $wp_new_user_notification_email['message'] = $message;
  23.     return $wp_new_user_notification_email;
  24. }

如果你的wordpress主机不能发邮件请参考:免插件为wordpress配置SMTP服务

给我留言

留言无头像?


×