質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.87%

  • WordPress

    6401questions

    WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

  • MySQL

    5337questions

    MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

WordPressのデータベースから直接データを削除する

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 406

win4834

score 3

ワードプレスから数万件の投稿を一気に削除したいです。
Bulk Deleteというプラグインがあって
やりたいことはまさにこのプラグインなのですが
あっという間に500エラーとなり、数万件できそうもありません。

他にWP-DBManagerというプラグインも試したのですが
こちらは爆速ですが必要なカテゴリの投稿が残せず
投稿全部が削除されてしまいます。

WP-DBManagerで投稿のカテゴリ別に削除できるような
プラグインやプログラムはできないものでしょうか?

データベースのゴミファイル削除プログラムなら発見できたのですが。
https://ka2.org/remove-the-garbage-data-of-the-wordpress-database/

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+4

以下のコードをテーマのfunctions.phpに書いて管理画面にアクセスするとプラグインと同じような処理をしますがposts_per_pageに件数を指定すればそれ以上は処理しないので、何度かブラウザをリロードすればいずれは終わるでしょう。

function my_delete_post() {
$args = array(
    'posts_per_page' => -1, // -1で全記事 1000件毎程度ならいけるかも?
    'category' => array( '-1', '-2' ,'-3' ), // "削除したくない"記事のカテゴリーを-を付けて指定
    'post_type' => 'post',
    'post_status' => 'publish'
);
$post_ids = wp_list_pluck( get_posts( $args ), 'ID' );
    foreach ( $post_ids as $post_id ) {
        wp_delete_post( $post_id, true );
    }
}
add_action( 'admin_init', 'my_delete_post' );

または削除したい記事のカテゴリーIDをterm_id =に指定すれば即消えます。データベースを直接叩くので一番確実かと。

function my_delete_post() {
global $wpdb;
    $wpdb->get_results( "
        delete a,b,c,d
        FROM wp_posts a
        LEFT JOIN wp_term_relationships b ON ( a.ID = b.object_id )
        LEFT JOIN wp_postmeta c ON ( a.ID = c.post_id )
        LEFT JOIN wp_term_taxonomy d ON ( d.term_taxonomy_id = b.term_taxonomy_id )
        LEFT JOIN wp_terms e ON ( e.term_id = d.term_id )
        WHERE e.term_id =2 or e.term_id =3 or e.term_id =4
" );
}
add_action( 'admin_init', 'my_delete_post' );

参考
https://wpguru.co.uk/2013/02/how-to-bulk-delete-posts-in-wordpress-with-mysql/

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/12/26 13:58

    超完璧です!

    上の分はそのままコピーでできました。
    すぐに反映されませんでしたが数分後に削除を確認できました。

    下の分は私のワードプレスのデータベースを見ると
    wp_の部分が他の文字に置き換わっていたので
    その部分を修正して実行したところ動作しました。

    ありがとうございました。

    キャンセル

+1

地道に少しずつdeleteするしかないように思えます。

mysqlは5.6で改善がみられたものの、そもそもdelete処理がpostgresqlほど速くないのでpostgresqlに移行するとかはいいかもしれません。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.87%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • WordPress

    6401questions

    WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

  • MySQL

    5337questions

    MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。