在一般情況下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( !emptyempty($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')
新聞熱點
疑難解答
圖片精選