web-dev-qa-db-fra.com

Conversion de type de poste en vrac

On m'a donné le site wordpress d'un client pour mettre à jour et améliorer. Le plus gros problème - Je dois prendre environ 200 messages ou plus d'une catégorie spécifique, des "avis", et les convertir en un type de commentaire personnalisé.

En plus de cela, je dois déplacer quelques champs personnalisés qui ont été attribués à ces publications, afin qu'ils restent intacts une fois déplacés.

Je m'attends à devoir écrire un script personnalisé qui changera le mysql direct. Mais avant de me salir les mains, est-ce que quelqu'un a déjà l'expérience de le faire? Des astuces/pièges/scripts que je peux utiliser?

À votre santé

3
Michael Watson

Vous ne déplacez rien, vous ne changez qu'un simple champ nommé post_type pour chaque message, vous n'avez donc pas à vous soucier des champs personnalisés ou de tout autre élément.

Obtenez simplement les identifiants des publications que vous devez modifier et si vous ne souhaitez pas créer de requête SQL personnalisée, vous pouvez même le faire via WordPress:

//first get the post_ids as an array
/*the SQL way 
    global $wpdb;
    $querystr = "
        SELECT * FROM $wpdb->posts
        LEFT JOIN $wpdb->term_relationships ON($wpdb->posts.ID = $wpdb->term_relationships.object_id)
        LEFT JOIN $wpdb->term_taxonomy ON($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)
        LEFT JOIN $wpdb->terms ON($wpdb->terms.term_id = $wpdb->term_taxonomy.term_id)
        WHERE $wpdb->terms.name = 'CAGETORY_NAME'
        AND $wpdb->term_taxonomy.taxonomy = 'category'
        AND $wpdb->posts.post_status = 'publish'
        AND $wpdb->posts.post_type = 'post'
    ";

    $post_ids = $wpdb->get_results($querystr); 
*/
//
//
//
/* the WordPress Way */
        $post_ids = get_posts(array('post_per_page' => -1, 'cat' => category_id));
    //then update each post
        foreach($post_ids as $p){
            $po = array();
            $po = get_post($p->ID,'ARRAY_A');
            $po['post_type'] = "NEW_TYPE_NAME";
            wp_update_post($po);
        }
4
Bainternet

Vous pouvez simplement utiliser ce plugin:

http://wordpress.org/extend/plugins/convert-post-types/

3
scribu

Vous pouvez également le faire directement via SQL (important si vous avez une énorme bibliothèque de contenu). Ce faisant, vous souhaiterez probablement également mettre à jour le GUID. SQL pour la mise à jour de post_type et de guid:

UPDATE wp_posts p
LEFT JOIN wp_postmeta pm ON p.ID=pm.post_id
SET
    p.post_type='NEW_POST_TYPE',
    p.guid=REPLACE(p.guid, 'OLD_POST_TYPE', 'NEW_POST_TYPE')
WHERE
    p.post_type='OLD_POST_TYPE'
1
rinogo