2010.03.11
category
comments

WordPressの$postオブジェクトの中身

WordPressのループ内で$postオブジェクトの中身を取り出すときにいつもプロパティ名が分からなくなるのでメモ。日付を取得したい場合は$post->post_dateで取り出す。

ID
post_author
post_date
post_date_gmt
post_content
post_title
post_excerpt
post_status
comment_status
ping_status
post_password
post_name
to_ping
pinged
post_modified
post_modified_gmt
post_content_filtered
post_parent
guid
menu_order
post_type
post_mime_type
comment_count
filter

2009.09.01
category
comments

WordPressでfeedを配信しないようにする方法

WordPressでフィードを配信したくない時にコアファイル弄るとすぐ出来るんだけど、アップグレードした時にメンテが面倒になるのでこの方法はできればやりたくない。調べてたら使っているテーマフォルダにfunctions.phpをアップする事で無事解決できた。

functions.php

<?php
	remove_action('wp_head', 'rsd_link');
	remove_action('wp_head', 'feed_links_extra', 3);
?>

WPのヘッダーにwp_head()を入れている場合に、上記の記述でメインのフィードとページ等のコメントフィードへのリンクを削除することができる。

2009.07.21
category
comments

WordPressからProgressionのPRMLを出力してみる

Flashネタをエントリーするのは久々だなー。先日の福岡てら子で発表した内容ですが、WordPressからProgressionで使うPRMLというXMLを出力する方法。PRMLの詳しい説明は本家リファレンスを参照して下さい。これを使うことにより、WordPressからProgressionにダイレクトにシーンを生成出来るようになる。今回はWordPressのカテゴリーをシーンに見立てて出力しているので、親、子、孫、曾孫といった深い階層のシーン構造も簡単に作ることができる。下記のPHPをWPがインストールされているサーバーのテーマフォルダにアップします。次にWPのメニューからページを新規で追加して、タイトルに「prml」と入力し、右サイドバーの属性のテンプレートから「prml」を選択。この状態でページを公開すると、タイトルの下にパーマリンクが表示されるので、このURLにアクセスすると現在のカテゴリー構造を維持したままのPRMLが出力されるようになる。こんな感じ

prml.php

<?php /*
Template Name: prml
*/ ?>
<?php
 header('Content-Type: text/xml; charset='.get_option('blog_charset'), true);

 //-----[PRMLのヘッダー生成]
 $title = get_option('blogname');
 $header .= '<?xml version="1.0" encoding="'.get_option('blog_charset').'"?'.'>';
 $header .= '<prml version="2.0.0" type="text/prml">';
 $header .= '<scene name="index" cls="myproject.IndexScene" title="'.$title.'">';

 //-----[WPから全階層のカテゴリー取得]
 $str = wp_list_categories('orderby=id&echo=0&hide_empty=0&use_desc_for_title=0&title_li=');
 $str = strip_tags($str, '<li>');

 //-----[PRML形式に変換]
 $category = strip_tags($str, '');
 $category = str_replace(array("\r\n","\r","\n"), '', $category);
 $category = preg_replace('/\s+/', ' ', $category);
 $category = ltrim($category);
 $category = split(' ', $category);

 for($i=0; $i<count($category); $i++)
 {
 	$str = str_replace(">".$category[$i]."\n", $i.">", $str);
 }

 $str = preg_replace('/"(.*?)"/', '', $str);
 $str = str_replace('li', 'scene', $str);

 for($i=0; $i<count($category); $i++)
 {
 	$str = str_replace('class='.$i, 'name="'.$category[$i].'" cls="myproject.'.ucfirst($category[$i]).'Scene" title="'.$title." | ".$category[$i].'"', $str);
 }

 //-----[PRMLとして出力]
 echo $header.$str.'</scene></prml>';
?>

このPHPでやっていることはwp_list_categories()で取得したリストタグ付きカテゴリーを力技でPRML形式のXMLに変換してるだけ。ソースを見てもらえば苦笑いできると思います。w

ここではシーン構造のみをPRMLとして出力してるけど、Progressionの各ページ内にWPから画像を読み込んだり、テキストを流し込む場合は個別にXMLを作ったほうが管理しやすいと思う。その場合は以前エントリーしたこの記事が役立つと思います。

今回参考にさせて頂いたのはMotuLogさんのエントリー。ありがとうございます!またflabakaさんは自分とは違ったアプローチでWordPressやMovableTypeとProgressionを連携させる方法をエントリーされてます。

■参考サイト
・MotuLogさん Progression(3.1.52) 動的にシーンを作成する
・flabakaさん ProgressionとWordPressの連携

2008.11.21
category
comments

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&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>
page 1 / 11