wordpress进阶教程(十八):创建自定义的登陆页面


文章参考自:http://www.tutorialstag.com/custom-wordpress-login-without-using-a-plugin.html

像上一篇教程,很多人不喜欢wordpress默认的注册页面,登陆页面也一样,这篇教程我们将创建一个自定义的登陆页面,你可以通过一个自定义页面模板来实现,也可以通过前面教程中提到的url重写来实现。

wordpress自定义登陆页面效果

第一步:创建文件

首先(还是以twenty ten主题为例):在twenty ten主题文件夹里面新建一个php文件,文件名随意,比如:page-login.php。

第二步:给页面模板命名
在page-login.php页面开头添加代码:

  1. <?php   
  2. /*
  3. Template Name: 自定义登陆页面  
  4. */  
  5. ?>  
  6. <?php   
  7. global $wpdb,$user_ID;   
  8.   
  9. if (!$user_ID) { //判断用户是否登录   
  10.     //接下来的代码都添加在这里   
  11.   
  12. }else { //跳转到首页   
  13.     echo "<script type='text/javascript'>window.location='". get_bloginfo('url') ."'</script>";   
  14. }   
  15. ?>  
  16. get_header();//载入头部文件   
  17. ?>   
  18. <!--<script src="http://code.jquery.com/jquery-1.4.4.js"></script>--><!--如果你发现没有ajax提交,请检查是否有引入jquery.js文件-->   
  19. <div id="container">   
  20. <div id="content">   
  21. <h3>阿树工作室-登陆页面</h3>   
  22. <div id="result"></div> <!-- 输出结果 -->   
  23. <form id="wp_login_form" action="" method="post">   
  24. <label>用户名</label><br />   
  25. <input type="text" name="username" class="text" value="" /><br />   
  26. <label>密码</label><br />   
  27. <input type="password" name="password" class="text" value="" /> <br />   
  28. <label>   
  29. <input name="rememberme" type="checkbox" value="forever" />记住我</label>   
  30. <br /><br />   
  31. <input type="submit" id="submitbtn" name="submit" value="Login" />   
  32. </form>   
  33.   
  34. <script type="text/javascript"><!--ajax 提交数据-->                        
  35. $("#submitbtn").click(function() {   
  36. <!--请准备一个gif图-->   
  37. $('#result').html('<img src="<?php bloginfo('template_url'); ?>/images/loader.gif" class="loader" />').fadeIn();   
  38. var input_data = $('#wp_login_form').serialize();   
  39. $.ajax({   
  40. type: "POST",   
  41. url:  "<?php echo "http://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; ?>",   
  42. data: input_data,   
  43. success: function(msg){   
  44. $('.loader').remove();   
  45. $('<div>').html(msg).appendTo('div#result').hide().fadeIn('slow');   
  46. }   
  47. });   
  48. return false;   
  49.   
  50. });   
  51. </script>   
  52.   
  53. </div>   
  54. </div>   
  55. <?php   
  56. get_footer(); //载入底部文件  
  57. if($_POST){ //数据提交   
  58.     //We shall SQL escape all inputs   
  59.     $username = $wpdb->escape($_REQUEST['username']);   
  60.     $password = $wpdb->escape($_REQUEST['password']);   
  61.     $remember = $wpdb->escape($_REQUEST['rememberme']);   
  62.        
  63.     if($remember){   
  64.         $remember = "true";   
  65.     } else {   
  66.         $remember = "false";   
  67.     }   
  68.     $login_data = array();   
  69.     $login_data['user_login'] = $username;   
  70.     $login_data['user_password'] = $password;   
  71.     $login_data['remember'] = $remember;   
  72.     $user_verify = wp_signon( $login_data, false );    
  73.     //wp_signon 是wordpress自带的函数,通过用户信息来授权用户(登陆),可记住用户名   
  74.            
  75.     if ( is_wp_error($user_verify) ) {    
  76.         echo "<span class='error'>用户名或密码错误,请重试!</span>";//不管啥错误都输出这个信息   
  77.         exit();   
  78.     } else { //登陆成功则跳转到首页(ajax提交所以需要用js来跳转)   
  79.         echo "<script type='text/javascript'>window.location='". get_bloginfo('url') ."'</script>";   
  80.         exit();   
  81.     }   
  82. } else {   
  83.   
  84.     //第四步中的代码应该都包含在这里   
  85.        
  86. }  

