WXR(WordPress eXtended RSS)から記事をインポートする方法
WordPressで投稿やページのインポート・エクスポートに使われるXML「WXR(WordPress eXtended RSS)」を利用して、複数の記事を一括でインポートしてみました。
WordPressのインポート機能
WordPressは、管理ページの「ツール」→「インポート」から各種フォーマットで投稿やページの一括インポートが行えます。他のCMS等から移行する場合には、それらからエクスポートしたファイルをそのままインポートできます。しかし、こういった場合、WordPressの機能であるカスタムフィールドやスラッグ等をインポートすることはできません。
実は、WordPress自身もWXRという独自のXMLフォーマットを持っています。このWXR形式を利用することで、WordPressのカスタムフィールドや投稿・ページの設定も一括でインポートすることができます。
WXRファイルのテンプレート
今回、カスタムフィールドやスラッグを設定した投稿を下書き状態でインポートしたかったため、このWXRファイルのテンプレートを作成してみました。CMS等を利用している場合は、このテンプレートを元にWXR形式のXMLを出力させることもできるかと思います(今回はソースがCSVファイルだったので、Excelでitem要素だけをそのまま処理してしまいましたけど)。
作成したWXRファイルを「ツール」→「インポート」→「WordPress」からインポートすれば、複数の記事を一括でWordPressにインポートすることができます。
WXRフォーマットの詳細
ちなみに、WXRの実体は、その名の通り、RSS(2.0系)の拡張フォーマットです。ほとんどのXML要素はRSS 2.0等と共通です。「excerpt」と「wp」の名前空間に属する要素がWordPress独自の要素になります。
このWXRのXML SchemaやDTD、仕様等は公開されていないようですが、エクスポートの処理自体は/wp-admin/includes/export.phpで行われています。PHPがわかる人であれば、こちらを見たほうが早いかもしれません。簡単なコードなので、これならWXR形式のXMLを出力するプログラムも意外と簡単に作れそうですね。
WXRのテンプレート(コード)
WordPressへの記事のインポート用のWXRのテンプレート(コード)です。
今回は記事がインポートさえできればそれで良かったので、テンプレートはインポートに必要な最低限の要素にのみ絞っています(RSS 2.0としてはinvalidなXMLです)。また、添付ファイル等の複雑な仕様の説明も省略しています。WXR独自の要素以外の要素についてはそれぞれの仕様等を確認してください。
なお、インポートの用途においては、インポートに不要な要素はそのほとんどが省略可能です。
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
xmlns:excerpt="http://wordpress.org/export/1.0/excerpt/"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:wp="http://wordpress.org/export/1.0/">
<channel>
<!-- [wp:wxr_version] WXRのバージョン -->
<wp:wxr_version>1.0</wp:wxr_version>
<!-- [wp:category] カテゴリの作成(繰り返し) -->
<wp:category>
<wp:category_nicename>URIエンコードされたカテゴリのスラッグ</wp:category_nicename>
<wp:category_parent>親カテゴリ名</wp:category_parent>
<wp:cat_name><![CDATA[カテゴリ名]]></wp:cat_name>
<wp:category_description>カテゴリの説明</wp:category_description>
</wp:category>
<!-- [/wp:category] -->
<!-- [wp:tag] タグの作成(繰り返し) -->
<wp:tag>
<wp:tag_slug>URIエンコードされたタグのスラッグ</wp:tag_slug>
<wp:tag_name><![CDATA[タグ名]]></wp:tag_name>
<wp:tag_description>タグの説明</wp:tag_description>
</wp:tag>
<!-- [/wp:tag] -->
<!-- [item] 投稿等(繰り返し) -->
<item>
<title>投稿等のタイトル</title>
<dc:creator><![CDATA[投稿者名]]></dc:creator>
<!-- [category] 投稿等が属するカテゴリ(繰り返し) -->
<!-- domain属性のないものは後方互換用 -->
<category><![CDATA[カテゴリ名]]></category>
<category domain="category" nicename="URIエンコードされたカテゴリのスラッグ"><![CDATA[カテゴリ名]]></category>
<!-- [/category] -->
<!-- [category] 投稿等が属するタグ(繰り返し) -->
<!-- nickname属性のないものは後方互換用 -->
<category domain="tag"><![CDATA[タグ名]]></category>
<category domain="tag" nicename="URIエンコードされたタグのスラッグ"><![CDATA[タグ名]]></category>
<!-- [/category] -->
<content:encoded><![CDATA[投稿等の内容]]></content:encoded>
<excerpt:encoded><![CDATA[投稿等の抜粋]]></excerpt:encoded>
<wp:post_date>投稿等の日時(yyyy-mm-dd hh:mm:ss)</wp:post_date>
<wp:post_date_gmt>投稿等のGMT日時(yyyy-mm-dd hh:mm:ss)</wp:post_date_gmt>
<wp:comment_status>コメントの受け付けステータス(open, closed)</wp:comment_status>
<wp:ping_status>トラックバック等の受け付けステータス(open, closed)</wp:ping_status>
<wp:post_name>URIエンコードされた投稿等のスラッグ</wp:post_name>
<wp:status>投稿等のステータス(publish, draft, future)</wp:status>
<wp:post_type>投稿等のタイプ(post, page)</wp:post_type>
<wp:post_password>投稿等のパスワード</wp:post_password>
<!-- [wp:postmeta] 投稿等のカスタムフィールド(繰り返し) -->
<wp:postmeta>
<wp:meta_key>カスタムフィールドのキー</wp:meta_key>
<wp:meta_value>カスタムフィールドの値</wp:meta_value>
</wp:postmeta>
<!-- [/wp:postmeta] -->
</item>
<!-- [/item] -->
</channel>
</rss>
コメント (2)
「カスタムフィールドのキー」ですが、WordPressの「投稿の編集」画面でいうところの「カスタムフィールド」メタボックスの「名前」欄になりますね。
(「表示オプション」 -> 「カスタムフィールド」にチェックで「カスタムフィールド」メタボックスが表示されるはずです。)
4年近く前の記事ですので、WPの仕様が変更となっている可能性もありますがご参考になりましたら幸いです。
トラックバック (2)
[…] フィールドやスラッグ等をインポートする」という場合には「WXR(WordPress eXtended RSS)から記事をインポートする方法 – (DxD)∞」さんのブログを参照ください。非常に詳しい説明が載って […]
[…] が受け付けてくれるWXR形式を作ればいいだけになる。今回は WXR(WordPress eXtended RSS)から記事をインポートする方法 – (DxD)∞ というページを大いに参考にさせてもらった。記事中のWordP […]
MTのカスタムフィールドの値も取得してWPに移行したくこちらの記事を見つけました。
取得するに際し「カスタムフィールドのキー」というものがありますが、このキーはどの様なものでしょうか?
カスタムフィールド名を入れても、ベースネームを入れても値が取得出来ませんでした・・・
ご教授頂ければ幸いです。