来源: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 帐户,但是确保数据时有效的。
假设你有不论什么问题或建议你。可以留下评论。
下一篇:
怎样在站点中加入音乐