这样你在后台添加页面的时候选择页面模板就可以看到这个页面模板了。

第三步:判断用户是否已经登陆

我们首先要做的当然还是判断用户是否已经登陆。接着添加以下代码:

  1. <?php   
  2. /*
  3. Template Name: 自定义登陆页面  
  4. */  
  5. ?>  
  6. <?php   
  7. global $wpdb,$user_ID;   
  8.   
  9. if (!$user_ID) { //判断用户是否登录   
  10.     //接下来的代码都添加在这里   
  11.   
  12. }else { //跳转到首页   
  13.     echo "<script type='text/javascript'>window.location='". get_bloginfo('url') ."'</script>";   
  14. }   
  15. ?>  
  16. get_header();//载入头部文件   
  17. ?>   
  18. <!--<script src="http://code.jquery.com/jquery-1.4.4.js"></script>--><!--如果你发现没有ajax提交,请检查是否有引入jquery.js文件-->   
  19. <div id="container">   
  20. <div id="content">   
  21. <h3>阿树工作室-登陆页面</h3>   
  22. <div id="result"></div> <!-- 输出结果 -->   
  23. <form id="wp_login_form" action="" method="post">   
  24. <label>用户名</label><br />   
  25. <input type="text" name="username" class="text" value="" /><br />   
  26. <label>密码</label><br />   
  27. <input type="password" name="password" class="text" value="" /> <br />   
  28. <label>   
  29. <input name="rememberme" type="checkbox" value="forever" />记住我</label>   
  30. <br /><br />   
  31. <input type="submit" id="submitbtn" name="submit" value="Login" />   
  32. </form>   
  33.   
  34. <script type="text/javascript"><!--ajax 提交数据-->                        
  35. $("#submitbtn").click(function() {   
  36. <!--请准备一个gif图-->   
  37. $('#result').html('<img src="<?php bloginfo('template_url'); ?>/images/loader.gif" class="loader" />').fadeIn();   
  38. var input_data = $('#wp_login_form').serialize();   
  39. $.ajax({   
  40. type: "POST",   
  41. url:  "<?php echo "http://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; ?>",   
  42. data: input_data,   
  43. success: function(msg){   
  44. $('.loader').remove();   
  45. $('<div>').html(msg).appendTo('div#result').hide().fadeIn('slow');   
  46. }   
  47. });   
  48. return false;   
  49.   
  50. });   
  51. </script>   
  52.   
  53. </div>   
  54. </div>   
  55. <?php   
  56. get_footer(); //载入底部文件  
  57. if($_POST){ //数据提交   
  58.     //We shall SQL escape all inputs   
  59.     $username = $wpdb->escape($_REQUEST['username']);   
  60.     $password = $wpdb->escape($_REQUEST['password']);   
  61.     $remember = $wpdb->escape($_REQUEST['rememberme']);   
  62.        
  63.     if($remember){   
  64.         $remember = "true";   
  65.     } else {   
  66.         $remember = "false";   
  67.     }   
  68.     $login_data = array();   
  69.     $login_data['user_login'] = $username;   
  70.     $login_data['user_password'] = $password;   
  71.     $login_data['remember'] = $remember;   
  72.     $user_verify = wp_signon( $login_data, false );    
  73.     //wp_signon 是wordpress自带的函数,通过用户信息来授权用户(登陆),可记住用户名   
  74.            
  75.     if ( is_wp_error($user_verify) ) {    
  76.         echo "<span class='error'>用户名或密码错误,请重试!</span>";//不管啥错误都输出这个信息   
  77.         exit();   
  78.     } else { //登陆成功则跳转到首页(ajax提交所以需要用js来跳转)   
  79.         echo "<script type='text/javascript'>window.location='". get_bloginfo('url') ."'</script>";   
  80.         exit();   
  81.     }   
  82. } else {   
  83.   
  84.     //第四步中的代码应该都包含在这里   
  85.        
  86. }  

