來源:http://www.ido321.com/1031.htmlphp
原文:Creating a Custom WordPress Registration Form Pluginhtml
譯文:建立一個定製的WordPress插件註冊表單web
譯者:dwqs數據庫
開門見山,WordPress提供了一個本身定義的註冊表單供新用戶使用,或者當加入一個新用戶到已經存在的WordPress網站。數組
但是假設你想實現一個本身定義的註冊表單而沒有顯示WordPress儀表盤的選項呢?app
在這篇文章中。咱們將學會怎麼使用標籤模板和短代碼模板的聯合體在WordPress中建立一個本身定義的註冊表單。wordpress
WordPress默認的註冊表單僅由兩個字段組成—-username和郵箱。函數
這個僅有的username和郵箱表單字段使得註冊速度很的簡單。首先,你輸入一個username,而後輸入郵箱,這個郵箱就是用來接收password的。post
接下來。你使用郵箱接收到的password登錄網站,並且完畢我的資料,把password改動成簡單易記得。網站
不過在網站註冊,而不是讓用戶區經歷這些壓力,那爲何除了username和郵箱以外,不提供一個直接的、包括一些額外重要的表單字段。好比password、我的的URL、我的簡單介紹、暱稱和他們的姓名的註冊表單供用戶使用呢?
這對於像Tuts+的多用戶站點是很實用的。
在這篇文章中,咱們將使用下列的表單字段創建一個本身定義的表單註冊插件:
這個本身定義表單插件可以經過使用短代碼和聯繫模板整合到WordPress中。
利用短代碼模板,你可以在你的網站中建立一個正式的註冊頁面。你也可以再一篇發表的文章中是用短代碼模板。這樣用戶就可以在閱讀完你的文章以後進行註冊。
假設你想加入一個註冊表單在你站點側邊欄的某個詳細位置。你可以對WordPress主題中只指望放置標籤模板的位置進行編輯,來建立需要的註冊表單。
在建立以前。需要注意的是,username、password和電子郵件字段是必需的。
當咱們編寫驗證函數時,咱們將強制運行這些規則。
構建插件
正如說的那樣,咱們開始對插件編碼。首先,包括插件的頭部:
<?php /* Plugin Name: Custom Registration Plugin URI: http://code.tutsplus.com Description: Updates user rating based on number of posts. Version: 1.0 Author: Agbonghama Collins Author URI: http://tech4sky.com */
接下來。咱們建立一個包括註冊表單的HTML代碼的PHP函數:
function registration_form( $username, $password, $email, $website, $first_name, $last_name, $nickname, $bio ) { echo ' <style> div { margin-bottom:2px; } input{ margin-bottom:4px; } </style> '; echo ' <form action="' . $_SERVER['REQUEST_URI'] . '" method="post"> <div> <label for="username">Username <strong>*</strong></label> <input type="text" name="username" value="' . ( isset( $_POST['username'] ) ? $username : null ) . '"> </div> <div> <label for="password">Password <strong>*</strong></label> <input type="password" name="password" value="' . ( isset( $_POST['password'] ) ? $password : null ) . '"> </div> <div> <label for="email">Email <strong>*</strong></label> <input type="text" name="email" value="' . ( isset( $_POST['email']) ? $email : null ) . '"> </div> <div> <label for="website">Website</label> <input type="text" name="website" value="' . ( isset( $_POST['website']) ? $website : null ) . '"> </div> <div> <label for="firstname">First Name</label> <input type="text" name="fname" value="' . ( isset( $_POST['fname']) ? $first_name : null ) . '"> </div> <div> <label for="website">Last Name</label> <input type="text" name="lname" value="' . ( isset( $_POST['lname']) ? $last_name : null ) . '"> </div> <div> <label for="nickname">Nickname</label> <input type="text" name="nickname" value="' . ( isset( $_POST['nickname']) ? $nickname : null ) . '"> </div> <div> <label for="bio">About / Bio</label> <textarea name="bio">' . ( isset( $_POST['bio']) ? $bio : null ) . '</textarea> </div> <input type="submit" name="submit" value="Register"/> </form> '; }
請注意註冊字段是做爲變量傳遞給上面的函數。在函數中,你會看到如下代碼的演示樣例:
( isset( $_POST['lname'] ) ? $last_name : null )
這個三元操做符是檢查全局變量數組$_POST是否包括數據,假設有數據,就把填充的表單字段值保存以便進入下一個字段。
除非你驗證了表單數據並且清空了表單數據,一個註冊表單才幹算完畢。不然就不算。所以,咱們要建立一個名爲registration_validation的表單驗證函數。
爲了簡化驗證的」痛苦」,咱們可以使用WordPress中的 WP_Error 類。跟着我編寫驗證函數:
一、建立函數,並將註冊表單的字段值做爲函數的參數傳遞進來
function registration_validation( $username, $password, $email, $website, $first_name, $last_name, $nickname, $bio ) {
二、實例化WP_Error 類。並把實例做爲全局變量,以便於咱們可以再函數的做用域以外使用。
global $reg_errors; $reg_errors = new WP_Error;
三、記住:咱們說的username、password和電子郵件是必填的,不要忽略了。爲了運行這個規則,咱們需要檢查它們中不論什麼一個是否爲空。假設爲空,咱們就將錯誤信息追加給WP_Error 類的實例。
if ( empty( $username ) || empty( $password ) || empty( $email ) ) { $reg_errors->add('field', 'Required form field is missing'); }
四、咱們也可以確保username的字符個數不小於4
if ( 4 > strlen( $username ) ) { $reg_errors->add( 'username_length', 'Username too short. At least 4 characters is required' ); }
五、檢查username是否被註冊了
if ( username_exists( $username ) ) $reg_errors->add('user_name', 'Sorry, that username already exists!');
六、利用WordPress的validate_username函數確保用戶名是可用的
if ( ! validate_username( $username ) ) { $reg_errors->add( 'username_invalid', 'Sorry, the username you entered is not valid' ); }
七、確保用戶輸入的password的字符個數不小於5
if ( 5 > strlen( $password ) ) { $reg_errors->add( 'password', 'Password length must be greater than 5' ); }
八、檢查電子郵件是否有效
if ( !is_email( $email ) ) { $reg_errors->add( 'email_invalid', 'Email is not valid' ); }
if ( !is_email( $email ) ) { $reg_errors->add( 'email_invalid', 'Email is not valid' ); }
if ( ! empty( $website ) ) { if ( ! filter_var( $website, FILTER_VALIDATE_URL ) ) { $reg_errors->add( 'website', 'Website is not a valid URL' ); } }
if ( is_wp_error( $reg_errors ) ) { foreach ( $reg_errors->get_error_messages() as $error ) { echo '<div>'; echo '<strong>ERROR</strong>:'; echo $error . '<br/>'; echo '</div>'; } }
complete_registration()函數。用於處理用戶註冊。用戶的註冊真正完畢是經過wp_insert_user函數,
用戶的數據做爲數據保存後可以做爲此函數的參數。
function complete_registration() { global $reg_errors, $username, $password, $email, $website, $first_name, $last_name, $nickname, $bio; if ( 1 > count( $reg_errors->get_error_messages() ) ) { $userdata = array( 'user_login' => $username, 'user_email' => $email, 'user_pass' => $password, 'user_url' => $website, 'first_name' => $first_name, 'last_name' => $last_name, 'nickname' => $nickname, 'description' => $bio, ); $user = wp_insert_user( $userdata ); echo 'Registration complete. Goto <a href="' . get_site_url() . '/wp-login.php">login page</a>.'; } }
在上面的函數中,咱們將$reg_errors做爲WP_Error的實例,並將表單字段做爲全局變量以便於可以再全局做用域中使用。
咱們需要檢查$reg_errors是否包括不論什麼錯誤。假設沒有錯誤,則將用戶註冊信息插入到WordPress的數據庫並用登錄連接來顯示註冊完畢的信息。
而後。把全部咱們以前建立的函數全部放在全局函數custom_registration_function()之中
function custom_registration_function() { if ( isset($_POST['submit'] ) ) { registration_validation( $_POST['username'], $_POST['password'], $_POST['email'], $_POST['website'], $_POST['fname'], $_POST['lname'], $_POST['nickname'], $_POST['bio'] ); // sanitize user form input global $username, $password, $email, $website, $first_name, $last_name, $nickname, $bio; $username = sanitize_user( $_POST['username'] ); $password = esc_attr( $_POST['password'] ); $email = sanitize_email( $_POST['email'] ); $website = esc_url( $_POST['website'] ); $first_name = sanitize_text_field( $_POST['fname'] ); $last_name = sanitize_text_field( $_POST['lname'] ); $nickname = sanitize_text_field( $_POST['nickname'] ); $bio = esc_textarea( $_POST['bio'] ); // call @function complete_registration to create the user // only when no WP_error is found complete_registration( $username, $password, $email, $website, $first_name, $last_name, $nickname, $bio ); } registration_form( $username, $password, $email, $website, $first_name, $last_name, $nickname, $bio ); }
我需要說明一下全局函數custom_registration_function()中有哪些代碼。
首先,我經過檢查
$_POST['submit']是不是空來肯定表單是否提交。假設提交了,我就調用
registration_validation()函數來驗證用戶提交的表單.
而後,確保表單數據的有效性並將有效的數據在表單字段域以後用一個變量命名。最後,調用
complete_registration()函數保存用戶。我需要調用registration_form()函數來顯示用戶註冊表單。
我以前提到過,我打算用短代碼模板來支持註冊插件。如下就是短代碼模的支持代碼:
// Register a new shortcode: [cr_custom_registration] add_shortcode( 'cr_custom_registration', 'custom_registration_shortcode' ); // The callback function that will replace [book] function custom_registration_shortcode() { ob_start(); custom_registration_function(); return ob_get_clean(); }
到這裏爲止,咱們已經完畢了插件。如下的一張圖片展現了註冊表單的外觀。
注意,你可能不會獲得全然一樣的外觀,因爲WordPress網站的CSS樣式不一樣。
應用插件
爲了在WordPress的文章頁或獨立頁面使用這個插件。可以增長下面代碼:[cr_custom_registration]
也可以加入列出的模板標記
<?php custom_registration_function(); ?>
.。這樣可以讓表單插件成
爲WordPress主題的一個部分。
你可以從這篇文章的附加代碼獲得這個插件。
總結
在這篇文章中,咱們一步步建立了一個本身定義註冊表單並加入到WordPress網站。
你可以加入額外字段,進一
步擴展這個註冊表單,好比用戶角色,AOL IM 帳戶,但是確保數據時有效的。
假設你有不論什麼問題或建議你。可以留下評論。
下一篇:
怎樣在站點中加入音樂