添加&存储额外的字段 - Wordpress评论

时间:2016-10-28 10:48:52

标签: php wordpress comments custom-fields

我正在使用标准的Wordpress评论表格,但我想将单选按钮作为附加字段添加到表单中,如下所示:

enter image description here

我的PHP生成标准表单如下,但我不知道添加,存储和显示(在前端)附加信息的最佳途径:

<?php
$fields =  array(
'author' =>
'<p class="comment-form-author"><label for="author">' . __( 'Name', 'domainreference' ) . '</label> ' .
( $req ? '<span class="required">*</span>' : '' ) .
'<input id="author" name="author" placeholder="Enter your name" type="text" value="' . esc_attr( $commenter['comment_author'] ) . '" size="30"' . $aria_req . ' /></p>',

'email' =>
'<p class="comment-form-email"><label for="email">' . __( 'Email', 'domainreference' ) . '</label> ' .
( $req ? '<span class="required">*</span>' : '' ) .
'<input id="email" name="email" placeholder="Enter your email address" type="text" value="' . esc_attr(  $commenter['comment_author_email'] ) . '" size="30"' . $aria_req . ' /></p>',

'comment_field' =>
  '<p class="comment-form-comment"><label for="comment">' . _x( 'Comment', 'noun' ) .
'</label><textarea id="comment" placeholder="Enter your comment" name="comment" cols="45" rows="8" aria-required="true">' .
'</textarea></p>'
);

$args = array(
  'id_form'           => 'commentform',
  'class_form'      => 'comment-form',
  'id_submit'         => 'submit',
  'class_submit'      => 'submit btn',
  'name_submit'       => 'submit',
  'title_reply'       => __( 'Leave a Reply' ),
  'title_reply_to'    => __( 'Leave a Reply to %s' ),
  'cancel_reply_link' => __( 'Cancel Reply' ),
  'label_submit'      => __( 'Post Comment' ),
  'format'            => 'xhtml',

  'fields' => apply_filters( 'comment_form_default_fields', $fields )

);

comment_form( $args ); ?>

2 个答案:

答案 0 :(得分:0)

添加&amp;存储额外的字段 - Wordpress评论

// Add the fields to comment form
add_filter( 'comment_form_defaults', 'change_comment_form_defaults');
function change_comment_form_defaults( $default ) {
     $commenter = wp_get_current_commenter();
     $default[ 'comment_field' ] .= '<p class="comment-form-author">' .
                                        '<label for="vote-type">'. __('How are you like to vote?') . '</label>
                                        <span class="required">*</span>
                                        <input id="vote-type-yes" name="vote-type" size="30" type="radio" value="Yes" />
                                        <label for="vote-type-yes">Yes</label>
                                        <input id="vote-type-no" name="vote-type" size="30" type="radio" value="No" />
                                        <label for="vote-type-no">No</label>
                                        <input id="vote-type-maybe" name="vote-type" size="30" type="radio" value="No" />
                                        <label for="vote-type-maybe">May Be</label>
                                     </p>';
            return $default;
}

// validations
add_filter( 'pre_comment_on_post', 'verify_comment_meta_data' );
function verify_comment_meta_data( $commentdata ) {
      if ( ! isset( $_POST['vote-type'] ) )
         wp_die( __( 'Error: please fill the required field (How are you like to vote?).' ) );
      return $commentdata;
}

// And save the comment meta
add_action( 'comment_post', 'save_comment_meta_data' );
function save_comment_meta_data( $comment_id ) {
      add_comment_meta( $comment_id, 'vote-type', $_POST[ 'vote-type' ] );
}


// Retrieve and display comment meta
add_filter( 'get_comment_author_link', 'attach_vote_type_to_author' );
function attach_vote_type_to_author( $author ) {
       $vote_type = get_comment_meta( get_comment_ID(), 'vote-type', true );
       if ( $vote_type )
            $author .= " ($vote_type)";
       return $author;
}

答案 1 :(得分:0)

结果显示我已经使用的插件高级自定义字段,可以非常轻松地在评论表单中插入其他字段。

ACF非常好,它已经创建了一个教程来完成这个以及如何在评论线程中输出数据:https://www.advancedcustomfields.com/resources/get-values-comment/

但是,通过这样做,插件会在前端添加一堆多余的CSS和JS文件,以便删除这些,将这些代码添加到您的functions.php中:

// disable acf css on front-end acf forms
add_action( 'wp_print_styles', 'my_deregister_styles', 100 );

function my_deregister_styles() {
  wp_deregister_style( 'acf' );
  wp_deregister_style( 'acf-field-group' );
  wp_deregister_style( 'acf-global' );
  wp_deregister_style( 'acf-input' );
  wp_deregister_style( 'acf-datepicker' );
}