WordPressのコメントをカスタマイズ

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>',

nyuryoku

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(); ?>

で表示完了です!

hyoji

管理画面のコメント一覧に表示する

管理画面にも、一覧に表示するだけならば簡単にできます。
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);

admin

かなり荒業なのであまりおすすめしませんw
コアファイルを編集するため、必ずバックアップを取りながら行ってくださいm(_ _)m

「WordPressのコメントをカスタマイズ」への2件のフィードバック

  1. 現バージョンではこれではコメント欄に反映できないと思います。もし時間がありましたら最新バージョンでfifteenを用いてご教示ください。

    1. sameshima様
      お返事が遅くなってすみません。
      わたしがコメント欄のカスタマイズを行ったのはWordPress3.9.3なので、それ以降は対応できないのかもしれません。。
      現時点でそのサイトをバージョンアップはまだしていませんので、もしすることがあれば記事にしようと思います。
      コメントありがとうございました!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA