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を新テーマに合わせて書き換える

今回は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を新テーマに合わせて書き換える

1でエクスポートしたXMLファイル内のpost_typeを、2で確認した新テーマに合わせて書き換えます。

今回の例だと、

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

に変更します。

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」のような際などは、ドメイン部分も一緒に変更されないよう注意してください。余計な箇所まで変更してしまうと、正しくインポートできなくなります。

XMLファイルをインポートする

post_typeを書き換えたXMLファイルを、新テーマにインポートします。

インポートツール

これで旧テーマのカスタム投稿タイプが、正常に引き継がれます。

  • 引き継ぎ前後で記事数が一致しているか
  • 正常に表示されるか

などを確認しておきましょう。

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

「旧テーマでは複数のカスタム投稿タイプを使っていたが、新テーマでは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テーマを変更する手順と確認項目はこちらの記事にまとめています。