web-dev-qa-db-fra.com

Comment vider wordpress custom post Table de base de données

J'ai environ 2000 messages personnalisés. Et 7 pages régulières wp. Je veux supprimer tous ces messages personnalisés sans affecter les pages. Je pensais que le moyen le plus simple serait de vider la table des messages personnalisés, mais je ne sais pas comment le faire. Je connais bien les opérations de base de données, mais je ne connais pas le schéma des publications wp, je ne sais donc pas où se trouvent ces publications personnalisées. Cela ne me dérange pas d'utiliser un plugin pour le faire.

Inshort: - Je veux juste supprimer toutes les publications personnalisées et leurs données.

4
tinyhook

J'ai utilisé un modèle de page personnalisé pour supprimer tous les articles de la base de données wordpress. Chaque fois que je voudrais aller à cette page, il supprimer 300 messages. Le code pour le modèle de page est:

<?php
// Get 300 custom post types pages, set the number higher if is not slow.

$mycustomposts = get_posts( array( 'post_type' => 'movies', 'numberposts' => 300));
    echo '<pre>';
    print_r($mycustomposts);
    echo '</pre>';
   foreach( $mycustomposts as $mypost ) {
     // Delete's each post.
    wp_delete_post( $mypost->ID, true);
    // Set to False if you want to send them to Trash.
   }
   echo '<h1 style=:"color:red;"> DELETED! DELETED! DELETED! DELETED! </h1>';



// 300 custom post types are being deleted everytime you refresh the page.?>
5
tinyhook

Je sais que c’est une vieille question, mais étant donné que c’est ce qui a été soulevé en premier lors de la recherche sur Google de ce problème, j’ai pensé qu’il devrait y avoir une solution.

Pour supprimer toutes les publications d'un type donné, accédez à la base de données de votre site à l'aide de phpMyAdmin, la ligne de commande , ou celui que vous préfériez. Puis exécutez les commandes suivantes:

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);

La première ligne supprime tous les articles avec ce post_type de wp_posts.

La seconde supprime ensuite les métadonnées de publication de wp_postmeta qui ne sont plus liées à une publication.

La troisième ligne supprime les tags ou catégories de wp_term_relationships qui étaient liés à ce type de publication. Cette ligne doit être omise si vous envisagez de créer plusieurs publications du post_type donné à l'avenir.

3
jlengstorf

Cela supprimera la publication, les métadonnées de la publication et tous les termes utilisés dans la publication. Il ne supprimera pas les termes eux-mêmes. Le script PHP est similaire à celui-ci mais plus lent.

Remplacez {{votre CPT}} par l'identifiant de votre type de message personnalisé et insérez-le dans votre base de données sous phpmyadmin ou mysql.

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

Malheureusement, il ne supprimera pas les entrées multimédia associées. Il serait dangereux de le faire en utilisant SQL ou même PHP, car vous pourriez supprimer des entrées de média liées à plusieurs publications.

Bonne chance.

1
IanEdington

Les publications, les pages et les types de publication personnalisés sont tous stockés dans la même table (généralement wp_posts sauf si vous définissez un préfixe personnalisé).

Vous ne pouvez pas simplement vider la table sans supprimer également vos pages. Le moyen le plus simple de le faire (sans nuire à votre base de données) est de les supprimer manuellement via l’administrateur de WordPress.

Oui, ça va prendre du temps. Mais rappelez-vous, les articles (et les pages et les articles personnalisés) aussi stockent les données dans la table wp_postmeta. Si vous les supprimez via l'interface utilisateur d'administration, WordPress effacera également la table méta. Vous éviterez beaucoup de problèmes si vous vous contentez d'utiliser l'interface utilisateur plutôt que d'essayer de le faire manuellement via la base de données.

1
EAMann