大量の投稿のコメントとトラックバックをまとめて無効にしたい

投稿数が多すぎて管理画面の一括編集では現実的に対応できない場合、phpMyAdminやターミナルからSQLのUPDATE文を1回実行するだけで、全投稿のコメントとトラックバックの受け付けをまとめて無効にできます。

なぜプラグインではなくDBを直接操作するのか

「Disable Comments」などの定番プラグインは便利ですが、無効化すると設定が元の状態に戻ってしまいます。恒久的に設定を反映させたい場合、頼らなくて済むならプラグインへの依存は避けたいところです。投稿のcomment_statusping_statusを直接データベースで書き換えれば、プラグインなしで恒久的に反映されます。

実行前に必ずバックアップを取る

直接SQLを実行する操作には、元に戻す機能もありません。必ず事前にデータベースのバックアップを取ってから作業してください。

可能であれば、本番環境でいきなり実行せず、ステージング環境などで一度試してから行うと安心です。

SQL文で一括変更する手順(phpMyAdminの場合)

  1. phpMyAdminにログインし、対象のWordPressデータベースを選択します。
  2. 上部メニューの「SQL」タブを開きます。
  3. 対象の投稿件数を確認するため、次のSQL文を実行します:SELECT COUNT(*) FROM wp_posts WHERE post_type = 'post';
  4. 表示された件数を控えておきます。
  5. 続けて、次のSQL文を入力して実行します:UPDATE wp_posts SET comment_status = 'closed', ping_status = 'closed' WHERE post_type = 'post';
  6. テーブルプレフィックスがwp_でない場合は、phpMyAdminのテーブル一覧からpostsを含むテーブル名(例:abc_posts)を探し、実際のプレフィックスを確認して読み替えてください。
  7. 実行後に表示される「◯行が変更されました」という件数が、3で確認した件数と一致しているかを確認します。

phpMyAdminに限らず、SSH接続できる環境であればmysqlコマンドから同じSQL文を実行しても、同様の結果になります。

条件を変えて対象を絞り込む

対象範囲や変更内容を変えたい場合は、WHERE句やSET句を以下のように調整してください。

  • 固定ページも対象にしたい場合:WHERE post_type = 'post'WHERE post_type IN ('post', 'page') に変更します。
  • カスタム投稿タイプも対象にしたい場合:post_type IN ('post', 'my_custom_type') のように投稿タイプのスラッグを追加します。
  • 特定のステータスのみに絞りたい場合:AND post_status = 'publish' のように条件を追加します。
  • 特定の投稿だけを対象にしたい場合:WHERE ID = 1213 のように投稿IDを指定します。
  • コメントかpingのどちらか一方だけ変更したい場合:SET句を該当する方だけにします(例:SET comment_status = 'closed')。

まとめ

  • 投稿数が多いと、管理画面の一括編集では現実的に対応しきれない。
  • プラグインは無効化すると設定が元に戻ってしまうため、恒久的に反映させたい場合はDBを直接操作する方が確実。
  • SQL実行前には、必ずバックアップを取る。
  • UPDATE文1本で、コメントとpingの受け付け状態をまとめて変更できる。
  • 固定ページやカスタム投稿タイプにも、WHERE句の条件を変えるだけで応用できる。

この記事の内容はWordPress 7.0.2で確認しています。