WordPressのコメントフォームを『名前→本文』に&メール/URLなしにする

このブログはWordPressを使用して構築しています。ありがたいことに極稀にコメントをくださる方がいらっしゃいます。(大体はスパムなことが多いですが...)
そこで,デフォルトのコメント欄を見てみると,メールアドレスが必須だったり,URL入力欄があったりとユーザーフレンドリーではありません。
稀にコメントしてくれる方のために,コメントしやすいように整えてみました。本当に稀にしかコメントは来ませんけど..。

目次

ビフォーアフター

ビフォー

名前やメールが必須だったり,正直コメントするのに躊躇しますね。

アフター

名前→コメントの順に変更し,名前の必須を外しました。
また,メールとURLの欄を見えなくしています。

これなら,入力欄が2つだけになって気軽にかけますね。

動作環境

私の環境を書いても参考にはならないので,今回は割愛します。

functionの変更はWordPress標準のコメントフォームを使っているテーマなら基本的に動きます。
外部コメントプラグインやテーマ独自仕様の場合は適用できないことがあります。

GUIで設定する箇所

GUI上から変更できる箇所もあります。

名前とメールの必須を外し,キャッシュ保存を非表示へ

STEP
WordPress管理画面を開く
STEP
設定からディスカッションを開く

「コメントの投稿者の名前とメールアドレスの入力を必須にする」
「コメント投稿者がCookieを保存できるようにする」のチェックを外す。

STEP
下の方にある保存をクリック

function.phpを編集してを表示を変更

バックアップを取得する(任意だけど推奨)

使用しているレンタルサーバーによって,作業が異なるため,ここでは私が使用しているConoHaWingでの手順になります。

  • ConoHaファイルマネージャーにログインし,使用しているテーマのフォルダを開く。
  • function.phpファイルを選択し,右クリックして「複製」する。
  • 複製されたファイルを選択し,右クリックして「リネーム」する。(任意)

functions.phpを編集する

WordPressの管理画面から「外観」→「テーマエディタ」→「functions.php」を選択して以下のコードを追記します。

※コードの追記に抵抗がある場合は,「Code Snippets」のプラグインに記載すると安全です。

メールとURL欄を非表示

/* メール・URL欄を非表示 */
function fukurowl_comment_remove_fields($fields) {
    unset($fields['email'], $fields['url']); // メールとURLを削除
    return $fields;
}
add_filter('comment_form_default_fields', 'fukurowl_comment_remove_fields');

名前とコメント欄の順番を変える

デフォルトだと,コメント→名前なので,名前→コメントにします。

/* ==============================
   コメントフォームの順番を「名前 → コメント」に固定(fukurowl)
   ============================== */
function fukurowl_comment_fields_order( $fields ) {
    if ( ! is_array( $fields ) ) return $fields;

    $new = [];
    if ( isset( $fields['author'] ) )  $new['author']  = $fields['author'];  // 先頭:名前
    if ( isset( $fields['comment'] ) ) $new['comment'] = $fields['comment']; // 次:本文

    // それ以外(テーマやプラグインが追加した項目)は後ろへ
    foreach ( $fields as $k => $v ) {
        if ( ! isset( $new[ $k ] ) ) $new[ $k ] = $v;
    }
    return $new;
}
add_filter( 'comment_form_fields', 'fukurowl_comment_fields_order' );

遊び心を添えて…

名前を未入力の場合,ポケモン映画の二つ名部分がランダムで入るように設定してみました。
上記の非表示と並び順変更も組み込んでいます。コピペする際はお気をつけて。

function fukurowl_comment_default_fields($fields) {
    unset($fields['email'], $fields['url']); // メール/URLを非表示

    $fields['author'] =
        '<p class="comment-form-author" data-fukurowl="1"><!-- fukurowl -->' .
        '<label for="author">お名前</label>' .
        '<input id="author" name="author" type="text" value="" size="30" maxlength="245" autocomplete="name" ' .
        'placeholder="空欄だとポケモン映画の二つ名になります。" />' .
        '</p>';

    return $fields;
}
add_filter('comment_form_default_fields', 'fukurowl_comment_default_fields');

/* 並び順を「author → comment」に固定 */
function fukurowl_comment_fields_order($fields) {
    $new = [];
    if (isset($fields['author']))  $new['author']  = $fields['author'];
    if (isset($fields['comment'])) $new['comment'] = $fields['comment'];
    foreach ($fields as $k => $v) if (!isset($new[$k])) $new[$k] = $v;
    return $new;
}
add_filter('comment_form_fields', 'fukurowl_comment_fields_order');

/* ラベル文言+ハニーポット追加(署名コメント入り) */
function fukurowl_comment_form_texts($d) {
    $d['title_reply']         = 'コメントする';
    $d['label_submit']        = 'コメントを送信';
    $d['comment_notes_before']= '<!-- powered by fukurowl -->';

    // ハニーポット(隠し入力)
    $d['comment_field'] .=
        '<p class="comment-form-hp" style="position:absolute;left:-9999px;">' .
        '<label>HP</label><input type="text" name="hp_field" value="">' .
        '</p>';
    return $d;
}
add_filter('comment_form_defaults', 'fukurowl_comment_form_texts');

/* 名前未入力なら “二つ名” をランダム付与+ハニーポットでスパム判定 */
function fukurowl_preprocess_comment($data) {
    // スパム(ボット)検出
    if (!empty($_POST['hp_field'])) {
        wp_die('Spam detected.');
    }
    // 匿名時:二つ名をランダム付与
    if (empty($data['comment_author'])) {
        $aliases = [
            '結晶塔の帝王',
            '時を超えた遭遇',
            '水の都の護神',
            '七夜の願い星',
            '裂空の訪問者',
            '波導の勇者',
            '蒼海の王子',
            '氷空の花束',
            '超克の時空',
            '幻影の覇者',
            '黒き英雄',
            '白き英雄',
            '聖剣士ケルディオ',
            '神速のゲノセクト',
            '破壊の繭',
            '光輪の超魔神',
            '機巧のマギアナ'
        ];
        $data['comment_author'] = $aliases[array_rand($aliases)];
    }
    return $data;
}
add_filter('preprocess_comment', 'fukurowl_preprocess_comment');

動作確認

ブラウザのシークレットウィンドウで記事を開いて動作確認をします。
反映が鈍い場合は 強制リロード(Winの場合 Ctrl+F5 / Macの場合 Cmd+Shift+R)で試してみます。

ええ!?裂空の訪問者からなんか来てる!

監督:湯山邦彦, 出演:松本梨香, 出演:大谷育江, 出演:うえだゆうじ, 出演:KAORI, 出演:山田ふしぎ, 出演:林原めぐみ, 出演:三木眞一郎, 出演:犬山イヌコ, 出演:山寺宏一, 出演:上原多香子, 出演:ベッキー, 出演:ジョン・カビラ, 出演:KABA.ちゃん

想定質問と回答

SWELL以外でも使えますか?

WordPress標準の comment_form() を使うテーマなら基本的に動きます。外部コメントプラグインは対象外です。

ログイン中に“名前欄”が出ません

仕様です。ゲスト表示で確認してください。

反映されない…

強制リロード&キャッシュ削除,Code Snippetsの重複無効化,ソースの順序確認を。

参考リンク

WordPressのコメント欄をカスタマイズする(モトキデザイン)
comment_form系フックで欄の並び替えやプレースホルダー付け替えを行う基本パターン。

SWELLのコメントフォームをカスタマイズする方法(mameeda)
SWELLのコメント欄をWordPress標準フックで調整する実例。不要フィールドの非表示や文言変更など。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメントはこちら

コメントする

目次