重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
1、 在comments.php评论表单中添加自己想要的字段,如:
创新互联建站服务项目包括盘山网站建设、盘山网站制作、盘山网页制作以及盘山网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,盘山网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到盘山省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
p
input type="text" name="tel" id="tel" size="22" tabindex="4" /
label for="tel"电话/label
/p
tabindex 这个属性按照从小到大排,为什么要这样?你可以自己试试….
2、如果评论表单是使用系统自带的,那么请用以下方法添加表单字段,如果不是,请略过
add_filter('comment_form_default_fields','comment_form_add_ewai');
function comment_form_add_ewai($fields) {
$label1 = __( '国家/地区' );
$label2 = __( 'Skype账号' );
$label3 = __( '电话' );
$label4 = __( '传真' );
$label5 = __( '地址' );
$value1 = isset($_POST['guojia']) ? $_POST['guojia'] : false;
$value2 = isset($_POST['skype']) ? $_POST['skype'] : false;
$value3 = isset($_POST['tel']) ? $_POST['tel'] : false;
$value4 = isset($_POST['fax']) ? $_POST['fax'] : false;
$value5 = isset($_POST['address']) ? $_POST['address'] : false;
$fields['guojia'] =HTML
p
label for="guojia"{$label1}/label
input id="guojia" name="guojia" type="text" value="{$value1}" size="30" /
/p
HTML;
return $fields;
}
3、 接收表单字段并写入数据库
在主题目录的 functions.php添加以下代码
add_action('wp_insert_comment','wp_insert_tel',10,2);
function wp_insert_tel($comment_ID,$commmentdata) {
$tel = isset($_POST['tel']) ? $_POST['tel'] : false;
//_tel 是存储在数据库里的字段名字,取出数据的就会用到
update_comment_meta($comment_ID,'_tel',$tel);
}
这两步就可以将数据写入数据库了,不信你试试看
add_action()参数中的10和2分别表示该函数执行的优先级是10(默认值,值越小优先级越高),该函数接受2个参数。
4、在后台显示额外字段
前面两步只是接收和写入到数据库,那么要怎么在后台评论列表中显示呢?将以下代码复制到主题目录的functions.php 中:
add_filter( 'manage_edit-comments_columns', 'my_comments_columns' );
add_action( 'manage_comments_custom_column', 'output_my_comments_columns', 10, 2 );
function my_comments_columns( $columns ){
$columns[ '_tel' ] = __( '电话' ); //电话是代表列的名字
return $columns;
}
function output_my_comments_columns( $column_name, $comment_id ){
switch( $column_name ) {
case "_tel" :
echo get_comment_meta( $comment_id, '_tel', true );
break;
}
如果要在前台的留言列表中调用,就用以下代码,_tel就是你在数据库中存储的字段名字
?php
$tel = get_comment_meta($comment-comment_ID,'_tel',true);
if( !empty($tel)){
echo "电话".$tel;
}
?
5、 大功告成,看看后台的评论列表,是不是多了一列电话,那样的话就没错了。
6、如果要移除某一个自带的表单字段,可以使用以下代码
function tel_filtered($fields){
if(isset($fields['tel']))
unset($fields['tel']);
return $fields;
}
add_filter('comment_form_default_fields', 'tel')
WordPress默认的注册表单仅由两个字段组成—-用户名和邮箱。
这个仅有的用户名和邮箱表单字段使得注册速度非常的简单。首先,你输入一个用户名,然后输入邮箱,这个邮箱就是用来接收密码的。接下来,你使用邮箱接收到的密码登陆站点,并且完成个人资料,把密码修改成简单易记得。
仅仅是在站点注册,而不是让用户区经历这些压力,那为什么除了用户名和邮箱之外,不提供一个直接的、包含一些额外重要的表单字段,例如密码、个人的URL、个人简介、昵称和他们的姓名的注册表单供用户使用呢?
这对于像Tuts+的多用户网站是非常有用的。
在这篇文章中,我们将使用下列的表单字段建立一个自定义的表单注册插件:
username
password
website URL
first name
last name
nickname
biography (or an about section)
这个自定义表单插件可以通过使用短代码和联系模板整合到WordPress中。
利用短代码模板,你可以在你的站点中创建一个正式的注册页面。你也可以再一篇发表的文章中是用短代码模板,这样用户就可以在阅读完你的文章之后进行注册。
如果你想添加一个注册表单在你网站侧边栏的某个具体位置,你可以对WordPress主题中仅仅期望放置标签模板的位置进行编辑,来创建需要的注册表单。
在创建之前,需要注意的是,用户名、密码和电子邮件字段是必需的。
当我们编写验证函数时,我们将强制执行这些规则。
构建插件
正如说的那样,我们开始对插件编码。首先,包含插件的头部:
?php
/*
Plugin Name: Custom Registration
Plugin URI:
Description: Updates user rating based on number of posts.
Version: 1.0
Author: Agbonghama Collins
Author URI:
*/
接下来,我们创建一个包含注册表单的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、记住:我们说的用户名、密码和电子邮件是必填的,不要忽略了。为了执行这个规则,我们需要检查它们中任何一个是否为空。如果为空,我们就将错误信息追加给 WP_Error 类的实例。
if ( empty( $username ) || empty( $password ) || empty( $email ) ) {
$reg_errors-add('field', 'Required form field is missing');
}
4、我们也可以确保用户名的字符个数不小于4
if ( 4 strlen( $username ) ) {
$reg_errors-add( 'username_length', 'Username too short. At least 4 characters is required' );
}
5、检查用户名是否被注册了
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、确保用户输入的密码的字符个数不小于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 'strongERROR/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();
}
到这里为止,我们已经完成了插件
一般用记事本过滤一下,即复制到记事本里在复制出来就没有多余的代码,wp我也用,希望能帮到您。