このページではワードプレスの記事を一括削除する方法について書いています。
ワードプレスの記事を一括削除する方法は3つ
WordPressの記事をまとめて一括削除する方法は以下の3つになります。
①投稿一覧ページから一括削除
この方法は既にご存知だと思いますが、投稿一覧ページから一括チェックを行なえば複数の記事をまとめて削除する事が可能です。
デフォルトの表示件数が20件になっていますが”表示オプション”から表示件数を増やす事が可能です。
私の経験で言うと250件までは一括で削除する事が可能です。
300件以上で一括削除をするとエラーになって削除できませんでしたので、250件~300件くらいが限度ではないかと思います。
1,000記事くらいなら250件を4回やればOKなのでこの方法で十分かと思います。
②プラグインを使って一括削除
プラグインを使って記事を一括削除する事も可能です。
例えば「WP Bulk Delete」や「Bulk Delete」が有名ですが、この辺のプラグインを使えば”〇日前の記事を全て削除”のような形で削除が可能になります。
非常に便利ではありますが、1,000記事以上を一括削除するには少々不向きです。
何故かと言いますと、実行を開始してから5分程度でタイムアウトしてしまいます。
タイムアウトしたらリロードするか、もう一度設定画面から実行をクリックしなければいけません。
私の経験から言うと5分で削除される記事数は多くても1,000記事前後、少ない場合は500記事程度です。
ですのでプラグインを使って数千~数万の記事を一括で削除するとなるとリロードしたり手間が掛かりますし、サーバーへの負荷も心配です。
数百記事程度を日付指定して一括削除をしたいという場合はプラグインを使う方法で問題無いと思います。
③データベースから直接記事を一括削除
データベース(MySQL)から直接記事を一括削除する方法です。
数千~数万の記事を一括削除するならこの方法が一番早く簡単です。
私は自動投稿で1サイト1日6,000件を超える記事を投稿するので、この方法で記事を一括削除しています。
慣れれば1分で数千~数万の記事を一括削除する事が出来ます。
これからこのやり方を説明していきます。
データベース(MySQL)から記事を一括削除する手順
wp_postsの削除
まず、ご使用のサーバーのデータベースにログインして下さい。(phpmyadmin)
データベースにログインしたら画面上部メニューの「データベース」をクリックします。

データベースを開くと作成済みのデータベースが一覧で並んでいるので一括削除したいサイトのデータが保存されているデータベース名を開きます。

次に上部メニュー「SQL」を開きます。

SQLを開くと「データベース 〇〇 上でクエリを実行する」と書いた入力ボックスがあると思いますが、ここに記事一括削除のSQL文を入力し実行します。

入力が必要なSQL文のベースは上記になりますが少し説明します。
まず「wp_posts」の部分ですが、接頭辞を付けている場合は、一括削除したいサイトの接頭辞に変更する必要があります。
例えば接頭辞が「test」の場合は「wp_testposts」になります。
次に日付ですが、「2022-02-14 00:00:00」にした場合は、2022年2月14日0時より前の記事を全て削除するという意味になります。
最後に「AND post_type = ‘post’;」の部分ですが、これは記事のみを削除という意味になります。
どういう事かと言いますと、テーブル「wp_posts」には、アップロードした画像やメニュー(ワードプレス外観から設定可能)も含まれるのです。
「AND post_type = ‘post’;」を指定しないと記事だけでなく、メディアに保存してある画像(ファビコンやサイト全体で設定しているアイキャッチ画像も)や設定したメニューが全部消えてしまいます。
私は最初これを知らなくて画像やメニューが全部消えてしまいました。(バックアップを取ってあったので大事には至りませんでしたが)
ネット上で「SQL文を使った一括削除」のやり方を調べると”DELETE FROM wp_posts WHERE `post_date` < ‘2022-02-14 00:00:00’”この部分しか書かれていなかったんですよね。
ですので自力でどうにか”AND post_type = ‘post’;”の部分を追記して記事のみを削除する事に成功しました。(postsテーブルをよ~く見たらpost_typeという項目があったのでこれで分かりました)
参考までに記事のpost_typeは「post」ですが、画像のpost_typeは「attachment」、メニューのpost_typeは「nav_menu_item」です。
画像やメニューも一緒に消してしまいたいという方は「AND post_type = ‘post’;」を付けなくて大丈夫です。
入力が終わったら右下の「実行」をクリックして下さい。(一発で削除されるので注意して下さい)
この時点で記事が削除されている筈なので、ワードプレスの投稿一覧から確認してみて下さい。
wp_postmetaの削除
次にwp_postmetaの削除を行ないます。
wp_postsを削除した時点で記事自体は消えていますが、メタ情報が残った状態になっています。
要するにゴミが残っている状態です。
wp_postmetaを削除する方法は2種類あります。
一つはMySQLでSQL文を使って一括削除する方法。
もう一つはプラグインを使って一括削除する方法。
両方説明していきますが、おススメはプラグインを使う方法です。
①SQL文を使ってwp_postmetaを削除する方法
wp_postsの削除が終わったら、該当のwp_postsテーブルを開きます。
開くと、「post_id」と書いた項目があると思いますが、その中の一番若い数字をコピー(メモ)して下さい。(多分デフォルトで若い順になっていると思いますが、念のためソートして一番若いIDを見付けて下さい)
コピー(メモ)したら下記の123456の部分をそのID番号に書き換えて先ほどのwp_postsの時と同様にSQL文を実行して下さい。(wp_postmetaの部分は接頭辞がある場合は変更が必要です)
これでメタ情報が一括削除されます。
プラグイン(WP-Optimize)を使ってwp_postmetaを削除する方法
はっき言ってこっちの方が簡単です。
まずWP-Optimizeをインストールして下さい。(ワードプレスプラグイン画面からインストールできます)
インストールしたらWP-Optimize設定画面を開きます。
設定画面トップの下の方に「投稿メタデータのクリーン」という項目があると思いますが、これがwp_postmetaになります。
下の画像は「孤立した投稿メタデータはデータベースに存在しません」と表示されていますが、wp_postsから記事を削除した直後はここに”〇〇件の孤立したデータが~”のような表示になっています。

