
comment_form()の用途
comment_form()
は、WordPressのコメントフォームを一括で出力する関数です。
これ一つで、コメントの入力欄、送信ボタン、タイトル、ログインメッセージなどを全て自動生成してくれます。
WordPress 3.0 以降、古い comments.php
テンプレートでHTMLを手作業で書く必要がほぼなくなり、多くのテーマで標準的に利用されています。
comment_form()の基本的な使い方
最もシンプルな書き方はこれだけです。
<?php comment_form(); ?>
この1行で、以下がすべて出力されます。
- フォームタイトル(例:「コメントをどうぞ」)
- コメント本文のテキストエリア
- 名前・メールアドレス・ウェブサイトの入力欄(未ログイン時)
- ログイン中は「◯◯さんとしてログイン中」のメッセージ
- 送信ボタン
- 返信時は「◯◯さんへの返信」のタイトル
- キャンセルリンク
これにより、ユーザーに分かりやすいコメントフォームを簡単に設置できます。
comment_form()のパラメータ
comment_form()
は配列形式の引数 $args
を指定できます。
comment_form( array $args = array(), int|WP_Post $post_id = null );
主なオプションを表にまとめます。
オプション名 | 説明 |
---|---|
title_reply | フォームのタイトル(デフォルト:「Leave a Reply」) |
title_reply_to | 返信フォームのタイトル(「Leave a Reply to %s」) |
cancel_reply_link | 返信キャンセルリンクのテキスト |
label_submit | 送信ボタンのテキスト |
comment_notes_before | フォーム上部の説明文(HTML可) |
comment_notes_after | フォーム下部の説明文(HTML可) |
fields | 名前・メール・URL入力欄のHTML配列 |
comment_field | コメント本文入力欄のHTML |
must_log_in | ログインが必要なときの表示 |
logged_in_as | ログイン中の表示 |
format | xhtml または html5 を指定(デフォルトはxhtml ) |
comment_form()の使用例
例1: 日本語でタイトルや送信ボタンを設定
<?php
comment_form([
'title_reply' => 'コメントを投稿する',
'title_reply_to' => '%s さんに返信',
'cancel_reply_link' => '返信をキャンセル',
'label_submit' => '送信',
]);
?>
この設定で
- 通常:「コメントを投稿する」
- 返信:「山田太郎さんに返信」
- キャンセルリンク:「返信をキャンセル」
- ボタン:「送信」
と日本語で表示されます。
例2: コメント欄の上に注意書きを追加
<?php
comment_form([
'comment_notes_before' => '<p class="comment-notes">メールアドレスは公開されません。</p>',
]);
?>
ログイン表示
ユーザーがログインしている場合、次のようなメッセージが表示されます。
Logged in as Katsuyuki. Log out?
この部分のテキストは logged_in_as
で変更できます。
例:
<?php
comment_form([
'logged_in_as' => '<p class="logged-in-as">ログイン中: %s</p>',
]);
?>
%s
は「ログアウトリンク付きユーザー名」に置き換わります。
fields オプション
fields
は名前、メール、ウェブサイト入力欄のHTMLを指定する配列です。
デフォルト:
$fields = array(
'author' => '<p class="comment-form-author"><label for="author">名前</label><input id="author" name="author" type="text" value="" /></p>',
'email' => '<p class="comment-form-email"><label for="email">メールアドレス</label><input id="email" name="email" type="text" value="" /></p>',
'url' => '<p class="comment-form-url"><label for="url">ウェブサイト</label><input id="url" name="url" type="text" value="" /></p>',
);
たとえば名前欄だけにプレースホルダを追加する場合:
<?php
comment_form([
'fields' => [
'author' => '<p class="comment-form-author"><input id="author" name="author" type="text" placeholder="お名前" /></p>',
'email' => '',
'url' => '',
],
]);
?>
comment_field
コメント本文のテキストエリアは comment_field
オプションで変更します。
例:
<?php
comment_form([
'comment_field' => '<p class="comment-form-comment"><textarea id="comment" name="comment" placeholder="コメントを入力してください..."></textarea></p>',
]);
?>
must_log_in と logged_in_as
コメント投稿にログインが必要な場合、must_log_in
の内容が表示されます。
デフォルト:
You must be logged in to post a comment.
カスタマイズ例:
<?php
comment_form([
'must_log_in' => '<p>コメントするにはログインが必要です。</p>',
]);
?>
format パラメータ
format
に html5
を指定すると、HTML5対応のマークアップになります。
例:
<?php
comment_form([
'format' => 'html5',
]);
?>
これにより、<input type="email">
などHTML5仕様が使われます。
CSSクラス
comment_form()
が生成するHTMLには、次のIDやクラスがつきます。
- フォーム全体:
<form id="commentform">
- テキストエリア:
<textarea id="comment">
- 名前入力:
<input id="author">
- メール入力:
<input id="email">
- ウェブサイト:
<input id="url">
- ボタン:
<input name="submit" type="submit">
CSSでデザイン調整が簡単です。
テーマでの位置
comment_form()
は通常 comments.php
内で wp_list_comments()
の下に配置されます。
<?php
if (comments_open()) {
comment_form();
}
?>
これによりコメント一覧とフォームが並びます。
comment_form()のよくある質問
- 古いテーマでは手書きHTMLを使っているが置き換えられる?
-
ほとんどの場合、
comment_form()
で置き換え可能です。ただし特殊なレイアウトはカスタマイズが必要です。 - 入力欄を減らしたい
-
fields
パラメータで不要な欄を空文字にすれば非表示になります。 - 送信後の処理は?
-
フォーム送信後は
wp-comments-post.php
にデータが送られ、データベースに保存されます。コメントモデレーション設定に応じて公開・保留されます。
comment_form()のまとめ
comment_form() のポイント
- コメントフォームを一括で生成する便利な関数
- テキストやHTMLを配列引数で自由にカスタマイズ可能
comment_form_title()
や手書きHTMLは不要- HTML5対応もできる
- CSSで簡単にデザイン調整が可能