web-dev-qa-db-ja.com

バルクポスト型変換

私は更新と改善のためにクライアントのワードプレスサイトを与えられました。最大の問題 - 私は特定のカテゴリの「レビュー」という約200以上の投稿を受け取り、それらをすべてカスタム投稿タイプの「レビュー」に変換する必要があります。

これに加えて、これらの投稿に起因すると思われるカスタムフィールドをいくつか移動する必要があります。移動した後もそのまま残ります。

私は直接MySQLを変更するカスタムスクリプトを書く必要があるでしょう。しかし、私が手を汚す前に、これをやったことのある人はいますか?私が使うことができるそこに何かヒント/ gotchas /スクリプト?

乾杯

3
Michael Watson

投稿ごとにpost_typeという名前の単純なフィールドを変更するだけで、実際には何も動かさないので、カスタムフィールドなどについて心配する必要はありません。

変更する必要がある投稿の投稿IDを取得して変更するだけです。そのためにカスタムSQLクエリを作成したくない場合は、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

あなただけのこのプラグインを使用することができます:

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

3
scribu

SQLを通じて直接これを行うこともできます(巨大なコンテンツライブラリがある場合は重要です)。そうすることで、あなたはおそらくguidも更新したいでしょう。 post_typeとguidの両方を更新するためのSQL:

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