comment_form()

comment_form()
目次

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ログイン中の表示
formatxhtml または 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 パラメータ

formathtml5 を指定すると、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で簡単にデザイン調整が可能
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

初めてホームページを作成したのは1996年。
2000年よりフリーランスで主に中小企業、学校、各種公的団体、個人事業主のWordPressを活用したホームページ制作を行っています。WordPressテーマはそれぞれのクライアントに合わせて作成しています。
WordPressを活用したサイト運営のための情報発信をしていきます。

目次