私は更新と改善のためにクライアントのワードプレスサイトを与えられました。最大の問題 - 私は特定のカテゴリの「レビュー」という約200以上の投稿を受け取り、それらをすべてカスタム投稿タイプの「レビュー」に変換する必要があります。
これに加えて、これらの投稿に起因すると思われるカスタムフィールドをいくつか移動する必要があります。移動した後もそのまま残ります。
私は直接MySQLを変更するカスタムスクリプトを書く必要があるでしょう。しかし、私が手を汚す前に、これをやったことのある人はいますか?私が使うことができるそこに何かヒント/ gotchas /スクリプト?
乾杯
投稿ごとに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);
}
あなただけのこのプラグインを使用することができます:
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'