はじめに

当ブログでは、とある事情(というか英語の勉強?)のために、英語版のWordPressを使っています。
ここ数日で自作テーマテンプレートの日本語化を行い、以前まで英語で出力されていたいくつかの関数など、各項目を日本語化したのですが、コメントフォームは単に<?php comment_form(); ?>を読み込んでいるだけだったので、英語版WordPressのド標準の英語版コメントフォームが表示されていました。
せっかくテーマを日本語化したので、コメントフォームも日本語化したいと思ったわけです。
でも、<?php comment_form(); ?>が吐き出すコードを丸々置き換えるのは面倒だと思って、functions.phpで無理やりカスタマイズしました。
<?php comment_form(); ?>はせっかくWordPressに用意されているリソースですし、今後WordPressコアがアップデートされるかも知れませんし。
これの備忘録です。

functions.phpでcomment_form();のコメントフォーム見出しとコメント欄をカスタマイズ

上のコメントフォームは<?php comment_form(); ?>がデフォルトで吐き出すコメントフォームのサンプルです。
長いこと、Jetpackのコメントフォームを使っていたので気付きませんでしたが、コメント本文欄と名前、メールアドレス、ウェブサイト欄の上下が入れ替わったみたいですね。
先ずはこれの見出しなどを任意の文字列に変更します。
functions.phpに下記を書きます。

function custom_comment_form($args) {
  $args['title_reply'] = 'コメントを残す';
  $args['comment_notes_before'] = 'お気軽にどうぞ\(^o^)/';
  $args['comment_field'] = '<p class="comment-form-comment"><label for="comment">' . _x('コメント', 'myblog') . '</label><textarea id="comment" name="comment" placeholder="コメント本文を入力"></textarea></p>';
  $args['comment_notes_after'] = '';
  $args['label_submit'] = 'コメントを送信する';
  return $args;
}
add_filter('comment_form_defaults', 'custom_comment_form');

これで上のようなコメントフォームになったと思います。

title_replyはコメントフォームの見出し文言です。
comment_notes_beforeはコメント欄の前に来る文言で、不要なら= '';で削除できます。
comment_fieldはコメント欄の見出し文言で、placeholderを設定できますが、不要ならplaceholder="コメント本文を入力"を丸々削除。
comment_notes_afterはコメント欄の後に来る文言で、上記では= '';で削除しています。
label_submitはサブミットボタン文言です。

ちなみに、$args['cancel_reply_link'] = '返信をやめる';を追加することで、コメントにコメントで返信する際のキャンセルボタン文言も変更できます。

functions.phpでcomment_form();の「Name」「Email」「Website」欄をカスタマイズ

せっかくなので「Name」「Email」「Website」の文言も日本語化し、placeholderも追加します。
functions.phpに下記を追加します。

function modify_comment_form_fields($fields){
  $fields['author'] = '<p class="comment-form-author">' . '<label for="author">' . __( '名前' ) . '</label> ' . ( $req ? '<span class="required">*</span>' : '' ) . '<input id="author" placeholder="名無しさん" name="author" type="text" value="' . esc_attr( $commenter['comment_author'] ) . '" size="30"' . $aria_req . ' />' . '</p>';
  $fields['email'] = '<p class="comment-form-email">' . '<label for="email">' . __( 'メールアドレス' ) . '</label> ' . ( $req ? '<span class="required">*</span>' : '' ) . '<input id="email" placeholder="hoge@example.com" name="email" type="text" value="' . esc_attr(  $commenter['comment_author_email'] ) . '" size="30"' . $aria_req . ' />'  . '</p>';
  $fields['url'] = '<p class="comment-form-url">' . '<label for="url">' . __( 'ウェブサイト', 'domainreference' ) . '</label>' . '<input id="url" name="url" placeholder="https://www.example.com" type="text" value="' . esc_attr( $commenter['comment_author_url'] ) . '" size="30" /> ' . '</p>';
  return $fields;
}
add_filter('comment_form_default_fields','modify_comment_form_fields');

これで「Name」が「名前」、「Email」が「メールアドレス」、「Website」が「ウェブサイト」になったと思います。
各文言やplaceholderは任意で変更可能です。
placeholderが不要な場合はplaceholder="ほにゃらら"ごと削除すれば良いです。

おまけ:コメントへの「返信」ボタン

コメントへの「返信する」はcomment_reply_linkをイジります。

<?php comment_reply_link( array_merge( $args, array( 'reply_text' => '返信する', 'depth' => $depth, 'max_depth' => $args['max_depth'] ) ) ); ?>

おきもち

ということで、functions.phpだけでWordPressのcomment_form();が吐き出すコメントフォームをカスタマイズしたわけですが、CSSいじればもっとオシャレになりそうです。

参考

おきもちを投稿する

* が付いている項目は必須です。