WordPressでFlash用に複数のxmlを出力する方法

デフォルトのRSS配信とは別にページ機能を使ってxmlを出力する事が出来たのね。今まで気付かなかったのでメモ。

まずはページ用PHPの冒頭でTemplate Nameを設定する。今回の場合は「newsXML」とする。このPHPを、現在使用しているテーマフォルダにアップする。次にWordPressの管理メニューからページをクリック。タイトルを「newsXML」として、下の方にあるページテンプレートを「デフォルトテンプレート」から「newsXML」にする(page-newsXML.phpをアップしていないと、ページテンプレートというオプションが出てこないので注意)。公開ボタンを押下してから再度newsXMLの管理ページを開くと、タイトルの下にパーマリンクのURLが記載されるので、このアドレスにアクセスするとxmlが動的生成されるようになる。

Flashから必要な分だけWordPressでページを作っておいて、個別のxmlを吐き出せば管理が楽になりますよと。ちなみに下のPHPだとカテゴリーが「news」のエントリーの最新5件だけを出力する仕様にしてます。用途に合わせてquery_posts()の引数を変えてやればなんでも出せる。

page-newsXML.php

<?php header('Content-Type: text/xml; charset='.get_option('blog_charset'), true); ?>
<?php /*
Template Name: newsXML
*/ ?>
<?php echo '<?xml version="1.0" encoding="'.get_option('blog_charset').'"?>'; ?>
<root>
<?php query_posts("posts_per_page=5&amp;category_name='news'"); ?>
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<item>
<pubdate><?php echo get_post_time('Y-m-d H:i:s', true); ?></pubdate>
<?php the_category_rss(); ?>
<description><![CDATA[<?php the_excerpt_rss(); ?>]]></description>
</item>
<?php endwhile; endif; ?>
</root>

2008.11.21 by _simo
Categories: php | Tags: , | 31 comments