「投稿メタデータのクリーン」にある「最適化を実行する」をクリックすれば数秒で不要なメタ情報が削除されます。
wp_postsから一番若いID番号を探してSQL文を実行するよりもWP-Optimizeを使った方が簡単ですのでこちらをお勧めします。
ワードプレスの記事を大量一括削除する方法まとめ
この記事のタイトルを「ワードプレスの記事のみを大量一括削除する方法」にしましたが、「記事のみ」という表現を使ったのはSQL文と一括削除を行なうと記事と一緒に画像などが消えてしまう可能性があったからです。
SQL文で一括削除する方法を書いているサイトを幾つか見付けましたが、いずれもpost_typeについては書かれていませんでした。
ですので今回この記事を書きました。(これが無ければわざわざ書かなかったと思います)
正直なところ、数千~数万の記事を一括削除する人はかなり少数派だとは思いますが、私と同じように自動投稿などで大量に記事を生成・削除される方もいると思いますので参考にして下さい。
お勧めは、SQL文でwp_postsの削除→WP-Optimizeでwp_postmetaの削除です。
念の為、初めて行う場合はバックアップを取ってから行って下さいね。
それでは最後までご覧頂きありがとうございました。
特定の記事や画像などを一括削除から除外するSQL文
〇月〇日以前の記事・画像・メニューなど全てを削除するSQL文
〇月〇日以前の記事・画像・メニューなど全てを削除するSQL文(除外あり①)
「nav_menu_item(メニュー)」を除く記事・画像・リビジョンなど全て削除されます。
「nav_menu_item」を「attachment」にすると画像以外の全てが一括削除されます。
「nav_menu_item」を「post」にすると投稿以外の全てが一括削除されます。
〇月〇日以前の記事・画像・メニューなど全てを削除するSQL文(除外あり②)
「ID」11111、22222、33333、44444、を除く記事・画像・メニュー・リビジョンなど全て削除されます。
本ページ上部で画像を削除しないようにpost_typeを”post”のみにするSQL文を紹介しましたが、投稿に紐づいた画像がメディアに残ってしまうので、各記事毎にアイキャッチ画像を設定していて、投稿と一緒に紐づいた画像も削除したい場合は、このSQL文を使って、ファビコンや投稿と紐づいていない画像を除外して下さい。
画像のIDはメディアライブラリの該当画像の項目にある「編集」にカーソルを当てるとpost=〇〇と表示されますのでその番号を指定します。
特定の記事を除外したい場合は画像と同様に投稿一覧の該当記事の項目にある「編集」にカーソルを当てるとpost=〇〇と表示されますのでその番号を指定します。
〇月〇日以前の記事・画像・メニューなど全てを削除するSQL文(除外あり①+②)
除外ありの①と②を組み合わせたものになります。
2022年2月14日0時より前の「メニュー+記事(画像)ID 11111、22222、33333、44444を除いた」記事・画像・リビジョンなど全てを削除するという意味になります。
〇月〇日以前の記事のみを削除するSQL文