Bulk post type conversion

时间:2011-08-17 作者:Michael Watson

我已经得到了一个客户的wordpress站点,可以更新;改进最大的问题是,我需要接受200多个特定类别的帖子“评论”,并将它们全部转换为自定义的帖子类型“评论”。

最重要的是,我需要移动一些属于这些帖子的自定义字段,以便它们在移动后保持不变。

我希望我必须编写一个自定义脚本来更改mysql direct。但是在我把手弄脏之前,有没有人有这样做的经验?有什么提示/窍门/脚本我可以使用吗?

干杯

3 个回复
最合适的回答,由SO网友:Bainternet 整理而成

您实际上并没有移动任何内容,只是更改了一个名为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);
        }

SO网友:scribu
SO网友:rinogo

您也可以直接通过SQL实现这一点(如果您有一个巨大的内容库,这一点很重要)。在这样做时,您可能还想更新guid。用于更新post\\u类型和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\'

结束

相关推荐

Bulk User Deletion

我创建了一个WordPress 3.0站点,启用了多站点,并安装了BuddyPress插件(每个插件的最新可用版本)。最初,该网站没有启用验证码,现在创建了数百个垃圾邮件帐户。默认情况下,用户的超级管理面板一次仅显示15个用户。我需要删除几百个用户,一页一页地浏览这个页面很单调。是否有可以帮助批量删除用户的插件?我希望能够一次选择和删除几百个用户(或者更好地通过用户名进行regex搜索)。谢谢