WordPressテーマの変更時、テーマ特有のカスタム投稿タイプで作成したコンテンツは引き継がれません。

カスタム投稿タイプ「お知らせ」で作成したテーマAのコンテンツは、カスタム投稿タイプ「お知らせ」が無いテーマBには、引き継がれないということです。テーマを元に戻せば再度表示されます。データが削除されるわけではないのでご安心ください。

しかし、テーマによって実装されているカスタム投稿タイプは様々です。テーマを変更したときに表示されなくなるコンテンツがあるのは困りますよね。

そこで今回は、異なるWordPressテーマ間でカスタム投稿タイプを引き継ぐ方法を解説いたします。

なぜ引き継がれないのか

カスタム投稿タイプが引き継がれないのは「post_type」が異なることが原因です。新旧テーマのカスタム投稿タイプに互換性があるかどうかは、post_typeに左右されます。

post_typeとは、そのカスタム投稿タイプを定義するための名称と思っていただいていも大丈夫です。テーマ開発時に定義する名称で、スラッグパーマリンクとは異なります。

カスタム投稿タイプのpost_typeは、ダッシュボードからも簡単に確認できます。

例えば、ダッシュボード左側の「お知らせ」にカーソルを当てると、画面左下にURLが表示されます。その末尾に「post_type=news」と表示されていますね。

post_typeを確認できる箇所

これがそのカスタム投稿タイプの「post_type」です。

カスタム投稿タイプが引き継がれないのは、この「post_type」が、新旧テーマで一致していないからというわけです。

カスタム投稿タイプを引き継ぐ手順

カスタム投稿タイプを正しく引き継ぐためには、「post_type」を変更して(新旧で一致させて)あげればOKです。別のpost_typeを持つカスタム投稿タイプを、旧テーマから新テーマに引き継ぐ手順を解説します。

  1. 旧テーマのカスタム投稿タイプをエクスポートする
  2. 新テーマのカスタム投稿タイプのpost_typeを確認する
  3. 旧テーマのpost_typeを新テーマのpost_typeに変更する

今回はTCDテーマを使って、

MONOLITH」のカスタム投稿タイプ「インフォメーション」
↓↓↓
GENESIS」のカスタム投稿タイプ「お知らせ」

に引き継ぐ例とともに解説いたします。

1. 旧テーマのカスタム投稿タイプをエクスポートする

まずは、旧テーマを適用している状態で、カスタム投稿タイプをエクスポートしましょう。

ダッシュボードのツール内に、「エクスポート」とあるので、ここからカスタム投稿タイプを指定してエクスポートします。XMLファイルでダウンロードされます。

エクスポートツール

↑では、カスタム投稿タイプ「インフォメーション」を指定している例です。TCDテーマ「MONOLITH」に実装されているカスタム投稿タイプで、post_typeは、「info」となっています。

2. 新テーマのカスタム投稿タイプのpost_typeを確認する

次に新テーマを適用している状態で、カスタム投稿タイプのpost_typeを確認してみましょう。これが移行先のカスタム投稿タイプにあたります。

post_typeを確認できる箇所

カスタムpost_typeが「news」になっているのがわかります。TCDテーマ「GENESIS」に実装されているカスタム投稿タイプ「お知らせ」です。

3. 旧テーマのpost_typeを新テーマのpost_typeに変更する

1でエクスポートしたカスタム投稿タイプのpost_typeと、2で確認したpost_typeが異なるため、このままインポートしても、新テーマでは引き継がれません。

ですので、エクスポートしたXMLファイルのpost_typeを、新テーマに合わせて変更します。

今回の例だと、

カスタム投稿タイプ「インフォメーション」(post_type=info)
↓↓↓
カスタム投稿タイプ「お知らせ」(post_type=news)

に変更するということです。

正確に変更してからインポートすれば、旧テーマのカスタム投稿タイプの内容を新テーマに引き継ぐことができます。

インポートはここから可能です。

