WordPressのコメントフォームを名前と本文のみにして順番を入れ替えるには

懲りずに車輪の再発明なのです。

WordPressの標準だと、コメント投稿フォームの入力項目は以下のようになります。

  1. コメント(本文)
  2. 名前
  3. メールアドレス
  4. ウェブサイト

これを、2ちゃんねるふうの、というか、ライブドアブログのコメントフォームみたいにしたいこともあると思います。

ライブドアブログのコメントフォームは、シンプルに「名前」→(評価ボタンなど)→「本文」です。なので、不要な項目の削除と、表示順の変更が必要になります。

WordPressで不要なコメントフォーム入力項目(以下、「フィールド」と呼びます)を削除する方法は、主に以下の二つです。

  1. comment_form関数の引数として指定する
  2. フィールドに対するフィルターフックに関数を登録する

1は仕組み的に分かりやすいのですが、記述量が増えがちです。不要なフィールドを削除したいだけの場合には、あまり向いてないかもしれません。

ただし、comment_form関数を一ヶ所でしか使ってなくて、フィールドの他にも引数を指定する必要があるならば、それらとまとめて書いちゃうほうが管理しやすくなると思います。

2は、フィルターというWordPress独自の仕組みを理解しないといけませんが、シンプルに記述できます。

また、フィールドの表示順の入れ替えは、フィルターでないと行えないようです。というわけで、ここではフィールドもフィルターで削除することにして、まとめて記述してみます。

/**
 * 2ちゃんねる(ライブドアブログ)ライクなコメントフォームにする
 */
function setup_comment_form_fields( $fields ) {
    // 不要な入力項目を削除
    unset( $fields['email'] );    // メールアドレス欄を削除
    unset( $fields['url'] );      // ウェブサイト欄を削除

    // コメント欄を一番下に移動
    $comment_field = $fields['comment'];    // コメント欄を退避
    unset( $fields['comment'] );            // コメント欄の配列要素を削除
    $fields['comment'] = $comment_field;    // 退避したコメント欄を追加(配列の末尾の要素になる)

    return $fields;
}
add_filter( 'comment_form_fields', 'setup_comment_form_fields' );

サポート時期がより早かったためか、ネット上で多く見るのはcomment_form_default_fieldsフィルターフックを使って不要フィールドを削除するコードですが、コメント欄の移動もまとめて記述するためにcomment_form_fieldsを使いました。

この二つの違いは、対象になるフィールドと適用タイミングです。comment_form_default_fieldsにはコメント欄が含まれませんが、comment_form_fieldsには含まれます。適用される順番は、comment_form_default_fields → comment_form_fieldsとなります。

コメントフォームをちょいするフィルター関数やプラグインが他にもあると、適用タイミングの違いにより望むような結果にならないかもしれません。その場合は、削除と移動を別の関数に分離して、フィルターフック登録時に優先度を指定すると解決できる可能性があります。

WordPressのフィルターってUNIX哲学に沿って作られた仕組みのように思うので、本来は最初から単機能で汎用性のある関数を作るべきなのかもしれませんけど、こういうふうにも書けますよ、ってことでどうかひとつ。

元ネタですが、不要フィールド削除のほうはよく分かりませんでした。フィールド移動の元ネタはたぶんこちらかな?

あと、フィルターはfunctions.phpに書くのが基本ですが、テンプレートファイル(この場合はcomments.phpとか)に書いてもちゃんと動きます。なので、あっちこっちするのがいやならコメントテンプレートの先頭にPHPブロックを作って、そこに書いちゃってもいいのかもです。

ただし、コメントテンプレートを切り換えて使っているとかで複数のcomment_form関数が存在する場合に、各コメントフォームに対して共通でフィルターを反映させたいのなら、functions.phpに書かないといけません。2ちゃんねるスタイルにしたいならそんなことはしないだろうとは思いますが、念のため。

コメントを残す

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