web-dev-qa-db-fra.com

Supprimer toutes les publications d'un type de publication personnalisé, de manière efficace

Je recherche un moyen sûr et rapide de supprimer tous les messages d'un type de message personnalisé. Utiliser get_posts() et wp_delete_post() pour chaque message renvoyé ne fonctionne pas; ce n'est pas assez rapide en raison de la quantité de requêtes de base de données impliquées (erreur de dépassement de délai).

De préférence, je recherche une seule requête de base de données à exécuter qui supprime toutes les publications qui sont d'un type de publication personnalisé. Des pensées?

6
Marcus McLean

Vous pouvez supprimer tous les messages via $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)

ou utilisez cette requête, remplacez-la par {{votre CPT}} par votre type de message personnalisé

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

Vous pouvez supprimer toutes les publications d'un type de publication personnalisé selon différentes méthodes, mais je vais vous montrer ici comment procéder sans utiliser la requête SQL. Ici, par exemple, notre type de message est product

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

Voir le tutoriel complet Référence ici