!
也想出现在这里? 联系我们
广告位

WordPress主题实现前台用户重置密码功能

最近在开发 wordpress 主题过程中,用代码制作了前端用户中心,同时前端用户中心中还需要用户密码重置,我们可以通过短代码在主题的任何位置插入重置密码的表单:

第一步:

在 functions 当中插入如下代码:

  1. function pippin_change_password_form() {
  2. global $post;
  3. if (is_singular()) :
  4. $current_url = get_permalink($post->ID);
  5. else :
  6. $pageURL = 'http';
  7. if ($_SERVER["HTTPS"] == "on") $pageURL .= "s";
  8. $pageURL .= "://";
  9. if ($_SERVER["SERVER_PORT"] != "80") $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
  10. else $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
  11. $current_url = $pageURL;
  12. endif;
  13. $redirect = $current_url;
  14. ob_start();
  15. // show any error messages after form submission
  16. pippin_show_error_messages(); ?>
  17. <?php if(isset($_GET['password-reset']) && $_GET['password-reset'] == 'true') { ?>
  18. <div class="pippin_message success">
  19. <span><?php _e('Password changed successfully', 'rcp'); ?></span>
  20. </div>
  21. <?php } ?>
  22. <form id="pippin_password_form" method="POST" action="<?php echo $current_url; ?>">
  23. <fieldset>
  24. <p>
  25. <label for="pippin_user_pass"><?php _e('New Password', 'rcp'); ?></label>
  26. <input name="pippin_user_pass" id="pippin_user_pass" class="required" type="password"/>
  27. </p>
  28. <p>
  29. <label for="pippin_user_pass_confirm"><?php _e('Password Confirm', 'rcp'); ?></label>
  30. <input name="pippin_user_pass_confirm" id="pippin_user_pass_confirm" class="required" type="password"/>
  31. </p>
  32. <p>
  33. <input type="hidden" name="pippin_action" value="reset-password"/>
  34. <input type="hidden" name="pippin_redirect" value="<?php echo $redirect; ?>"/>
  35. <input type="hidden" name="pippin_password_nonce" value="<?php echo wp_create_nonce('rcp-password-nonce'); ?>"/>
  36. <input id="pippin_password_submit" type="submit" value="<?php _e('Change Password', 'pippin'); ?>"/>
  37. </p>
  38. </fieldset>
  39. </form>
  40. <?php
  41. return ob_get_clean();
  42. }
  43. // password reset form
  44. function pippin_reset_password_form() {
  45. if(is_user_logged_in()) {
  46. return pippin_change_password_form();
  47. }
  48. }
  49. add_shortcode('password_form', 'pippin_reset_password_form');
  50. function pippin_reset_password() {
  51. // reset a users password
  52. if(isset($_POST['pippin_action']) && $_POST['pippin_action'] == 'reset-password') {
  53. global $user_ID;
  54. if(!is_user_logged_in())
  55. return;
  56. if(wp_verify_nonce($_POST['pippin_password_nonce'], 'rcp-password-nonce')) {
  57. if($_POST['pippin_user_pass'] == '' || $_POST['pippin_user_pass_confirm'] == '') {
  58. // password(s) field empty
  59. pippin_errors()->add('password_empty', __('Please enter a password, and confirm it', 'pippin'));
  60. }
  61. if($_POST['pippin_user_pass'] != $_POST['pippin_user_pass_confirm']) {
  62. // passwords do not match
  63. pippin_errors()->add('password_mismatch', __('Passwords do not match', 'pippin'));
  64. }
  65. // retrieve all error messages, if any
  66. $errors = pippin_errors()->get_error_messages();
  67. if(empty($errors)) {
  68. // change the password here
  69. $user_data = array(
  70. 'ID' => $user_ID,
  71. 'user_pass' => $_POST['pippin_user_pass']
  72. );
  73. wp_update_user($user_data);
  74. // send password change email here (if WP doesn't)
  75. wp_redirect(add_query_arg('password-reset', 'true', $_POST['pippin_redirect']));
  76. exit;
  77. }
  78. }
  79. }
  80. }
  81. add_action('init', 'pippin_reset_password');
  82. if(!function_exists('pippin_show_error_messages')) {
  83. // displays error messages from form submissions
  84. function pippin_show_error_messages() {
  85. if($codes = pippin_errors()->get_error_codes()) {
  86. echo '<div class="pippin_message error">';
  87. // Loop error codes and display errors
  88. foreach($codes as $code){
  89. $message = pippin_errors()->get_error_message($code);
  90. echo '<span class="pippin_error"><strong>' . __('Error', 'rcp') . '</strong>: ' . $message . '</span><br/>';
  91. }
  92. echo '</div>';
  93. }
  94. }
  95. }
  96. if(!function_exists('pippin_errors')) {
  97. // used for tracking error messages
  98. function pippin_errors(){
  99. static $wp_error; // Will hold global variable safely
  100. return isset($wp_error) ? $wp_error : ($wp_error = new WP_Error(null, null, null));
  101. }
  102. }

第二步:

在你需要的地方插入:

  1. [password_form]

给TA打赏
共{{data.count}}人
人已打赏
WordPress教程

WordPress文章列表内容图片数量展示

2024-6-14 14:21:22

WordPress教程

移除WordPress后台隐私相关页面

2024-6-18 14:09:06

下载说明

  • 1、微码盒所提供的压缩包若无特别说明,解压密码均为weimahe.com
  • 2、下载后文件若为压缩包格式,请安装7Z软件或者其它压缩软件进行解压;
  • 3、文件比较大的时候,建议使用下载工具进行下载,浏览器下载有时候会自动中断,导致下载错误;
  • 4、资源可能会由于内容问题被和谐,导致下载链接不可用,遇到此问题,请到文章页面进行反馈,以便微码盒及时进行更新;
  • 5、其他下载问题请自行搜索教程,这里不一一讲解。

站长声明

本站大部分下载资源收集于网络,只做学习和交流使用,版权归原作者所有;若为付费资源,请在下载后24小时之内自觉删除;若作商业用途,请到原网站购买;由于未及时购买和付费发生的侵权行为,与本站无关。本站发布的内容若侵犯到您的权益,请联系本站删除,我们将及时处理!
0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索