概要・まとめ
WordPressのコメント欄をカスタマイズする際に、プラグインを使用せずPHPコードを直接編集することで変更できる.
本記事では、comment_form_fieldsフックを用いて、コメントフォームのデフォルトフィールドを削除・追加し、独自のフォームを作成する方法を紹介する.
ただし,コードの変更はサイトの動作自体に影響を与える可能性があるため、必ずバックアップを取ってから行いたい.
コメントフォームをカスタマイズするPHPコード
functions.phpに,次の関数custom_comment_form()を追加することで,コメントフォームをカスタムできる.
この関数をadd_filter('comment_form_fields', 'custom_comment_form');
で,comment_form_fieldsフックに登録することで,変更内容が適用される.
function custom_comment_form($fields) {
// 現在のコメント投稿者の情報を取得
$commenter = wp_get_current_commenter();
// 名前とメールアドレスの入力が必須かどうかを取得
$req = get_option('require_name_email');
// aria属性のrequired属性を設定するための変数
$aria_req = ($req ? " aria-required='true'" : '');
// 変更しない項目を一時変数に格納
$comment_field = $fields['comment'];
$cookies_field = $fields['cookies'];
// 順番入れ替えのため一旦フィールドを削除
unset( $fields['comment']);
unset( $fields['url']);
unset( $fields['cookies']);
// 名前フィールドを作成
$fields['author'] = '<p class="comment-form-author">' .
'<label for="author">' . __( 'Name', 'domainreference' ) . '</label> ' .
($req ? '<span class="required">*</span>' : '') .
'<input id="author" 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">' . __( 'Email', 'domainreference' ) . '</label> ' .
($req ? '<span class="required">*</span>' : '') .
'<input id="email" name="email" type="text" value="' . esc_attr($commenter['comment_author_email']) . '" size="30"' . $aria_req . ' /></p>';
// コメントフィールドとクッキーフィールドを戻す
$fields['comment'] = $comment_field;
$fields['cookies'] = $cookies_field;
// フィールドを返して、コメントフォームをカスタマイズする
return $fields;
}
add_filter('comment_form_fields', 'custorm_comment_form');
出力
- 変更前
- 変更後(上記コード適用時):名前やメールが先に来ている
コード解説
コードの流れとしては,「設定取得⇒後回しにしたい項目を一旦削除⇒先に登録したい項目を順に登録⇒フィルターフックに関数登録」となる.
- 設定取得
- wp_get_current_commenter(): 現在のコメント投稿者の情報を取得
- get_option(‘require_name_email’): 名前とメールアドレスの入力が必須かどうかを取得
- $aria_req: 必須入力項目(aria属性のrequired属性)を設定するための変数
- 変更しない項目を一時変数に保存
$comment_field = $fields['comment'];
$cookies_field = $fields['cookies'];
- unset(): 順番入れ替えのため,一旦フィールドを削除
- 名前フィールドとメールアドレスフィールドの作成
- esc_attr(): XSS攻撃を防ぐために、ユーザー入力の文字列をサニタイジングする
- 変更しない項目を再代入
$fields['comment'] = $comment_field;
$fields['cookies'] = $cookies_field;
- add_filter(): 作成したcustom_comment_form()関数をcomment_form_fieldsフックに登録
注意事項
上記のコードは一例であり、実際のサイトに適用する際には、テーマの構造やカスタマイズの目的に合わせて適宜修正する必要がある.
コードの変更は、サイトの動作自体に影響を与える可能性があるため、必ずバックアップを取ってから行ってください.