web-dev-qa-db-ja.com

カスタム投稿タイプの投稿をすべて効率的に削除する

1つのカスタム投稿タイプの投稿をすべて削除するための安全で迅速な方法を探しています。返された各投稿にget_posts()wp_delete_post()を使用しても機能しません。膨大な量のデータベースクエリが含まれるため(タイムアウトエラー)、十分な速度ではありません。

できれば、カスタム投稿タイプのすべての投稿を削除する単一のデータベースクエリを実行します。何かご意見は?

6
Marcus McLean

$wpdb経由ですべての投稿を削除できます

DELETE FROM wp_posts WHERE post_type='post_type';
DELETE FROM wp_postmeta WHERE post_id NOT IN (SELECT id FROM wp_posts);
DELETE FROM wp_term_relationships WHERE object_id NOT IN (SELECT id FROM wp_posts)

または、このクエリを使用して、カスタム投稿タイプの{{your CPT}}に置き換えます。

DELETE a,b,c
    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)
    WHERE a.post_type = '{{your CPT}}';
11
Parth Sutariya

カスタム投稿タイプの投稿はすべてさまざまな方法で削除できますが、ここではSQLクエリを使用せずにこれを行う方法を説明します。ここでは、例えば、私たちの投稿タイプは product です。

$allposts= get_posts( array('post_type'=>'product','numberposts'=>-1) );
foreach ($allposts as $eachpost) {
wp_delete_post( $eachpost->ID, true );
}

完全なチュートリアルを参照するここでの参照