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

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

新規登録して質問してみよう
ただいま回答率
85.50%
MySQL

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

WordPress

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

Q&A

解決済

2回答

3722閲覧

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

win4834

総合スコア16

MySQL

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

WordPress

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

0グッド

0クリップ

投稿2017/12/24 07:11

編集2017/12/24 07:49

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

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

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

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

以下のコードをテーマの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/24 07:43

編集2017/12/24 15:12
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

win4834

2017/12/26 04:58

超完璧です! 上の分はそのままコピーでできました。 すぐに反映されませんでしたが数分後に削除を確認できました。 下の分は私のワードプレスのデータベースを見ると wp_の部分が他の文字に置き換わっていたので その部分を修正して実行したところ動作しました。 ありがとうございました。
guest

0

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

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

投稿2017/12/24 07:46

imamoto_browser

総合スコア1161

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問