Bulk post type conversion

You are not really moving anything just changing a simple field named post_type for each post so you don’t have to worry about custom fields or anything else.

Simply get the post id’s for the posts you need to change and change them and if you don’t want to create a custom sql query for that you can even do that by 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);
        }

Leave a Comment