第四步:添加登陆表单和ajax提交代码

在上一步留下的位置添加以下代码

  1. <?php   
  2. /*
  3. Template Name: 自定义登陆页面  
  4. */  
  5. ?>  
  6. <?php   
  7. global $wpdb,$user_ID;   
  8.   
  9. if (!$user_ID) { //判断用户是否登录   
  10.     //接下来的代码都添加在这里   
  11.   
  12. }else { //跳转到首页   
  13.     echo "<script type='text/javascript'>window.location='". get_bloginfo('url') ."'</script>";   
  14. }   
  15. ?>  
  16. get_header();//载入头部文件   
  17. ?>   
  18. <!--<script src="http://code.jquery.com/jquery-1.4.4.js"></script>--><!--如果你发现没有ajax提交,请检查是否有引入jquery.js文件-->   
  19. <div id="container">   
  20. <div id="content">   
  21. <h3>阿树工作室-登陆页面</h3>   
  22. <div id="result"></div> <!-- 输出结果 -->   
  23. <form id="wp_login_form" action="" method="post">   
  24. <label>用户名</label><br />   
  25. <input type="text" name="username" class="text" value="" /><br />   
  26. <label>密码</label><br />   
  27. <input type="password" name="password" class="text" value="" /> <br />   
  28. <label>   
  29. <input name="rememberme" type="checkbox" value="forever" />记住我</label>   
  30. <br /><br />   
  31. <input type="submit" id="submitbtn" name="submit" value="Login" />   
  32. </form>   
  33.   
  34. <script type="text/javascript"><!--ajax 提交数据-->                        
  35. $("#submitbtn").click(function() {   
  36. <!--请准备一个gif图-->   
  37. $('#result').html('<img src="<?php bloginfo('template_url'); ?>/images/loader.gif" class="loader" />').fadeIn();   
  38. var input_data = $('#wp_login_form').serialize();   
  39. $.ajax({   
  40. type: "POST",   
  41. url:  "<?php echo "http://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; ?>",   
  42. data: input_data,   
  43. success: function(msg){   
  44. $('.loader').remove();   
  45. $('<div>').html(msg).appendTo('div#result').hide().fadeIn('slow');   
  46. }   
  47. });   
  48. return false;   
  49.   
  50. });   
  51. </script>   
  52.   
  53. </div>   
  54. </div>   
  55. <?php   
  56. get_footer(); //载入底部文件  
  57. if($_POST){ //数据提交   
  58.     //We shall SQL escape all inputs   
  59.     $username = $wpdb->escape($_REQUEST['username']);   
  60.     $password = $wpdb->escape($_REQUEST['password']);   
  61.     $remember = $wpdb->escape($_REQUEST['rememberme']);   
  62.        
  63.     if($remember){   
  64.         $remember = "true";   
  65.     } else {   
  66.         $remember = "false";   
  67.     }   
  68.     $login_data = array();   
  69.     $login_data['user_login'] = $username;   
  70.     $login_data['user_password'] = $password;   
  71.     $login_data['remember'] = $remember;   
  72.     $user_verify = wp_signon( $login_data, false );    
  73.     //wp_signon 是wordpress自带的函数,通过用户信息来授权用户(登陆),可记住用户名   
  74.            
  75.     if ( is_wp_error($user_verify) ) {    
  76.         echo "<span class='error'>用户名或密码错误,请重试!</span>";//不管啥错误都输出这个信息   
  77.         exit();   
  78.     } else { //登陆成功则跳转到首页(ajax提交所以需要用js来跳转)   
  79.         echo "<script type='text/javascript'>window.location='". get_bloginfo('url') ."'</script>";   
  80.         exit();   
  81.     }   
  82. } else {   
  83.   
  84.     //第四步中的代码应该都包含在这里   
  85.        
  86. }  

