技術雑記

株式会社キャッチアップで働くエンジニアのブログです。

【baserCMS5】baserCMS5のコンテンツをWordPress向けWXRに書き出すBcWpExportを作りました

X B! はてブ Facebook LINE Feedly RSS

baserCMS5 のコンテンツを WordPress 向けの WXR(WordPress eXtended RSS)として書き出すプラグイン「BcWpExport」を作りました。

管理画面から出力対象を選んで実行すると、WordPress の標準インポート機能で読み込める WXR ファイルを生成・ダウンロードできます。

WordPress から baserCMS5 へ取り込む BcWpImport とは逆方向のプラグインです。

サイト移行では「WordPress から baserCMS5 へ」という流れだけでなく、検証や比較、別環境への受け渡しのために「baserCMS5 のコンテンツを WordPress 形式で書き出したい」場面もあります。

たとえば、

  • baserCMS5 のブログ記事を WordPress 側で検証したい
  • 固定ページを WordPress の page として受け渡したい
  • カテゴリーやタグの構造をできるだけ維持したい
  • WordPress Importer で読み込める XML を作りたい
  • 出力対象を条件で絞り込みたい
  • 過去のエクスポート履歴を管理したい

といった用途を想定して BcWpExport を開発しました。

BcWpExport とは

BcWpExport は、baserCMS5 の固定ページやブログ記事を、WordPress 向け WXR ファイルとして書き出すプラグインです。

WXR は WordPress の標準インポート機能で利用される XML 形式です。

BcWpExport では、baserCMS5 側のコンテンツを収集し、WordPress の postpagecategorypost_tag などに対応する形式で WXR を組み立てます。

生成した XML ファイルは、WordPress 管理画面の ツール → インポート から読み込めます。

書き出せる対象

初版では、次のデータを対象にしています。

baserCMS 側 WXR / WordPress 側 備考
固定ページ page 親子関係・スラッグ・公開状態を可能な範囲で維持
ブログ記事 post 投稿日・更新日・本文・抜粋・スラッグ・著者を出力
ブログカテゴリー category 階層構造を維持
ブログタグ post_tag タクソノミーとして出力
投稿者 author WordPress 側での再割当を前提とした最小情報
本文内画像 post_content 内 URL URL が有効な環境での移行を前提

一方で、初版ではメールフォーム、ウィジェットエリア、カスタムコンテンツ、コメント、添付ファイル本体の同梱、SEO プラグイン固有設定などは対象外としています。

まずは WordPress の標準インポーターで扱いやすい、ページ・投稿・分類情報を中心にしています。

主な機能

BcWpExport では、出力対象を選び、条件を指定して WXR ファイルを生成できます。

  • 出力対象・フィルタ条件の指定
  • 固定ページ・ブログ記事の収集
  • WXR ファイルの組み立て
  • ページ親子関係の反映
  • ブログカテゴリー親階層の反映
  • 本文・抜粋の CDATA 出力
  • wp:post_id / wp:post_parent の出力
  • 相対 URL を絶対 URL へ変換するオプション
  • アイキャッチ画像を attachment post_type として出力し _thumbnail_id postmeta を付与
  • 生成した WXR ファイルのダウンロード
  • エクスポート履歴・ファイルのジョブ管理
  • 履歴の個別削除・一括削除

単純に全件を書き出すだけでなく、ブログ・カテゴリー・著者・日付範囲などで絞り込めるようにしているので、移行検証や部分的なデータ受け渡しにも使いやすくしています。

フィルタ条件

エクスポート時には、次のような条件を指定できます。

条件 説明
出力対象 全件 / ブログ記事のみ / 固定ページのみ
公開状態 公開のみ / 非公開を含む / 下書きを含む
ブログ 取込元ブログを絞り込む(ブログ記事のみ対象)
カテゴリー 指定カテゴリーに属する記事のみ出力
著者 指定ユーザーが投稿した記事のみ出力
日付範囲 指定した期間内の記事のみ出力

