web-dev-qa-db-de.com

Löschen Sie alle Beiträge eines benutzerdefinierten Beitragstyps auf effiziente Weise

Ich suche nach einer sicheren und schnellen Möglichkeit, alle Posts eines benutzerdefinierten Post-Typs zu löschen. Die Verwendung von get_posts() und wp_delete_post() für jeden zurückgegebenen Beitrag funktioniert nicht. Es ist nicht schnell genug, da es sich um eine Vielzahl von Datenbankabfragen handelt (Timeout-Fehler).

Am besten suche ich nach einer einzelnen Datenbankabfrage, mit der alle Beiträge eines benutzerdefinierten Beitragstyps gelöscht werden. Irgendwelche Gedanken?

6
Marcus McLean

Sie können alle Beiträge über $wpdb löschen.

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)

oder verwenden Sie diese Abfrage, und ersetzen Sie sie durch {{Ihr CPT}} mit Ihrem benutzerdefinierten Beitragstyp

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

Sie können alle Posts eines benutzerdefinierten Post-Typs auf verschiedene Arten löschen. Hier zeige ich Ihnen jedoch, wie dies ohne SQL-Abfrage möglich ist. Hier ist zum Beispiel unser Beitragstyp product

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

Siehe vollständige Tutorial-Referenz hier