第五步:验证数据
将下面的代码添加在第四步中代码的前面,然而要注意的是,最有一个大括号要放在第四步代码的后面。

  1. <?php   
  2. /*
  3. Template Name: 自定义登陆页面  
  4. */  
  5. ?>  
  6. <?php   
  7. global $wpdb,$user_ID;   
  8.   
  9. if (!$user_ID) { //判断用户是否登录   
  10.     //接下来的代码都添加在这里   
  11.   
  12. }else { //跳转到首页   
  13.     echo "<script type='text/javascript'>window.location='". get_bloginfo('url') ."'</script>";   
  14. }   
  15. ?>  
  16. get_header();//载入头部文件   
  17. ?>   
  18. <!--<script src="http://code.jquery.com/jquery-1.4.4.js"></script>--><!--如果你发现没有ajax提交,请检查是否有引入jquery.js文件-->   
  19. <div id="container">   
  20. <div id="content">   
  21. <h3>阿树工作室-登陆页面</h3>   
  22. <div id="result"></div> <!-- 输出结果 -->   
  23. <form id="wp_login_form" action="" method="post">   
  24. <label>用户名</label><br />   
  25. <input type="text" name="username" class="text" value="" /><br />   
  26. <label>密码</label><br />   
  27. <input type="password" name="password" class="text" value="" /> <br />   
  28. <label>   
  29. <input name="rememberme" type="checkbox" value="forever" />记住我</label>   
  30. <br /><br />   
  31. <input type="submit" id="submitbtn" name="submit" value="Login" />   
  32. </form>   
  33.   
  34. <script type="text/javascript"><!--ajax 提交数据-->                        
  35. $("#submitbtn").click(function() {   
  36. <!--请准备一个gif图-->   
  37. $('#result').html('<img src="<?php bloginfo('template_url'); ?>/images/loader.gif" class="loader" />').fadeIn();   
  38. var input_data = $('#wp_login_form').serialize();   
  39. $.ajax({   
  40. type: "POST",   
  41. url:  "<?php echo "http://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; ?>",   
  42. data: input_data,   
  43. success: function(msg){   
  44. $('.loader').remove();   
  45. $('<div>').html(msg).appendTo('div#result').hide().fadeIn('slow');   
  46. }   
  47. });   
  48. return false;   
  49.   
  50. });   
  51. </script>   
  52.   
  53. </div>   
  54. </div>   
  55. <?php   
  56. get_footer(); //载入底部文件  
  57. if($_POST){ //数据提交   
  58.     //We shall SQL escape all inputs   
  59.     $username = $wpdb->escape($_REQUEST['username']);   
  60.     $password = $wpdb->escape($_REQUEST['password']);   
  61.     $remember = $wpdb->escape($_REQUEST['rememberme']);   
  62.        
  63.     if($remember){   
  64.         $remember = "true";   
  65.     } else {   
  66.         $remember = "false";   
  67.     }   
  68.     $login_data = array();   
  69.     $login_data['user_login'] = $username;   
  70.     $login_data['user_password'] = $password;   
  71.     $login_data['remember'] = $remember;   
  72.     $user_verify = wp_signon( $login_data, false );    
  73.     //wp_signon 是wordpress自带的函数,通过用户信息来授权用户(登陆),可记住用户名   
  74.            
  75.     if ( is_wp_error($user_verify) ) {    
  76.         echo "<span class='error'>用户名或密码错误,请重试!</span>";//不管啥错误都输出这个信息   
  77.         exit();   
  78.     } else { //登陆成功则跳转到首页(ajax提交所以需要用js来跳转)   
  79.         echo "<script type='text/javascript'>window.location='". get_bloginfo('url') ."'</script>";   
  80.         exit();   
  81.     }   
  82. } else {   
  83.   
  84.     //第四步中的代码应该都包含在这里   
  85.        
  86. }  

到这里就已经搞定了,下马是本篇教程的代码文件下载:

懒人下载--有一个代码文件

关于本页面通过url重写,代码就不放出来了,请参考上一篇教程。