文章參考自:http://www.tutorialstag.com/custom-WordPress-login-without-using-a-plugin.html
像上一篇教程,很多人不喜歡 WordPress 默認的註冊頁面,登陸頁面也一樣,這篇教程我們將創建一個自定義的登陸頁面,你可以通過一個自定義頁面模板來實現,也可以通過前面教程中提到的 url 重寫來實現。

第一步:創建文件
首先 (還是以 twenty ten 主題為例):在 twenty ten 主題文件夾裏面新建一個 php 文件,文件名隨意,比如:page-login.php 。
第二步:給頁面模板命名
在 page-login.php 頁面開頭添加代碼:
- <?php
- /*
- Template Name: 自定義登陸頁面
- */
- ?>
這樣你在後台添加頁面的時候選擇頁面模板就可以看到這個頁面模板了。
第三步:判斷用户是否已經登陸
我們首先要做的當然還是判斷用户是否已經登陸。接着添加以下代碼:
- <?php
- global $wpdb,$user_ID;
- if (!$user_ID) { //判斷用户是否登錄
- //接下來的代碼都添加在這裏
- }else { //跳轉到首頁
- echo "<script type='text/javascript'>window.location='". get_bloginfo('url') ."'</script>";
- }
- ?>
第四步:添加登陸表單和 ajax 提交代碼
在上一步留下的位置添加以下代碼
- get_header();//載入頭部文件
- ?>
- <!--<script src="http://code.jquery.com/jquery-1.4.4.js"></script>--><!--如果你發現沒有 ajax 提交,請檢查是否有引入 jquery.js 文件-->
- <div id="container">
- <div id="content">
- <h3> 阿樹工作室-登陸頁面</h3>
- <div id="result"></div> <!-- 輸出結果 -->
- <form id="wp_login_form" action="" method="post">
- <label> 用户名</label><br />
- <input type="text" name="username" class="text" value="" /><br />
- <label> 密碼</label><br />
- <input type="password" name="password" class="text" value="" /> <br />
- <label>
- <input name="rememberme" type="checkbox" value="forever" /> 記住我</label>
- <br /><br />
- <input type="submit" id="submitbtn" name="submit" value="Login" />
- </form>
- <script type="text/javascript"><!--ajax 提交數據-->
- $("#submitbtn").click(function() {
- <!--請準備一個 gif 圖-->
- $('#result').html('<img src="<?php bloginfo('template_url'); ?>/images/loader.gif" class="loader" />').fadeIn();
- var input_data = $('#wp_login_form').serialize();
- $.ajax({
- type: "POST",
- url: "<?php echo "http://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; ?>",
- data: input_data,
- success: function(msg){
- $('.loader').remove();
- $('<div>').html(msg).appendTo('div#result').hide().fadeIn('slow');
- }
- });
- return false;
- });
- </script>
- </div>
- </div>
- <?php
- get_footer(); //載入底部文件
第五步:驗證數據
將下面的代碼添加在第四步中代碼的前面,然而要注意的是,最有一個大括號要放在第四步代碼的後面。
- if($_POST){ //數據提交
- //We shall SQL escape all inputs
- $username = $wpdb->escape($_REQUEST['username']);
- $password = $wpdb->escape($_REQUEST['password']);
- $remember = $wpdb->escape($_REQUEST['rememberme']);
- if($remember){
- $remember = "true";
- } else {
- $remember = "false";
- }
- $login_data = array();
- $login_data['user_login'] = $username;
- $login_data['user_password'] = $password;
- $login_data['remember'] = $remember;
- $user_verify = wp_signon( $login_data, false );
- //wp_signon 是 WordPress 自帶的函數,通過用户信息來授權用户 (登陸),可記住用户名
- if ( is_wp_error($user_verify) ) {
- echo "<span > 用户名或密碼錯誤,請重試!</span>";//不管啥錯誤都輸出這個信息
- exit();
- } else { //登陸成功則跳轉到首頁 (ajax 提交所以需要用 js 來跳轉)
- echo "<script type='text/javascript'>window.location='". get_bloginfo('url') ."'</script>";
- exit();
- }
- } else {
- //第四步中的代碼應該都包含在這裏
- }
到這裏就已經搞定了,下馬是本篇教程的代碼文件下載:
懶人下載--有一個代碼文件
關於本頁面通過 url 重寫,代碼就不放出來了,請參考上一篇教程。