べんりワザ・WordPressの設定と運用

コメント欄を消す・閉じる方法

コメント欄をきれいに消す手順。今後の投稿と既存の投稿の両方を止める設定、テーマ側で出力を消す方法、スパムだけ止めたい場合の選択肢をまとめました。

コメントを使わないサイトでは、空のコメント欄が残っているだけで雑な印象になります。しかも放置するとスパムの投稿先になります。確実に消す手順を、影響の小さい順に並べました。

1. 今後の投稿を閉じる(設定)

  1. 設定」→「ディスカッション」を開く
  2. 新しい投稿へのコメントを許可」のチェックを外す
  3. 保存

これでこれから作る投稿はコメントが閉じた状態になります。すでに公開済みの投稿には効きません——ここが最初のつまずきポイントです。

2. 既存の投稿を一括で閉じる

  1. 「投稿」→「投稿一覧」を開く
  2. 上部の表示件数を増やして全選択(チェックボックス)
  3. 一括操作」→「編集」→「適用」
  4. コメント」を「許可しない」にして「更新」

固定ページ・カスタム投稿タイプも同じ手順で一括変更できます。件数が多い場合はページを分けて繰り返します。

3. テーマ側で出力を消す

テンプレートのcomments_template()が、コメント欄を出している呼び出しです。

<?php comments_template(); ?>   ← この行を消す(またはコメントアウト)

自作テーマなら削除でかまいません。配布テーマの場合は子テーマでsingle.phpを上書きします(テーマを更新しても消えたままになります)。

べんりワザ子テーマの作り方(最小構成)子テーマでテンプレートを上書きする方法はこちら

条件付きで出したいときは、こう書くのがきれいです。

<?php if (comments_open() || get_comments_number()) : ?>
  <?php comments_template(); ?>
<?php endif; ?>

「コメントを受け付けている、または既にコメントがある」ときだけ表示する形です。

4. コメント機能自体を無効化する(コードで)

管理画面からも消して、完全に使わない状態にするならこちらです。

// 投稿タイプからコメント機能を外す
add_action('init', function () {
  foreach (get_post_types() as $type) {
    if (post_type_supports($type, 'comments')) {
      remove_post_type_support($type, 'comments');
      remove_post_type_support($type, 'trackbacks');
    }
  }
});

// 既存のコメントを一律で閉じる
add_filter('comments_open', '__return_false', 20, 2);
add_filter('pings_open', '__return_false', 20, 2);

// 既存コメントを表示しない
add_filter('comments_array', '__return_empty_array', 10, 2);

// 管理画面のメニューからコメントを隠す
add_action('admin_menu', function () {
  remove_menu_page('edit-comments.php');
});

__return_false__return_empty_arrayは、WordPressが用意している「常にfalse/空配列を返す関数」です。自分で関数を書かずにフィルターへ渡せます。

べんりワザWordPressのフック入門(add_actionとadd_filter)add_filterの仕組み(優先度・引数)はこちら

コメントは残したい:スパムだけ止める

コメントを機能として使いたい場合、スパム対策はこの順で効きます

  1. 「コメントの手動承認を必須にする」をオン(「設定」→「ディスカッション」)——公開されるものを人が決める
  2. スパム対策プラグインを有効化する(WordPressに同梱されているものを含む)
  3. リンクを含むコメントを承認待ちにする(同じ設定画面の「コメントモデレーション」)
  4. 古い投稿のコメントを自動で閉じる——「〇日以上前の投稿のコメントフォームを自動的に閉じる」

手動承認だけでも、スパムが公開される事故はほぼ防げます。まずここをオンにするのが最短です。

トラックバック・ピンバックも止める

古い仕組みで、いまはほぼスパムの入口としてしか機能していません。

  • 「設定」→「ディスカッション」の「他のブログからの通知(ピンバック・トラックバック)を受け付ける」のチェックを外す
  • 既存投稿は上の一括編集で「ピン留め」も許可しないに変更

コメント欄が消えないときの確認順

  1. 投稿ごとの設定——編集画面の「ディスカッション」パネル(見えない場合は「⋮」→「設定」→パネルから表示)
  2. テーマの呼び出し——single.php page.php content-*.phpcomments_template()が残っていないか
  3. プラグイン——コメント関連プラグインが独自に出していないか
  4. キャッシュ——キャッシュを消して再確認

まとめ

  1. 設定→ディスカッションで今後の投稿を閉じ、一括編集で既存の投稿も閉じる
  2. 表示自体を消すならテンプレートのcomments_template()を外す(配布テーマは子テーマで)
  3. 完全に使わないならremove_post_type_supportcomments_openのフィルターで無効化
  4. コメントを使う場合は、手動承認をオンにするのがスパム対策の最短ルート

使わない機能をきれいに閉じておくと、見た目も運用の手間もすっきりします。

よくある質問

コメント欄を全部消すにはどうすればいいですか?
「設定」→「ディスカッション」で「新しい投稿へのコメントを許可」のチェックを外すと今後の投稿は閉じます。すでに公開済みの投稿は、投稿一覧の一括編集でコメントを「許可しない」に変更します。テーマ側でcomments_template()の呼び出しを消すと表示自体がなくなります。
設定を変えたのにコメント欄が残っています
既存の投稿には個別の設定が保存されているためです。投稿一覧で全選択→一括編集→コメントを「許可しない」で一括変更できます。それでも枠が残る場合はテーマがcomments_template()を無条件で呼んでいます。
固定ページにもコメント欄が出ます
固定ページもコメントを持てる仕組みです。個別の編集画面(「ディスカッション」パネル)でオフにするか、functions.phpでpage側のcomments機能を外します。
コメントは受け付けたいがスパムだけ止めたいです
「設定」→「ディスカッション」で「コメントの手動承認を必須にする」をオンにするのが最も確実です。あわせて標準のスパム対策プラグインを有効化し、リンク数による自動振り分けも設定します。