たとえば、特定のブログだけを WordPress に持っていきたい場合や、公開済みの記事だけで検証したい場合に使えます。

出力オプション

WXR の生成時には、次のようなオプションを用意しています。

オプション 説明
URL 変換 本文中のルート相対 URL を絶対 URL へ変換する
メディア URL 出力 アイキャッチ画像を attachment post_type として WXR に含める
サイトメタ情報 channel 要素へサイト情報を付与する
XML 整形 インデント付きで pretty print する

本文中の画像やリンクは、移行後の確認ポイントになりやすい部分です。

そのため、相対 URL を絶対 URL に変換するオプションや、アイキャッチ画像を WordPress 側の attachment として扱いやすくするための出力を用意しています。

WordPress へのインポート手順

生成した WXR ファイルは、WordPress の標準インポート機能で読み込めます。

  1. baserCMS5 管理画面の WordPressエクスポート でエクスポートを実行する
  2. 完了後に表示されるダウンロードボタンから .xml ファイルを保存する
  3. WordPress 管理画面にログインする
  4. ツール → インポート → WordPress を開く
  5. 必要に応じて WordPress Importer をインストールする
  6. WXR ファイルをアップロードする
  7. 著者の割り当てを選択する
  8. インポートを実行する

画像などのメディアファイル本体は WXR に同梱されないため、元サイトの URL が有効な状態でインポートするか、必要に応じて WordPress 側で一括置換・メディア移行を行う想定です。

大量コンテンツの場合、WordPress Importer 側でタイムアウトすることもあるため、その場合は外部プラグインの利用も検討してください。

管理画面

管理画面では、次のメニューから操作できます。

  • メニュー名: WordPressエクスポート
  • URL: /baser/admin/bc-wp-export/wp_exports/index

条件を指定してエクスポートを実行し、完了後に WXR ファイルをダウンロードする流れです。

過去のエクスポート履歴や生成ファイルも一定期間保持されるため、再ダウンロードや履歴管理もしやすくしています。

動作環境

  • baserCMS 5.x
  • PHP 8.1 以上
  • CakePHP 5.x

インストール

  1. plugins/BcWpExport/ に本プラグインを配置する
  2. 管理画面の プラグイン管理 から「WordPressエクスポート」を有効化する

設定値は config/setting.php で変更できます。

キー 初期値 説明
BcWpExport.jobExpireDays 3 生成した WXR ファイルの保持日数
BcWpExport.batchSize 100 内部バッチ処理の単位件数

こんな場面を想定しています

このプラグインは、たとえば次のようなケースを想定しています。

  • baserCMS5 のコンテンツを WordPress で検証したい
  • ブログ記事や固定ページを WXR 形式で受け渡したい
  • WordPress Importer で読み込めるデータを生成したい
  • 特定ブログ・カテゴリー・期間だけを出力したい
  • baserCMS5 と WordPress 間の移行検証を行いたい
  • BcWpImport と組み合わせて、WXR を使った相互検証をしたい

サイト移行では、移行元・移行先の都合によって、必要になるデータ形式が変わります。

WordPress が標準で扱える WXR に変換できるようにしておくことで、検証や受け渡しの選択肢を増やせると思います。

まとめ

BcWpExport は、baserCMS5 のコンテンツを WordPress 向け WXR として書き出すプラグインです。

固定ページ、ブログ記事、カテゴリー、タグ、投稿者などを WordPress の標準インポート機能で扱いやすい形に変換します。

BcWpImport とあわせて使うことで、WordPress と baserCMS5 の間で WXR を使った移行・検証の流れを作りやすくなります。

すべてのデータを完全に移行するものではありませんが、標準的なコンテンツ移行の土台として役立つものになればと思っています。

ソースコードは下記からどうぞ

X B! はてブ Facebook LINE Feedly RSS