インポートツール

次の章の変更方法を読んでからインポートを実行しましょう。

post_typeの変更方法と応用

post_typeは、WordPressからエクスポートしたXMLファイルから簡単に変更可能です。留意する点と応用方法についてご紹介いたします。

post_typeを書き換える

ダウンロードしたXMLファイルをお使いのエディタで開いて、

<wp:post_type><![CDATA[旧テーマのpost_type]]>

という形で検索してみてください。

今回の例の場合、<wp:post_type><![CDATA[info]]>と入力して検索します。

post_typeの一斉置換

するとそのカスタム投稿タイプの記事数だけヒットするはずです。上記の場合は12件ヒットしています(右上の検索フォーム参照)。

あとは、これをエディタの一括置換などを使って書き換えればOKです。

<wp:post_type><![CDATA[info]]>
↓↓↓
<wp:post_type><![CDATA[news]]>

上記のような形で検索して、一括置換するのがオススメです。

ドメインが「example.info」のような際などは、ドメイン部分も一緒に変更されないよう注意してください。余計な箇所まで変更してしまうと、正しくインポートできなくなります。

複数のカスタム投稿タイプを一つに統合する

「旧テーマでは複数のカスタム投稿タイプを使っていたが、新テーマでは1つに統合したい」

例えば、このようなケースですね。()内はpost_typeの例です。

カスタム投稿タイプ「インフォメーション」(info)・カスタム投稿タイプ「イベント」(event)
↓↓↓
カスタム投稿タイプ「お知らせ」(news)

この場合は、2種類のpost_typeを書き換えた上で、リダイレクト処理も必須になります。

ただ書き換えてインポートするだけでは、↓のような旧テーマのURLがデッドリンクになるからです。

example.com/info/
example.com/info/info-sample01
example.com/event/
example.com/event/event-sample01

そのため、次のような新テーマのURLにリダイレクトしてあげる必要があります。

example.com/news/
example.com/news/news-sample01

このようなサイト内の一部のページのリダイレクトは、「.htaccess」を編集するのが確実です。

「.htaccess」は、WordPressをインストールした際、wp-adminやwp-contentディレクトリと同じ階層につくられます。FTPソフトやご契約のサーバーのファイル管理機能より編集可能です。重要なファイルなので、必ずバックアップをとってから操作してください。

今回は、infoとeventをnewsに統合したいときのリダイレクト処理を例に説明いたします。

RewriteRule ^info(.*)$ /news$1 [L,R=301]
RewriteRule ^event(.*)$ /news$1 [L,R=301]

上記をそのまま「.htaccess」内のRewriteEngine Onの下あたりに追記するだけでOKです。

リダイレクト処理を追記した例

エックスサーバーの「ファイルマネージャ」で編集した例

詳しい説明は割愛しますが、要はリダイレクト処理のルールを追記してあげるというわけです。infoやevent、newsの箇所を適宜変更していただければ、応用が利くと思います。

リダイレクト処理のプラグインもあるので、こちらもご活用いただけるかもしれません。

編集が完了したら、アーカイブページと詳細ページで正常にリダイレクトされるか確認しておきましょう。

まとめ

WordPressテーマを変更時に、カスタム投稿タイプを引き継ぐ方法を解説いたしました。

  • 2テーマ間でカスタム投稿タイプのpost_typeが異なると引き継がれない(データは消えない)
  • post_typeは、スラッグやパーマリンクとは異なるが、管理画面でも確認できる
  • 複数のpost_typeを一つに統合する場合は、リダイレクト処理も必須

この辺りのポイントを押さえておくと、カスタム投稿タイプで作成したコンテンツを上手く引き継げるのではないでしょうか。テーマの変更時に参考にしていただけると幸いです。

運営中のサイトでWordPressテーマの変更テストを行う際は、こんなプラグインも便利です。

WordPressテーマを変更する手順と確認項目はこちらの記事にまとめています。