mokeco.さん、こんにちは。
データベースを直接更新する方法なら可能です。
前提として、MySQLとWordPressのデーターベース構造を理解していることが必要です。
WordPressのデータベース構造は、下記が参考となります。
■WordPress ER図(シングルインストール時)
http://codex.wordpress.org/images/9/9e/WP3.0-ERD.png
この中でカテゴリーの情報は、termsとterm_taxonomyテーブル、投稿・固定ページ・カスタム投稿は、posts、それらの所属情報がterm_relationshipsに格納されています。
記事の投稿タイプを決するのは、postsテーブルのpost_typeになりますので、お知らせカテゴリに属していた投稿のpost_typeをお知らせの投稿タイプのものに変更すれば良いことになります。
これで、投稿タイプの変更は完了ですが、カテゴリーの所属情報が残るため、term_relationshipsテーブルから、変更した投稿のレコードを削除しておいた方がよいでしょう。
その後、お知らせカテゴリを削除するのは、管理画面からでも出来ますね。
なお、クリティカルな作業になりますので、実行する場合は、かならずデータベースのバックアップをとっておいて、いつでも作業前に戻せるようにしておきましょう。
変更する際に実行するSQL文のサンプルを載せておきます。
ご自分の環境に合わせて、参考にしてください。
なお、移行前のカテゴリーに所属する投稿は、複数のカテゴリーに所属していないことが条件です。
■投稿タイプの変更
テーブル接頭辞がwp_で、カテゴリーのスラッグがinformation、投稿タイプのスラッグもinformationの場合
UPDATE wp_posts as p,
wp_term_relationships as tr,
wp_term_taxonomy as tt,
wp_terms as t
SET p.post_type = 'information'
WHERE p.ID = tr.object_id
AND tr.term_taxonomy_id = tt.term_taxonomy_id
AND tt.term_id = t.term_id
AND tt.taxonomy = 'category'
AND t.slug = 'information'
■投稿タイプ変更後のカテゴリー所属情報削除
DELETE tr
FROM wp_term_relationships as tr,
wp_term_taxonomy as tt,
wp_terms as t
WHERE tr.term_taxonomy_id = tt.term_taxonomy_id
AND tt.term_id = t.term_id
AND tt.taxonomy = 'category'
AND t.slug = 'information'
jim912さん、ご親切にサンプルコードまでいただき、ありがとうございました。
提示していただいた方法で、2つのテストサーバ上で実行してみたところ、共にうまく行きました。後日本番環境で実行してみたいと思います。
ごめんなさい、ついでに伺いたいのですが、
「■投稿タイプの変更」を実行しただけでも見かけ上は問題なく新しい投稿タイプに移行できています。
そのあとの「■投稿タイプ変更後のカテゴリー所属情報削除」は、何のために行うのでしょうか?
投稿タイプの変更を実行しただけでは、データベース上には以前の「投稿」から書き込んだ際の残骸が残っている、ということでしょうか?
mokeco.さん
うまくいってなによりです。
投稿タイプ変更後のカテゴリー所属情報削除は、投稿とカテゴリーの繋がっている線を切り離すようなイメージを持っていただくと良いかもしれません。
これが繋がったままだと、カテゴリーを表示した際に変更した投稿タイプがそのまま表示されてしまうかと思います。
カテゴリー削除を行えば、一緒に所属情報も消してくれるかもしれませんが、そこまで検証していないもので。。
jim912さん
なるほど、残骸をなくすというよりは「関係」をなくする、ということですか。
理解できました。ありがとうございました。