零基础学做网站培训介绍

当前位置:

怎么制作wordpress用户找回密码页面

wordpress默认用户找回密码页面比较简单,只填写用户的邮箱地址,程序会自动发送密码修改邮件。

我们在建网站时,可以自己制作wordpress用户找回密码页面,方法如下:

1、创建一个php文件,命名为page-passreset.php,添加以下代码:


<?php
/*
Template Name:找回密码
*/

global $wpdb, $user_ID;
function tg_validate_url() {  
    global $post;  
    $page_url = esc_url(get_permalink( $post->ID ));
    $urlget = strpos($page_url, "?");  
    if ($urlget === false) {  
        $concate = "?";  
    }else{  
        $concate = "&";  
    }  
    return $page_url.$concate;
}
if(!$user_ID){
    if($_POST['action'] == "tg_pwd_reset"){ //判断是否为请求重置密码  
    if ( !wp_verify_nonce( $_POST['tg_pwd_nonce'], "tg_pwd_nonce")) { //检查随机数  
        exit("不要开玩笑");  
    }  
    if(empty($_POST['user_input'])) {  
        echo "<div class='error'>请输入用户名或E-mail地址</div>";  
        exit();  
    }
    //过滤提交的数据  
    $user_input = $wpdb->escape(trim($_POST['user_input']));
    if ( strpos($user_input, '@') ) { //判断用户提交的是邮件还是用户名  
        $user_data = get_user_by_email($user_input); //通过Email获取用户数据  
        if(empty($user_data) || $user_data->caps[administrator] == 1) { //排除管理员  
            echo "<div class='error'>无效的E-mail地址!</div>";  
            exit();  
        }  
    } else {  
        $user_data = get_userdatabylogin($user_input); //通过用户名获取用户数据  
        if(empty($user_data) || $user_data->caps[administrator] == 1) { //排除管理员  
            echo "<div class='error'>无效的用户名!</div>";  
            exit();  
        }  
    }
    $user_login = $user_data->user_login;  
    $user_email = $user_data->user_email;
    $key = $wpdb->get_var($wpdb->prepare("SELECT user_activation_key FROM $wpdb->users WHERE user_login = %s", $user_login)); //从数据库中获取密匙  
    if(empty($key)) { //如果为空  
        //generate reset keys生成 keys  
        $key = wp_generate_password(20, false); //生成一个20位随机密码用做密匙  
        $wpdb->update($wpdb->users, array('user_activation_key' => $key), array('user_login' => $user_login)); //更新到数据库  
    }
    //邮件内容  
    $message = __('有人提交了重置下面账户密码的请求:') . "\r\n\r\n";  
    $message .= get_option('siteurl') . "\r\n\r\n";  
    $message .= sprintf(__('用户名: %s'), $user_login) . "\r\n\r\n";  
    $message .= __('如果不是您本人操作,请忽略这个邮件即可.') . "\r\n\r\n";  
    $message .= __('如果需要重置密码,请访问下面的链接:') . "\r\n\r\n";  
    $message .= tg_validate_url() . "action=reset_pwd&key=$key&login=" . rawurlencode($user_login) . "\r\n"; //注意tg_validate_url(),注意密码重置的链接地址,需要action\key\login三个参数
    if ( $message && !wp_mail($user_email, '密码重置请求', $message) ) {  
        echo "<div class='error'>邮件发送失败-原因未知。</div>";  
        exit();  
    } else {  
        echo "<div class='success'>我们已经在给你发送的邮件中说明了重置密码的各项事宜,请注意查收。</div>";  
        exit();  
    }  
} else {  
    get_header();
?>
<div id="container">
    <div class="accountPage">
    <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
        <h3><?php the_title();?><a href="<?php echo get_page_link($register); ?>">注册会员</a></h3>
        <form class="user_form" id="wp_pass_reset" action="" method="post">  
        <label>输入注册的电子邮箱:</label>
        <input type="text" class="text" name="user_input" value="" /><br />  
        <input type="hidden" name="action" value="tg_pwd_reset" />  
        <input type="hidden" name="tg_pwd_nonce" value="<?php echo wp_create_nonce("tg_pwd_nonce"); ?>" />  
        <!--wp_create_nonce函数创建随机数,用于安全验证-->  
        <input type="submit" id="submitbtn" class="submit" name="submit" value="找回密码" />  
        </form>  
        <div id="result"></div> <!-- To hold validation results -->  
        <script type="text/javascript">  
        $("#wp_pass_reset").submit(function() {    
            $('#result').html('<span class="loading">Validating...</span>').fadeIn();  
            var input_data = $('#wp_pass_reset').serialize();  
            $.ajax({  
                type: "POST",  
                url:  "<?php echo get_permalink( $post->ID ); ?>",  
                data: input_data,  
                success: function(msg){  
                    $('.loading').remove();  
                    $('<div>').html(msg).appendTo('div#result').hide().fadeIn('slow');  
                }  
            });  
            return false;  
        });  
        </script>  
    <?php endwhile; else : ?>  
    <h2><?php _e('没有找到'); ?></h1>          
    <?php endif; ?>  
    <?php
    if(isset($_GET['key']) && $_GET['action'] == "reset_pwd") { //如果存在key且action参数似乎reset_pwd  
        $reset_key = $_GET['key']; //获取密匙  
        $user_login = $_GET['login']; //获取用户名  
        $user_data = $wpdb->get_row($wpdb->prepare("SELECT ID, user_login, user_email FROM $wpdb->users WHERE user_activation_key = %s AND user_login = %s", $reset_key, $user_login));  
        //通过key和用户名验证数据  
 
        $user_login = $user_data->user_login;  
        $user_email = $user_data->user_email;  
        if(!empty($reset_key) && !empty($user_data)) {  
            $new_password = wp_generate_password(7, false); //生成7位随机密码  
            //echo $new_password; exit();  
            wp_set_password( $new_password, $user_data->ID ); //重置密码  
            //通过邮件将密码发送给用户  
            $message = __('账户的新密码为:') . "\r\n\r\n";  
            $message .= get_option('siteurl') . "\r\n\r\n";  
            $message .= sprintf(__('用户名: %s'), $user_login) . "\r\n\r\n";  
            $message .= sprintf(__('密码: %s'), $new_password) . "\r\n\r\n";  
            $message .= __('你可以使用你的新密码通过下面的链接登录: ') . get_option('siteurl')."/login" . "\r\n\r\n";  
            if ( $message && !wp_mail($user_email, '密码重置请求', $message) ) {  
                echo "<div class='error'>邮件发送失败-原因未知</div>";  
                exit();  
            } else {  
                $redirect_to = tg_validate_url()."action=reset_success";//跳转到登陆成功页面(还是本页面地址)  
                wp_safe_redirect($redirect_to);  
                exit();  
            }  
 
        } else{  
            exit('无效的key.');  
        }  
    }  
 
if(isset($_GET['action']) && $_GET['action'] == "reset_success") { //如果动作为reset_success就是成功了哇  
   echo '<div class="success">密码重置成功,已经通过邮件发送给您,请查收。</div>';
}  
?> 
    </div>
</div>
<?php
    }
    }else{  
        wp_redirect(home_url());
        exit;
    }  
