it-swarm.com.de

Massenumwandlung nach Post-Typ

Ich habe die WordPress-Site eines Kunden zum Aktualisieren und Verbessern erhalten. Größtes Problem - Ich muss mehr als 200 Beiträge einer bestimmten Kategorie, "Bewertungen", erstellen und sie alle in benutzerdefinierte Beiträge vom Typ "Bewertungen" umwandeln.

Außerdem muss ich einige benutzerdefinierte Felder verschieben, die diesen Posts zugewiesen wurden, damit sie nach dem Verschieben intakt bleiben.

Ich gehe davon aus, dass ich ein benutzerdefiniertes Skript schreiben muss, das mysql direct ändert. Aber bevor ich mir die Hände schmutzig mache - hat jemand Erfahrung damit? Gibt es Tipps/Fallstricke/Skripte, die ich verwenden kann?

Prost

3
Michael Watson

Sie bewegen nicht wirklich irgendetwas, sondern ändern lediglich ein einfaches Feld mit dem Namen post_type für jeden Beitrag, sodass Sie sich nicht um benutzerdefinierte Felder oder etwas anderes kümmern müssen.

Holen Sie sich einfach die Beitrags-IDs für die Beiträge, die Sie ändern möchten, und ändern Sie sie. Wenn Sie keine benutzerdefinierte SQL-Abfrage dafür erstellen möchten, können Sie dies sogar mit WordPress tun:

//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

Sie können einfach dieses Plugin verwenden:

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

3
scribu

Sie können dies auch direkt über SQL tun (wichtig, wenn Sie über eine riesige Inhaltsbibliothek verfügen). In diesem Fall möchten Sie wahrscheinlich auch die Benutzerführung aktualisieren. SQL zum Aktualisieren von post_type und 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