来源: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
  • email
  • 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' );
}
                         9、检查电子邮件是否被注冊
if ( !is_email( $email ) ) {
$reg_errors->add( 'email_invalid', 'Email is not valid' );
}
                        10.、假设用户填写了站点字段,须要检查其是否有效
if ( ! empty( $website ) ) {
if ( ! filter_var( $website, FILTER_VALIDATE_URL ) ) {
$reg_errors->add( 'website', 'Website is not a valid URL' );
}
}
                        11、最后,我们在WP_Error实例中对错误进行循环。并显示个别的错误
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创建自己定义注冊表单插件的更多相关文章

  1. YII用户注冊表单的实现熟悉前台各个表单元素操作方式

    模还是必须定义两个基本方法.还有部分label标签映射为汉字,假设进行表单验证,还要定义一些验证规则: <? php /* * 用户模型 * */ class user extends CAct ...

  2. C# 系统应用之注冊表使用具体解释

    在平时做项目时,我们有时会遇到注冊表的操作,比如前面我们须要获取IE浏览器地址栏的信息.获取"我的电脑"地址栏输入的目录信息.USB近期使用信息等.注冊表项是注冊表的基本组织单位, ...

  3. 如何利用WordPress创建自定义注册表单插件

    来源:http://www.ido321.com/1031.html 原文:Creating a Custom WordPress Registration Form Plugin 译文:创建一个定制 ...

  4. C#注冊表操作汇总

    一.注冊表基本知识 1)       结构 键->项->子项->值项(名称.类型.数据) REG_SZ         字符串 REG_BINARY    二进制 REG_DWORD ...

  5. c++ 操作注冊表

    1.       注冊表简单介绍 注冊表是为Windows NT和Windows95中全部32位硬件/驱动和32位应用程序设计的数据文件,用于存储系统和应用程序的设置信息.16位驱动在Winnt (W ...

  6. QSettings读写注冊表、配置文件

    简述 普通情况下.我们在开发软件过程中,都会缓存一些信息到本地,能够使用轻量级数据库sqlite.也能够操作注冊表.读写配置文件. 关于QSettings的使用前面已经介绍过了.比較具体,见" ...

  7. 《解读window核心编程》 之 注冊表

    1 注冊表的作用及组织形式 Windows系统使用注冊表来存储系统和应用程序配置数据.非常多系统和应用程序重要的配置的信息都存储在注冊表中. 注冊表是一种以树型结构组织的数据库.树的每个节点称 作键( ...

  8. PLSQL Developer过期要注冊表

    打开执行输入 regedit 打表注冊表 删除 HKEY_CURRENT_USER\Software\Allround Automations HKEY_CURRENT_USER\Software\M ...

  9. 64位Windows操作系统中的注冊表

    x64系统上有x64.x86两种注冊表,记录下. 64 位Windows系统中的注冊表分为 32 位注冊表项和 64 位注冊表项.很多 32 位注冊表项与其对应的 64 位注冊表项同名. 在64位版本 ...

随机推荐

  1. MyBatis ((一对多和多对一配置)实现持久化操作 之二)

    注: 此文中的实体类还是沿用上一章的Emp和Dept两个类 还是老样子,不细说 直接上代码 01.在emp.xml中  配置和Dept的多对一的相关信息 <?xml version=" ...

  2. jQuery与js的区别,并有基本语法详解,

    通过过一下对比,我们能很清楚的发现jquery与js的区别,运用jquery能大量减少代码量,不过js里面关于时间的setinterval和settimeout只能用js <script src ...

  3. SQL基本操作——约束

    我们将主要探讨以下几种约束: 1.NOT NULL 2.UNIQUE 3.PRIMARY KEY 4.FOREIGN KEY 5.CHECK 6.DEFAULT SQL NOTNULL约束:NOT N ...

  4. 开发者自建IM服务器必须要解决的几个问题!

    有很多朋友的项目需要用到即时通讯,几年前鄙人的项目也是如此,当年没有选择,只能自建了IM服务器,几年下来跨了不少的坑,想想都甚是后怕.总结此文为后来还想自建IM的朋友提个醒,或许能找到更好的解决之路. ...

  5. MyBatis入门3_mapper.xml优化(parameterType简写_NameSpace简写_sql片段_特殊字符处理)_动态SQL

    本文为博主辛苦总结,希望自己以后返回来看的时候理解更深刻,也希望可以起到帮助初学者的作用. 转载请注明 出自 : luogg的博客园 谢谢配合! 优化 1.起别名(一般不用,写全方便查看类出处) 以前 ...

  6. C# 获得固定年月日

    /// <summary> /// 获得固定年月日,时和分不固定 : 2019-01-01 00:00:00 /// </summary> /// <returns> ...

  7. iptables详解(3):iptables规则管理

    所属分类:IPtables  Linux基础 在本博客中,从理论到实践,系统的介绍了iptables,如果你想要从头开始了解iptables,可以查看iptables文章列表,直达链接如下 iptab ...

  8. Intellij Idea 创建一个Web项目

    今天想用IDEA创建一个web项目: 准备工具 1.jdk1.7 2.tomcat6.0,由于下载的8.5没有lib目录不能配置改6.0 3.idea2019.1.2 Intellij Idea的安装 ...

  9. [nodejs]在mac环境下如何将node更新至最新?

    在mac下安装angular-cli时,报出较多错误.初步怀疑是因为node环境版本过低导致. 在mac下,需要执行如下几步将node更新至最新版本,也可以更新到指定版本 1. sudo npm ca ...

  10. 00.continue break return的使用场景

    continue continue 语句跳出本次循环,而break跳出整个循环. continue 语句用来告诉Python跳过当前循环的剩余语句,然后继续进行下一轮循环. continue语句用在w ...