怎样利用WordPress创建自己定义注冊表单插件
来源:http://www.ido321.com/1031.html
原文:Creating a Custom WordPress Registration Form Plugin
译文:创建一个定制的WordPress插件注冊表单
译者:dwqs
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMTA0Mzg0Mw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
开门见山,WordPress提供了一个自己定义的注冊表单供新用户使用,或者当加入一个新用户到已经存在的WordPress网站。
可是假设你想实现一个自己定义的注冊表单而没有显示WordPress仪表盘的选项呢?
在这篇文章中。我们将学会怎么使用标签模板和短代码模板的联合体在WordPress中创建一个自己定义的注冊表单。
WordPress默认的注冊表单仅由两个字段组成—-username和邮箱。
这个仅有的username和邮箱表单字段使得注冊速度很的简单。首先,你输入一个username,然后输入邮箱,这个邮箱就是用来接收password的。
接下来。你使用邮箱接收到的password登陆网站,而且完毕个人资料,把password改动成简单易记得。
不过在网站注冊,而不是让用户区经历这些压力,那为什么除了username和邮箱之外,不提供一个直接的、包括一些额外重要的表单字段。比如password、个人的URL、个人简单介绍、昵称和他们的姓名的注冊表单供用户使用呢?
这对于像Tuts+的多用户站点是很实用的。
在这篇文章中,我们将使用下列的表单字段建立一个自己定义的表单注冊插件:
- username
- password
- website URL
- first name
- last name
- nickname
- biography (or an about section)
这个自己定义表单插件能够通过使用短代码和联系模板整合到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 类。跟着我编写验证函数:
1、创建函数,并将注冊表单的字段值作为函数的參数传递进来
function registration_validation( $username, $password, $email, $website, $first_name, $last_name, $nickname, $bio ) {
2、实例化WP_Error 类。并把实例作为全局变量,以便于我们能够再函数的作用域之外使用。
global $reg_errors;
$reg_errors = new WP_Error;
3、记住:我们说的username、password和电子邮件是必填的,不要忽略了。为了运行这个规则,我们须要检查它们中不论什么一个是否为空。假设为空,我们就将错误信息追加给WP_Error 类的实例。
if ( empty( $username ) || empty( $password ) || empty( $email ) ) {
$reg_errors->add('field', 'Required form field is missing');
}
4、我们也能够确保username的字符个数不小于4
if ( 4 > strlen( $username ) ) {
$reg_errors->add( 'username_length', 'Username too short. At least 4 characters is required' );
}
5、检查username是否被注冊了
if ( username_exists( $username ) )
$reg_errors->add('user_name', 'Sorry, that username already exists!');
6、利用WordPress的validate_username函数确保用户名是可用的
if ( ! validate_username( $username ) ) {
$reg_errors->add( 'username_invalid', 'Sorry, the username you entered is not valid' );
}
7、确保用户输入的password的字符个数不小于5
if ( 5 > strlen( $password ) ) {
$reg_errors->add( 'password', 'Password length must be greater than 5' );
}
8、检查电子邮件是否有效
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样式不同。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMTA0Mzg0Mw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
应用插件
为了在WordPress的文章页或独立页面使用这个插件。能够增加下面代码:[cr_custom_registration]
也能够加入列出的模板标记
<?php custom_registration_function(); ?>
.。这样能够让表单插件成
为WordPress主题的一个部分。
你能够从这篇文章的附加代码得到这个插件。
总结
在这篇文章中,我们一步步创建了一个自己定义注冊表单并加入到WordPress网站。
你能够加入额外字段,进一
步扩展这个注冊表单,比如用户角色,AOL IM 账户,可是确保数据时有效的。
假设你有不论什么问题或建议你。能够留下评论。
下一篇:
怎样在站点中加入音乐
怎样利用WordPress创建自己定义注冊表单插件的更多相关文章
- YII用户注冊表单的实现熟悉前台各个表单元素操作方式
模还是必须定义两个基本方法.还有部分label标签映射为汉字,假设进行表单验证,还要定义一些验证规则: <? php /* * 用户模型 * */ class user extends CAct ...
- C# 系统应用之注冊表使用具体解释
在平时做项目时,我们有时会遇到注冊表的操作,比如前面我们须要获取IE浏览器地址栏的信息.获取"我的电脑"地址栏输入的目录信息.USB近期使用信息等.注冊表项是注冊表的基本组织单位, ...
- 如何利用WordPress创建自定义注册表单插件
来源:http://www.ido321.com/1031.html 原文:Creating a Custom WordPress Registration Form Plugin 译文:创建一个定制 ...
- C#注冊表操作汇总
一.注冊表基本知识 1) 结构 键->项->子项->值项(名称.类型.数据) REG_SZ 字符串 REG_BINARY 二进制 REG_DWORD ...
- c++ 操作注冊表
1. 注冊表简单介绍 注冊表是为Windows NT和Windows95中全部32位硬件/驱动和32位应用程序设计的数据文件,用于存储系统和应用程序的设置信息.16位驱动在Winnt (W ...
- QSettings读写注冊表、配置文件
简述 普通情况下.我们在开发软件过程中,都会缓存一些信息到本地,能够使用轻量级数据库sqlite.也能够操作注冊表.读写配置文件. 关于QSettings的使用前面已经介绍过了.比較具体,见" ...
- 《解读window核心编程》 之 注冊表
1 注冊表的作用及组织形式 Windows系统使用注冊表来存储系统和应用程序配置数据.非常多系统和应用程序重要的配置的信息都存储在注冊表中. 注冊表是一种以树型结构组织的数据库.树的每个节点称 作键( ...
- PLSQL Developer过期要注冊表
打开执行输入 regedit 打表注冊表 删除 HKEY_CURRENT_USER\Software\Allround Automations HKEY_CURRENT_USER\Software\M ...
- 64位Windows操作系统中的注冊表
x64系统上有x64.x86两种注冊表,记录下. 64 位Windows系统中的注冊表分为 32 位注冊表项和 64 位注冊表项.很多 32 位注冊表项与其对应的 64 位注冊表项同名. 在64位版本 ...
随机推荐
- [转]自适应网页设计(Responsive Web Design)
本文转自:http://www.ruanyifeng.com/blog/2012/05/responsive_web_design.html 作者: 阮一峰 日期: 2012年5月 1日 随着3G的普 ...
- Boost Bimap示例
#include <string> #include <iostream> #include <boost/bimap.hpp> template< clas ...
- Android sensor 系统框架 (二)
连载上一篇http://www.cnblogs.com/hackfun/p/7327320.html (D) 如何加载访问.so库 在前一篇博客http://www.cnblogs.com/hackf ...
- MySQL 多表批量更新
使用inner join 进行表更新sql 与mysql 的区别: SQL UPDATE W SET W.字段=新数据 FROM 表a W INNER JOIN 表B d ON W.wID=D.wid ...
- hdu2639,第K优决策
在dp问题中如果遇到问题,没有什么是加一维度不能解决的,如果不能,再加一维度. #include<iostream> #include<cstring> #include< ...
- Python语言之变量2(命名规则,类型转换)
1.命名规则 1.起始位为字母(大小写)或下划线('_') 2.其他部分为字母(大小写).下划线('_')或数字(0-9) 3.大小写敏感 2.先体验一把: #Ask the user their n ...
- 3星|《刷新》:微软第三任CEO上任三年后的回顾
刷新:重新发现商业与未来 作者是微软第三任CEO,2014年2月上任.本书英文版出版于2017年9月,全书内容大致截至于2017年年初,算是作者上任三年后的回顾. 书中作者讲了不少自己的个人经历.作者 ...
- sublime之markdown快捷键
目录 sublime 快捷键 markdown技能 sublime 快捷键 ctrl + shift + p 进入命令面板 package install 进入下载仓库 ctrl + alt + O ...
- 微信小程序animation
wxml <view class="background" animation="{{rotateData}}"> </view>< ...
- 洛谷——P2657 [SCOI2009]windy数
P2657 [SCOI2009]windy数 题目大意: windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道, 在A和B之间,包括A和 ...