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?
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}}';
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 );
}