get_footer();
?>

2、在后台——页面中创建新页面,页面属性的“模板”中选择“找回密码”:

然后发布页面即可。注意:发送密码重置邮件需要网站服务器开启mail函数!

发表评论

邮箱地址不会被公开。 必填项已用*标注

相关教程

  • 零基础新手要学习网站建设,以下的网站建设教程是零基础新手必须学习的网站制作教程。只有将以下的基础知识学会了,才能为以后建网站打下坚实的基础。
  • 这是一家上海电气公司网站,网站制作时采用传统企业网站制作方法与布局结构。网站顶部使用大尺寸的LOGO,网站导航制作使用全屏宽度菜单,每个菜单项宽
  • 广州全璟皮革制品有限公司网站,本公司是一家细致印花厂家,集数码印花、服装印花、数码直喷、印花加工等设计、生产、销售。全璟数码印花公司网站由
  • 漂亮的wordpress淘客模板 图文教程 (17942 次浏览)
    今天再次给大家分享一款自己仿的一个wordpress淘客模板。这个模板是我自己在别人模板的基础上进行二次开发,自己比较喜欢。注意:此模板不支持IE6,
  • 用什么建网站?Wordpress建网站好不好?这些问题经常被新手问上问起。可以这样说,wordpress程序可以建各种类型的网站,它的功能强大之处令人称赞,
  • Wordpress 如何开启伪静态 视频教程 (1114451 次浏览)
    做网站制作好之后,如果网站做SEO优化时,需要进行伪静态的设置,同样也可以通过网站设置选置进行设置。Wordpress伪静态设置方法 登陆到wordpre
  • 有时为了网站的帐户的安全,我们会不定期的修改网站用户名的密码,在wordpress网站后台,有一个很方便提供给我们修改网站密码的选项,通过这个选项,
  • 多站点 (Multisite) 功能是 WordPress 3.0  版本的一个重要更新,整合了 WordPress MU 内核。后台自动升级内核后,无法直接使用该功能。需要通过手工
  • 很多论坛像学做网站论坛一样,将网站论坛为成二个部分,一个部分为任意用户都可以浏览,另一部分则是设置了用户权限.用户没有这个权限时,会提示"本版块只
  • 今天有几个学做网站论坛学员遇到了一个问题,就是网站后台密码忘记了,这里给大家几种方法来找回密码,下面也把wordpress找回密码的3种方法分享一下。
  • 我们在网站制作时,经常会遇到忘记管理员密码的事情。对于使用ECSHOP做商城网站时,同样也会出现这种情况。如果我们在制作ECSHOP商城网站时,忘记管理
  • 学习了discuz视频教程之后,很多建网站学员使用DISCUZ建立了论坛网站。DISCUZ论坛有一个“找回密码”功能,用户忘记密码时,可以使用“找回密码”找回自己
  • 忘记后台登录密码是自己建网站学员经常犯的错误,如果在使用wordpress程序建网站时,忘记了后台管理员登陆密码要如何解决?方法/步骤 以西
  • 针对于网站中的一些特殊页面,WordPress提供专题页面功能。通过新建WordPress 专题页面,可以让我们在做网站中,制作一些特殊的网页版面。例如,
  • 在课程我们讲到,我们在建站时,可以建立页面和分类目录,然后在网站导航上调用页面与分类目录。更换页面的顺序,我们可以在后台修改每个页面的排
  • 在学做网站论坛的论坛制作课程中,我们讲到如何使用Discuz程序进行论坛网站建设,论坛网站可以任意去发贴。作为管理员的我们可能会发现一些别人发了一