给WordPress评论表单增加字段的方法

问题描述

用 wp 的友友门都知道,wordpress评论表单的字段都只有4个,昵称、邮箱、网址、内容;评论是存在wp_comments表中的,如果要加上其它额外字段就得另寻它法了,例如:tel电话字段。
解决思路
Wp_comments 也有一个与之对应的meta表,叫wp_commentmeta,Posts文章表可以用postmeta存储一些额外的信息,那么comment也可以用commentmeta存储额外的评论字段。如果你装了多说评论插件,那么你再看看wp_commentmeta表,多说也是这么存储内容的,这个表一共有四个字段:meta_id、comment_id、meta_key、meta_value,看下面的截图:

存储的形式就是上面那样的,duoshuo_post_id 就是字段的名称,meta_value存储的就是内容。
如何向评论表单添加自定义字段
 
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')

时间: 2024-10-25 16:21:04

给WordPress评论表单增加字段的方法的相关文章

dede自定义表单增加添加时间怎么弄

我们在用dedecms添加自定义表单时有时想要设置一个用户提交的时间,方便查询,比如我们的客服人员查询昨天晚上下班后有哪些订单是刚生成的,比较好查看,如下图所示.那么,dedecms自定义表单增加添加时间怎么弄呢? 一.在自定义表单中添加字段,在后台找到:核心 - 频道模型 - 自定义表单,添加时间字段 timesj, 二.在调用表单的页面中加入代码,本例中是/templets/default/yygh.htm <input type='hidden' name='timesj' id='tim

c++获取sqlite3数据库表中所有字段的方法小结_C 语言

常用方法: 1.使用sqlite3_get_table函数 2.获取sqlite创建表的sql语句字符串,然后进行解析获取到相应的字段 3.采用配置文件的方式,将所有字段名写入配置文件 下面针对这三个方法给大家逐一详细介绍. 方法1:使用sqlite3_get_table函数 代码: char *dbname = "test.db"; int rc = sqlite3_open(dbname, &db); if (rc == SQLITE_OK) { char sql[256]

phpcms 2008 表单增加向导功能教程

添加表单 位置:模块管理---表单向导--添加表单 为表单添加字段查看添加的表单字段 二.管理表单 位置:模块管理---表单向导--管理表单 添加好表单,并且给表单添加了一个字段.在"管理表单"我们能管理表单,如图: 点击表单的名字预览,如图:

WordPress 评论中的链接自动去除方法

修改wp-includes下的某文件,注释掉:  代码如下 复制代码 add_filter( 'comment_text', 'make_clickable',9 ); 这方法有效,但每次wp升级后都要重新修改:今天无意看到含有此功能的一个小插件,顿悟,原来可以如此:在模板的functions.php里(加在最后吧)加上这句代码就行了.  代码如下 复制代码 <?php remove_filter('comment_text', 'make_clickable', 9); ?> 一个add f

WordPress 评论添加楼层显示两种方法

第一步:要在评论中增加楼号显示,也就是要更改WordPress的评论内部结构. 第二步:WP中的评论是统一标号的.也就是说,一条标号为256的评论并不知道它自己在某个日志中应该是几楼.所以要由我们来告诉它.举例来说,假设某篇日志中的评论分别是201号.207号.311号,其中311号是201号的子回复.那么尽管311是最新评论,但实际显示顺序是 201-311-207(从上到下).怎么才能让201知道自己是1楼,311知道自己是3楼呢?虽然说WP 2.7的显示评论的顺序由于嵌套规则的存在而被打乱

wordpress评论开启与禁用HTML标签方法

先我们来介绍开启WordPress支持html标签 打开wp-includes/comment-template.php,找到下面的代码:如果没有注释掉的话,就是打开的状态:  代码如下 复制代码 1.<?php echo $args['comment_notes_after']; ? > 将其注释掉,就可以关闭这个功能了:  代码如下 复制代码 1.<!--<?php echo $args['comment_notes_after']; ? >--> 不建议直接删除,

dedecms自定义表单增加验证码教程

在很多建站需求中,需要一些额外的表单供前台用户提交.以便于收集.统计.分析及处理更多的数据.比如:在线订单.在线报名等一些常见的互动应用. 利用织梦内容管理系统(DedeCMS)自带提供的自定义表单功能即可满足大多数的此类需求. 通过给自定义表单加入验证码的功能,可以防止一些用户恶意提交. 1.先进入DedeCMS后台生成自定义表单. 2.在自定义表单模板中添加验证码代码,如下:  代码如下 复制代码  <input name="validate" type="text

删除wordpress评论表单中的网址文本框

原始效果如下   想要去掉这个链接表单,一般想到的方法就是找到 comments.php 文件中的对应表单代码删掉.但是现在只需要一段非常简单的代码就可以去除:  代码如下 复制代码 add_filter('comment_form_default_fields', 'unset_url_field'); function unset_url_field($fields){     if(isset($fields['url']))        unset($fields['url']);  

AliSQL · 特性介绍 · 动态加字段

背景 加字段作为业务需求变更中最常见的需求,InnoDB引擎表的加字段功能一直以来被运维人员所诟病, 虽然支持了online方式,但随着表空间越来越大,copy整张表的代价也越来越大. AliSQL版本在InnoDB的compact记录格式的基础上,设计了新的记录格式comfort,支持动态加字段. 使用方法 使用的实例如下: CREATE TABLE test( id int primary key, name varchar(100), key(name) )ENGINE=InnoDB RO