Comments (31)

  1. Pingback: wordpressでFlash用のxmlを出力 | Chibiの覚え書き

  2. 初めまして。
    記事読ませていただきました。

    いきなりで申し訳ないのですが、

    「タイトルの下にパーマリンクのURLが記載されるので、このアドレスにアクセスするとxmlが動的生成されるようになる。」
    とありますが同じ様に作ってページにアクセスしても真っ白の画面になってしまいます。
    ソースパクらせていただいても同じ様に真白の画面になってしまいます。
    なにが原因なのでしょうか?
    ご教授お願い致します。

    因みにwordpressのバージョンは何使ってらっしゃいますか?

  3. >^^;;さん
    はじめまして。ページ編集画面の属性のテンプレートを選んでますか?上記PHPファイルをアップすると「newsXML」という名前がコンボボックスに選べるようになると思いますが・・・。

    このPHPの場合はエントリーのカテゴリーが「news」の記事を5件取ってきてxmlに出力します。^^;;さんのWordPressのカテゴリーに「news」が存在しないのでは?

    あとタイトルの下にパーマリンクのURLが記載されますが、このURLをそのままコピペすると末尾が/newsxmlnewsxmlとなるので、/newsxmlにしてやると上手くいくはずです。

    バージョンは最新の2.7ですよ。

  4. simo様

    わざわざ返事ありがとうございます。
    書いてある通りにさせていただいたのですが、画面真白です笑

    ちなみに・・・
    パーマリンクのURLにアクセスするとsimoさんのブラウザは何を映し出しますか?(僕は真っ白です笑)
    動的生成されるというのは一体どういう風になるのでしょうか><;
    すごく知りたいです;;

    どうかもう一度ご教授お願い致します><;

  5. 謎ですねー。404エラーとかは出ないんですよね?であれば、PHPがデータを出力できていない可能性があります。真っ白の画面でソース表示するとなにか出力されていませんか?

    < ? php query_posts("posts_per_page=5&category_name='news'"); ?>

    < ? php query_posts(); ?>

    に変更してみて下さい。

    パーマリンクのURLにアクセスするとxmlが表示されます。動的生成というのはxmlファイルが存在する訳ではなく、アクセスするたびにPHPがxml形式の文字列を出力するという意味です。

    仕組みとしてはWordPressのフィードと同じです。これもフィードのRSSファイルは存在しませんが、URLにアクセスするとxmlが表示されるはずです。
    http://www.5ive.info/blog/feed

  6. Pingback: lifepad » Blog Archive » as3用のブログを作りました。

  7. simo様

    お返事ありがとうございます。
    無事xmlを出力することができました。

    原因はどうも不要なスペースや改行だったっぽいです><;;

    WPがそこまでタイトだったとは。。。
    こんな単純なミスにワザワザつきあわせてしまってホント申し訳ないですm(__)m
    ありがとうございました★
    これからも色々と参考にさせていただきます!!

  8. >^^;;さん
    無事解決したみたいで良かったです!WordPressではPHPファイルにBOMを付けたりすると崩れたりしますからねー。自分も罠にはまる事よくありますよ。w

    こちらこそ、今後とも宜しくお願いしますね。

  9. Pingback: Google Ajax Feed API で RSS READER(StarWas)を直す « 2BLOG

  10. Pingback: XMLを出力する « テスト2

  11. 初めまして、
    記事、大変参考になります。ありがとうございます。

    そこで質問があるのですが、

    このXMLファイルの中に画像ファイルのパスも引っ張ってくることは
    可能だったりしますでしょうか??

    ご教授願います!!

  12. すみません追記です。

    <![CDATA[]]>
    を追加して、XMLページを表示すると、

    XML パースエラー: 接頭辞の名前空間が定義されていません。
    URL: http://takumatest.sitemix.jp/blog/?page_id=54
    行番号: 8, 列番号: 3: <![CDATA[
    —————-^
    と表示されてしまいます。。。

  13. >通りすがりのモノさん
    はじめまして。
    WordPressの管理画面で入力しているものは何でも持ってこれますよー。名前空間の定義はされていますか?

    通りすがりのモノさんの場合ですとタグがルート要素になってるようなので、デフォルト名前空間としてrootタグを下記のように設定すれば解決できると思いますよ。

    <root version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">

    エラーページのソースを表示すると分かると思いますがxml自体は問題なく出力されています。xmlの書式が間違っているのでブラウザでエラー表示になっているみたいですねー。xmlの名前空間に関してはこちらのページが参考になると思いますよ。

  14. 早速の回答すみません、、、

    上記の名前空間の設定と
    <![CDATA[]]>
    と指定して

    解決しました!!!!

    wordpressやxml初心者でして、、
    ありがとうございます。助かります。

  15. Pingback: be advanced - WordPressをCMSとしたフルFlashサイト構築(2)

  16. >通りすがりのモノさん
    おー、無事解決できたみたいですね。お役に立てて良かったです。w

  17. Pingback: 09年04月14日 今日の Web ページメモ « Web、プログラミングの技術など - gentenzero blog

  18. Pingback: +Air» Blog Archive » xml nemeSpace

  19. サーバーによってはheader()関数を使うと怒られる場合があるみたいなので、そういったエラーが出る場合はソースの4行目を削除するとエラーを回避できます。ただし、Content-Typeを指定しておかないと、読み込み時にxmlと認識されない場合があるので注意が必要です。

  20. 上記の自分のコメントに誤りがありました。訂正するとheader()関数をコールする場所が悪かったようです。プログラムに修正してある通り、先頭に書いてください。また余計な空白や改行があるとエラーになる場合があります。

    それでもエラーが出る場合はnewsXML.phpファイルがBOM有りになっている可能性があります。その場合はBOMなしに保存し直してみてください。

  21. Pingback: flabaka - ProgressionとWordPressの連携

  22. Pingback: links for 2009-07-16 « snowydaycat

  23. Pingback: WordPressでFlash用に複数のxmlを出力する方法 | 5ive™.blog

  24. Pingback: WordPressとFlashの連携 » ブログ | The Designium - デザイニウム

  25. Pingback: xml « semiactdesignandcrafts™|graphic+webcreation

  26. 専用のXMLを出力するのではなくフィード(RSSとかATOMとか)をFlash側で解析するのはどうでしょうか?
    幸いなことにwordpressではプラグインの導入や改造することなしに特定のカテゴリはもちろん特定の記事やページだけを対象にフィードを出力させることができますし。

  27. >うにらさん
    コメントありがとうございます。フィードを代用とのことですが、カスタムフィールドの値やデフォルトのフィードには出力されない値をFlashに渡したいのでこの方法を使っています。

    タイトルや本文などの基本情報を出力したい場合はフィードの代用でもいけそうですねー。

  28. Pingback: WordPressとFlashの連携 « TheDesignium

  29. Pingback: wordpressで送信されたXMLをFlashに | 秘密基地

  30. Pingback: ぷろじぇくとM » 初WordPress…ども

  31. Pingback: ぷろじぇくとM » WordPressで動的に複数のXMLを出力する際のメモ

Leave a Reply

Required fields are marked *

*