技術雑記

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

【baserCMS5】WordPressのWXRをbaserCMS5に取り込むBcWpImportを作りました

X B! はてブ Facebook LINE Feedly RSS

WordPress から baserCMS5 へコンテンツを移行するためのプラグイン「BcWpImport」を作りました。

WordPress 標準のエクスポート機能で取得できる WXR(WordPress eXtended RSS)ファイルを、baserCMS5 の管理画面からアップロードし、内容を確認したうえでブログ記事や固定ページとして一括登録できます。

WordPress から baserCMS5 へ移行したい場面はありますが、記事・固定ページ・カテゴリー・タグ・著者の扱いを毎回手作業で調整するのはかなり大変です。

たとえば、

  • WordPress の投稿を baserCMS5 のブログ記事として取り込みたい
  • 固定ページもできるだけまとめて移行したい
  • カテゴリーやタグを移行先ブログ配下に作成したい
  • 著者情報を baserCMS5 のユーザーに割り当てたい
  • 取り込み前に件数や内容を確認したい
  • 取り込み結果をログや CSV で確認したい

といったことを、管理画面から扱いやすくするために BcWpImport を開発しました。

BcWpImport とは

BcWpImport は、WordPress からエクスポートした WXR ファイルを baserCMS5 に取り込むためのプラグインです。

WXR は WordPress が標準で書き出す XML 形式のエクスポートファイルで、投稿・固定ページ・カテゴリー・タグ・著者などの情報を含めることができます。

BcWpImport では、この WXR ファイルをアップロードして解析し、取り込み対象や著者マッピング、スラッグ重複時の処理、公開状態、URL 置換などを設定したうえで、baserCMS5 側へ登録できます。

取り込める対象

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

WordPress 側 baserCMS 側 備考
post(投稿) ブログ記事 取込先ブログの指定が必要
page(固定ページ) 固定ページ コンテンツ配置先は要調整
category(カテゴリー) ブログカテゴリー 対象ブログ配下へ自動作成
post_tag(タグ) ブログタグ 対象ブログ配下へ自動作成
author(著者) baserCMS ユーザー 同名割当または一括割当

一方で、初版ではカスタム投稿タイプ、コメント、attachment の完全取込、WooCommerce など特定プラグイン由来のデータは対象外としています。

まずは WordPress の標準的な投稿・固定ページ移行にフォーカスしています。

WXR ファイルの準備

WXR ファイルは WordPress 管理画面から取得できます。

  1. WordPress の管理画面にログインする
  2. ツール → エクスポート を開く
  3. エクスポート対象を選択する
  4. エクスポートファイルをダウンロード をクリックする

ダウンロードされる .xml ファイルを、そのまま BcWpImport にアップロードできます。

動作確認用としては、WordPress 公式テーマユニットテストデータや日本語版テーマユニットテストデータを使うのも便利です。記事・固定ページ・カテゴリー・タグ・著者など、いろいろなパターンが含まれているため、取り込み確認に向いています。

主な機能

BcWpImport では、単に XML を読み込むだけでなく、移行作業で確認したくなる要素を管理画面で扱えるようにしています。

  • WXR ファイルのアップロード
  • アイテム件数・著者・カテゴリー・タグ一覧の解析
  • 著者マッピング
  • スラッグ重複時の処理設定
  • URL 置換
  • 公開状態の指定
  • ブログ記事・固定ページの一括登録
  • 処理中ログのリアルタイム表示
  • インジケーター型プログレスバーと経過時間カウンター
  • アイテム単位の取込結果 CSV ダウンロード
  • ジョブ管理
  • 未完了ジョブ・履歴の削除

特に、取り込み前に解析結果を確認できることと、取り込み後に結果 CSV を確認できることは、実案件での移行作業を進めやすくするために重視しています。

取込オプション

取り込み時には、次のようなオプションを選択できます。

オプション 選択肢
取込対象 全件 / 投稿のみ / 固定ページのみ
著者マッピング 同名ユーザーへ割当 / 指定ユーザーへ一括割当
スラッグ重複時 連番付与 / スキップ / 上書き
公開状態 元の状態を維持 / すべて下書きで取込
URL 置換 WordPress URL のまま維持 / 指定ドメインへ置換

移行作業では、いきなり公開状態のまま取り込むより、まずは下書きで取り込んで内容を確認したいケースも多いと思います。

また、移行先で既に同じスラッグのコンテンツがある場合もあるので、スラッグ重複時の挙動を選べるようにしています。

管理画面

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

  • メニュー名: WordPressインポート
  • URL: /baser/admin/bc-wp-import/wp_imports/index

WXR ファイルをアップロードし、解析結果を確認してから取り込みを開始する流れです。

処理中はログを確認できるため、大量データの取り込み時にも進捗を把握しやすくしています。

動作環境

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

インストール

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

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

キー 初期値 説明
BcWpImport.jobExpireDays 3 ジョブ(アップロードファイル含む)の保持日数
BcWpImport.batchSize 100 一度に処理するアイテム件数

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

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

  • WordPress から baserCMS5 へブログ記事を移行したい
  • WordPress の固定ページもまとめて baserCMS5 に移したい
  • カテゴリーやタグを含めて移行作業を効率化したい
  • WXR ファイルを使って移行前の検証をしたい
  • 大量記事の取り込み結果をログや CSV で確認したい
  • WordPress 依存を減らし、baserCMS5 へ移行する選択肢を用意したい

WordPress から baserCMS5 への移行は、案件ごとに調整が必要になることも多いですが、まず標準的な WXR を扱える土台があるだけでも、作業の見通しはかなり立てやすくなると思います。

まとめ

BcWpImport は、WordPress 標準の WXR ファイルを baserCMS5 へ取り込むためのプラグインです。

投稿・固定ページ・カテゴリー・タグ・著者といった基本的なコンテンツ移行を、管理画面から確認しながら進められるようにしました。

まずは WordPress の標準エクスポートデータを使った移行や検証に使ってもらえたらうれしいです。

カスタム投稿タイプや添付ファイルの完全取込などは初版では対象外ですが、今後の拡張ポイントとしても考えやすい構成にしています。

baserCMS5 への移行を検討している方にとって、少しでも作業を進めやすくするプラグインになればと思っています。

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

X B! はてブ Facebook LINE Feedly RSS