WordPressのコメント機能って、企業サイトではほとんど使いませんよね。わたしはクライアントワークであまりコメント機能を使ったことがありませんでした。
今回、お客さまから掲示板のように使いたいという要望が。
カスタム投稿タイプで情報交換掲示板を作り、「このようなことが起きました、みなさんどうですか?」などのポストを作成、それにユーザーが意見を述べるという掲示板です。
というわけで、”コメント”ではなく”意見を投稿”にするなど文言の変更や、入力項目もカスタマイズの必要がありました。
WordPressのコアファイルに手を加えるのは嫌だったのですが、色々調べた結果、そうするしかなかったというわけです(つд⊂)エーン
※今回は、管理画面の方は一覧表示のみしかカスタマイズしていません。追加した項目の編集機能はありませんので、ご了承くださいまし。
文言を修正する
タイトルの「コメントを残す」を「意見を投稿する」に、「コメントを送信」という送信ボタンを「送信する」に変更します。functions.phpに以下を追加します。
//コメント文言を変更 function custom_comment_form($args) { $args['title_reply'] = '意見を投稿する'; $args['comment_notes_before'] = '<span class="required">*</span> が付いている欄は必須項目となりますので、必ずご記入をお願いします。</p>'; $args['comment_notes_after'] = ''; $args['label_submit'] = '送信する'; return $args; } add_filter('comment_form_defaults', 'custom_comment_form');
入力項目を追加・削除する
今回は、「ウェブサイト」項目を削除して、「都道府県(必須)」と「電話番号」を追加します。
WordPressのインストールディレクトリにある、wp-comments-post.phpを編集します。92行目あたり(WordPress3.9.1時点)に、以下を追加します。
//都道府県 $comment_area = ( isset($_POST['area']) ) ? trim($_POST['area']) : null; //電話番号 $comment_tel = ( isset($_POST['tel']) ) ? trim($_POST['tel']) : null;
その次に、122〜127行目あたり(WordPress3.9.1時点)の部分をコメントアウトして、書き換えます。これは、必須項目などのバリデートに使う部分です。
↓コメントアウトして、書き換えます
// if ( get_option('require_name_email') && !$user->exists() ) { // if ( 6 > strlen($comment_author_email) || '' == $comment_author ) // wp_die( __('<strong>ERROR</strong>: please fill the required fields (name, email).') ); // elseif ( !is_email($comment_author_email)) // wp_die( __('<strong>ERROR</strong>: please enter a valid email address.') ); // } if ( '' == $comment_author ) wp_die( __('<strong>エラー</strong>: 名前を入力してください。') ); if ( '' == $comment_area ) wp_die( __('<strong>エラー</strong>: 都道府県を入力してください。') ); if ( '' == $comment_content ) wp_die( __('<strong>ERROR</strong>: please type a comment.') );
追加した項目を表示する
ここまでで入力部分はできました。あとは、表示する部分です。
wp-includesディレクトリ内の、comment-template.phpを編集。
1789行目(WordPress3.9.1時点)をコメントアウトし、書き換えます。
<?php //printf( __( '<cite class="fn">%s</cite> <span class="says">says:</span>' ), get_comment_author_link() ); ?> <?php printf( __( '<span class="says">名前:</span><cite class="fn">%s</cite>' ), get_comment_author_link() ); ?> <?php if(get_comment_meta($comment->comment_ID, 'area', true)) printf( __( '(<cite class="fn">%s</cite>)<br />' ), get_comment_meta($comment->comment_ID, 'area', true) ); ?> <?php if(get_comment_meta($comment->comment_ID, 'tel', true)) printf( __( '<span>電話番号:</span><cite class="fn">%s</cite>' ), get_comment_meta($comment->comment_ID, 'tel', true) ); ?>
1834行目(WordPress3.9.1時点)もコメントアウトし、書き換えます。
<?php //printf( __( '%s <span class="says">says:</span>' ), sprintf( '<b class="fn">%s</b>', get_comment_author_link() ) ); ?> <?php printf( __( '<span class="says">名前:</span>%s' ), sprintf( '<b class="fn">%s</b>', get_comment_author_link() ) ); ?> <?php if(get_comment_meta($comment->comment_ID, 'area', true)) printf( __( '(<cite class="fn">%s</cite>)<br />' ), get_comment_meta($comment->comment_ID, 'area', true) ); ?> <?php if(get_comment_meta($comment->comment_ID, 'tel', true)) printf( __( '<span>電話番号:</span><cite class="fn">%s</cite>' ), get_comment_meta($comment->comment_ID, 'tel', true) ); ?>
2054〜2060行目(WordPress3.9.1時点)をコメントアウトし、書き換えます。
↓コメントアウトして書き換えです
// 'author' => '<p class="comment-form-author">' . '<label for="author">' . __( 'Name' ) . ( $req ? ' <span class="required">*</span>' : '' ) . '</label> ' . // '<input id="author" name="author" type="text" value="' . esc_attr( $commenter['comment_author'] ) . '" size="30"' . $aria_req . ' /></p>', // 'email' => '<p class="comment-form-email"><label for="email">' . __( 'Email' ) . ( $req ? ' <span class="required">*</span>' : '' ) . '</label> ' . // '<input id="email" name="email" ' . ( $html5 ? 'type="email"' : 'type="text"' ) . ' value="' . esc_attr( $commenter['comment_author_email'] ) . '" size="30"' . $aria_req . ' /></p>', // 'url' => '<p class="comment-form-url"><label for="url">' . __( 'Website' ) . '</label> ' . // '<input id="url" name="url" ' . ( $html5 ? 'type="url"' : 'type="text"' ) . ' value="' . esc_attr( $commenter['comment_author_url'] ) . '" size="30" /></p>', 'author' => '<p class="comment-form-author">' . '<label for="author">' . __( '名前' ) . ' <span class="required">*</span>' . '</label> ' . '<input id="author" name="author" type="text" value="' . esc_attr( $commenter['comment_author'] ) . '" size="30"' . $aria_req . ' /></p>', 'area' => '<p class="comment-form-area">' . '<label for="area">' . __( '都道府県' ) . '<span class="required">*</span>' .'</label> ' . '<input id="area" name="area" type="text" value="' . esc_attr( $commenter['comment_area'] ) . '" size="30"' . $aria_req . ' /></p>', 'tel' => '<p class="comment-form-tel">' . '<label for="tel">' . __( '電話番号' ) . '</label> ' . '<input id="tel" name="tel" type="text" value="' . esc_attr( $commenter['comment_tel'] ) . '" size="30"' . $aria_req . ' /></p>', 'email' => '<p class="comment-form-email">' . '<label for="email">' . __( 'メールアドレス' ) . '</label> ' . '<input id="email" name="email" type="text" value="' . esc_attr( $commenter['comment_email'] ) . '" size="30"' . $aria_req . ' /></p>', 'url' => '',
2078行目あたりのコメントフィールドのタイトルを書き換えます。
// 'comment_field' => '<p class="comment-form-comment"><label for="comment">' . _x( 'Comment', 'noun' ) . '</label> <textarea id="comment" name="comment" cols="45" rows="8" aria-required="true"></textarea></p>', 'comment_field' => '<p class="comment-form-comment"><label for="comment">' . ( '意見' ) . ' <span class="required">*</span>'.'</label> <textarea id="comment" name="comment" cols="45" rows="8" aria-required="true"></textarea></p>',
comments.phpを作成します。
<?php if (post_password_required()) { return; } ?> <div id="comments"> <?php if (have_comments()): ?> <h3 id="comments-count"><?php echo get_comments_number().' 件の意見'; ?></h3> <ul id="comments-list"> <?php wp_list_comments(array('avatar_size'=>48,'style'=>'ul','type'=>'comment',)); ?> </ul> <?php if ( get_comment_pages_count() > 1) : ?> <ul id="comments-pagination"> <li id="prev-comments"><?php previous_comments_link('<< 前の意見'); ?></li> <li id="next-comments"><?php next_comments_link('次の意見 >>'); ?></li> </ul> <?php endif; endif; ?> <?php comment_form(); ?> </div><!-- comments -->
あとは、single.phpの表示したい部分に
<?php comments_template(); ?>
で表示完了です!
管理画面のコメント一覧に表示する
管理画面にも、一覧に表示するだけならば簡単にできます。
functions.phpに以下を追加します。
//コメント送信先 function add_comment_meta_values($comment_id) { if(isset($_POST['area'])) { $area = wp_filter_nohtml_kses($_POST['area']); add_comment_meta($comment_id, 'area', $area, false); } if(isset($_POST['tel'])) { $tel = wp_filter_nohtml_kses($_POST['tel']); add_comment_meta($comment_id, 'tel', $tel, false); } } add_action ('comment_post', 'add_comment_meta_values', 1); //管理画面にコメント追加項目を表示 function manage_comment_columns($columns) { $columns['area'] = "都道府県"; $columns['tel'] = "電話番号"; return $columns; } function add_comment_columns($column_name, $comment_id) { if( $column_name == 'area' ) { $area = get_comment_meta( $comment_id, 'area', true ); echo attribute_escape($area); } if( $column_name == 'tel' ) { $tel = get_comment_meta( $comment_id, 'tel', true ); echo attribute_escape($tel); } } add_filter( 'manage_edit-comments_columns', 'manage_comment_columns' ); add_action( 'manage_comments_custom_column', 'add_comment_columns',null, 2);
かなり荒業なのであまりおすすめしませんw
コアファイルを編集するため、必ずバックアップを取りながら行ってくださいm(_ _)m
現バージョンではこれではコメント欄に反映できないと思います。もし時間がありましたら最新バージョンでfifteenを用いてご教示ください。
sameshima様
お返事が遅くなってすみません。
わたしがコメント欄のカスタマイズを行ったのはWordPress3.9.3なので、それ以降は対応できないのかもしれません。。
現時点でそのサイトをバージョンアップはまだしていませんので、もしすることがあれば記事にしようと思います。
コメントありがとうございました!