<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	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:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>いちばんやさしいゲームの作り方 &#187; WordPress</title>
	<atom:link href="http://www.game-create.com/archives/tag/wordpress/feed" rel="self" type="application/rss+xml" />
	<link>http://www.game-create.com</link>
	<description>文系の人でも、数理学がわからない人でもゲームプログラミングをマスターできるブログ</description>
	<lastBuildDate>Tue, 08 Jun 2010 01:28:47 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>あれかな、スパムコメント付ける人はリアルタイムに内容を考えているの？</title>
		<link>http://www.game-create.com/archives/3160</link>
		<comments>http://www.game-create.com/archives/3160#comments</comments>
		<pubDate>Sun, 11 Apr 2010 09:41:26 +0000</pubDate>
		<dc:creator>Byerkut</dc:creator>
				<category><![CDATA[日記]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Akismet]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[コメント]]></category>
		<category><![CDATA[スパム]]></category>

		<guid isPermaLink="false">http://www.game-create.com/?p=3160</guid>
		<description><![CDATA[いつもご贔屓（？）にしていただいているアダルト系スパムがあるのですが、先日、件名が「ぎゃぼぉぉぉ」になってて笑いました。のだめ、またいろいろと始まるらしく、人気ですからね。

WordPress のスパム対策は Akis [...]]]></description>
			<content:encoded><![CDATA[<p>いつもご贔屓（？）にしていただいているアダルト系スパムがあるのですが、先日、件名が「ぎゃぼぉぉぉ」になってて笑いました。のだめ、またいろいろと始まるらしく、人気ですからね。</p>
<p><span id="more-3160"></span></p>
<p>WordPress のスパム対策は Akismet でほぼ決まりかと思いますが、他のサイトで使うには面倒なことが多くありまして、 Captcha みたいなのが人気みたいです。ただ、うちはそれすら面倒で、投稿フォームを Ajax にすることがあります。たったこれだけなんですが、意外にもスパムが来なくなりまして、まだまだ JavaScript を理解するスパム投稿プログラムが少ないということなのかもしれません。</p>
<p>余談ですが、 SPAM の CM に出ているお姉さんが美人です。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.game-create.com/archives/3160/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPress 2.8 の自動アップグレードが危険な件</title>
		<link>http://www.game-create.com/archives/1814</link>
		<comments>http://www.game-create.com/archives/1814#comments</comments>
		<pubDate>Sat, 13 Jun 2009 13:20:00 +0000</pubDate>
		<dc:creator>Byerkut</dc:creator>
				<category><![CDATA[ウェブログ]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://www.game-create.com/?p=1814</guid>
		<description><![CDATA[サーバ上にあるブログとは関係ないファイルまで消えてしまう可能性があるそうです。
2.8への自動アップグレードを行う際の注意事項

もう、ディレクトリが上のファイルだろうが関係ないとのことで、大変危険です。なんとなく危険な [...]]]></description>
			<content:encoded><![CDATA[<p>サーバ上にあるブログとは関係ないファイルまで消えてしまう可能性があるそうです。</p>
<p><a href="http://ja.wordpress.org/2009/06/13/attention-autoupgrade-28/" class="external">2.8への自動アップグレードを行う際の注意事項</a></p>
<p><span id="more-1814"></span></p>
<p>もう、ディレクトリが上のファイルだろうが関係ないとのことで、大変危険です。なんとなく危険な気がして自動アップグレードは一度も試してないのですが、今回は第六感に救われた形になります。</p>
<p>たしかに、 WordPress のアップグレードは SSH でコマンド叩かないとダウンタイムが大きすぎるかもしれません。せめてファイルの要不要がわかれば良いのですが。</p>
<p>ちなみに私の場合は、まず、別のディレクトリに新しいバージョンをインストールして、最後にファイルをドキュメントルート以下にコピーする方式をとっています。このときアーカイブモードで転送するとファイルのタイムスタンプが新しくならず、ローカルと同期を取るのが楽になります。 FreeBSD の場合、 cp に -a オプションをつけます。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.game-create.com/archives/1814/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Akismet が日本語スパムを撃退した件</title>
		<link>http://www.game-create.com/archives/1511</link>
		<comments>http://www.game-create.com/archives/1511#comments</comments>
		<pubDate>Tue, 14 Apr 2009 15:26:20 +0000</pubDate>
		<dc:creator>Byerkut</dc:creator>
				<category><![CDATA[コンピュータ]]></category>
		<category><![CDATA[Akismet]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[スパム]]></category>

		<guid isPermaLink="false">http://www.game-create.com/?p=1511</guid>
		<description><![CDATA[興味本位でスパムのリストを眺めてみたら日本語のスパムまで捕獲していました。さすが最強の呼び声高きアンチスパムプログラムです。

これ、仕事でお客様に提案してみたいのですが、当然、個別に ID を取らないといけないのでなか [...]]]></description>
			<content:encoded><![CDATA[<p>興味本位でスパムのリストを眺めてみたら日本語のスパムまで捕獲していました。さすが最強の呼び声高きアンチスパムプログラムです。</p>
<p><span id="more-1511"></span></p>
<p>これ、仕事でお客様に提案してみたいのですが、当然、個別に ID を取らないといけないのでなかなか実現しておりません。もし、ブログをひとつだけ立ち上げるようなことがあったら勧めてみたいと思います。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.game-create.com/archives/1511/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>今やインターネットは無くてはならない存在なのかもしれません</title>
		<link>http://www.game-create.com/archives/1491</link>
		<comments>http://www.game-create.com/archives/1491#comments</comments>
		<pubDate>Tue, 07 Apr 2009 14:09:37 +0000</pubDate>
		<dc:creator>Byerkut</dc:creator>
				<category><![CDATA[日記]]></category>
		<category><![CDATA[MONSTER HUNTER]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[カーナビ]]></category>
		<category><![CDATA[カフェ]]></category>
		<category><![CDATA[モバイル]]></category>
		<category><![CDATA[ワンセグ]]></category>

		<guid isPermaLink="false">http://www.game-create.com/?p=1491</guid>
		<description><![CDATA[このブログって更新が飛び飛びになることが多いのですが、理由のひとつがインターネット環境が常にないというものです。

WordPress には予約投稿という便利な機能があるのですが、本当にリアルタイムで差し込みたいトピック [...]]]></description>
			<content:encoded><![CDATA[<p>このブログって更新が飛び飛びになることが多いのですが、理由のひとつがインターネット環境が常にないというものです。</p>
<p><span id="more-1491"></span></p>
<p>WordPress には予約投稿という便利な機能があるのですが、本当にリアルタイムで差し込みたいトピックがあったときに困るのであまり使っていません。</p>
<p>インターネットが必要なときは無線 LAN が使える近くのカフェなどに入るのですが、周りのお客さんも割と楽しそうで安心しています（いえ、漠然と不景気ですので）。</p>
<p>少し周りを気にしてみると、意外にも携帯ゲームの対戦プレイが熱そうで驚きました。人気のモンハンとかならわかるのですが、割といろんなゲームで楽しまれているようです。また、ワンセグでテレビ観ている人も普通にいらっしゃいます。携帯でテレビとはいかに？と疑問に思っていた新機能ですが、結構使われているようですね（実は私もよく使います）。</p>
<p>ちなみにワンセグというのは、「全１３セグメント中の１セグメントを使ってモバイル向けに地デジのデータを凝縮してお送りしております」ということなんですね。全部受信できる場合はフルセグとかいうらしいです（カーナビとか）。</p>
<p>カーナビといえば我が家では新車が到着しました。日産キューブです。でも、キューブはこれで３台目なんですよね。何かにとりつかれている一家です。</p>
<p>とりとめのない日記でした。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.game-create.com/archives/1491/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>いろいろお知らせ 2008/04/28 版</title>
		<link>http://www.game-create.com/archives/340</link>
		<comments>http://www.game-create.com/archives/340#comments</comments>
		<pubDate>Mon, 28 Apr 2008 12:56:40 +0000</pubDate>
		<dc:creator>Byerkut</dc:creator>
				<category><![CDATA[お知らせ]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[プラグイン]]></category>
		<category><![CDATA[まどか]]></category>
		<category><![CDATA[メルマガ]]></category>

		<guid isPermaLink="false">http://www.game-create.com/?p=340</guid>
		<description><![CDATA[いろいろお知らせです。

今週のメルマガについて
紹介しているサンプルプログラムに誤りがあり、修正版をアップロードしました。とりわけ問題は起こらないようなのですが、気になる方は再ダウンロードください。
どんな間違いかとい [...]]]></description>
			<content:encoded><![CDATA[<p>いろいろお知らせです。</p>
<p><span id="more-340"></span></p>
<h4>今週のメルマガについて</h4>
<p>紹介しているサンプルプログラムに誤りがあり、修正版をアップロードしました。とりわけ問題は起こらないようなのですが、気になる方は再ダウンロードください。</p>
<p>どんな間違いかというと、名前空間の中で名前空間を修飾してしまったという内容です。不思議とコンパイルエラーにならないんですね。まぁ、間違いであり、間違いではないような気もするのですが、たぶん自分の理解不足だと思います。</p>
<h4>マカロニズルームへのバナー変更</h4>
<p>マカロニズルームへのリンクバナーを変更しました。こちらの方がポピュラーのようです。サーバの負荷が心配でしたので、ダウンロードして利用させていただいております。</p>
<h4>サイトが不調です</h4>
<p>WordPress を新しくしたのですが、対応していないプラグインが多いらしく動作が不安定になっております。万一、エラーなどに遭遇されてしまいましたら申し訳ないです。見つけては直しておりますので、しばらくすれば安定してくると思われます。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.game-create.com/archives/340/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPress 2.5 へアップグレード</title>
		<link>http://www.game-create.com/archives/330</link>
		<comments>http://www.game-create.com/archives/330#comments</comments>
		<pubDate>Fri, 18 Apr 2008 13:00:18 +0000</pubDate>
		<dc:creator>Byerkut</dc:creator>
				<category><![CDATA[日記]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://www.game-create.com/?p=330</guid>
		<description><![CDATA[WordPress を 2.3 から 2.5 へアップグレードしてみました。

WordPress というのはこのブログを動かしているプログラムのことです。残念ながら、訪問者のみなさまから見えるページは変化ありませんが、 [...]]]></description>
			<content:encoded><![CDATA[<p>WordPress を 2.3 から 2.5 へアップグレードしてみました。</p>
<p><span id="more-330"></span></p>
<p>WordPress というのはこのブログを動かしているプログラムのことです。残念ながら、訪問者のみなさまから見えるページは変化ありませんが、管理側のデザインが一新されました。かなりスタイリッシュです。</p>
<p>ぜひとも、自分で作ったゲームの WEB サイトを構築する際には WordPress を検討ください！私で良ければ力になります！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.game-create.com/archives/330/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>サイト内検索機能の不具合を修正しました</title>
		<link>http://www.game-create.com/archives/287</link>
		<comments>http://www.game-create.com/archives/287#comments</comments>
		<pubDate>Sun, 09 Mar 2008 15:45:49 +0000</pubDate>
		<dc:creator>Byerkut</dc:creator>
				<category><![CDATA[お知らせ]]></category>
		<category><![CDATA[UNICODE]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[プラグイン]]></category>

		<guid isPermaLink="false">http://www.game-create.com/?p=287</guid>
		<description><![CDATA[WordPress 2.3.x の検索機能がうまく動作しない不具合があったのですが、これに対処しました。

WordPress 2.3.x は UTF-8 が基本となっているのですが、データベースのバージョンが古いなどの [...]]]></description>
			<content:encoded><![CDATA[<p>WordPress 2.3.x の検索機能がうまく動作しない不具合があったのですが、これに対処しました。</p>
<p><span id="more-287"></span></p>
<p>WordPress 2.3.x は UTF-8 が基本となっているのですが、データベースのバージョンが古いなどの理由から文字コードがあわせられない環境では検索機能がうまく動きませんでした。ホスティング環境にあるとこの問題に直面しやすいです（ MySQL のバージョンが古くて UTF-8 に対応していない場合が多い）。</p>
<p>実は、古いバージョンの WordPress を使って EUC-JP などで運用すればこの問題は解決するのですが、やはり最新版でないとセキュリティ面で不安があることと、仕事でも WordPress を使う機会が出てきたという理由から、重い腰を上げて検索機能修復プラグインを作ってみました。</p>
<p>作ったプラグインは、とりあえずウチでテストしています。本家で対応されなそうだったら公開しようと思います。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.game-create.com/archives/287/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>WordPress プラグインのサンプル</title>
		<link>http://www.game-create.com/archives/259</link>
		<comments>http://www.game-create.com/archives/259#comments</comments>
		<pubDate>Sat, 16 Feb 2008 13:24:55 +0000</pubDate>
		<dc:creator>Byerkut</dc:creator>
				<category><![CDATA[コンピュータ]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[サンプル]]></category>
		<category><![CDATA[プラグイン]]></category>

		<guid isPermaLink="false">http://www.game-create.com/?p=259</guid>
		<description><![CDATA[WordPress で階層化コンテンツ管理を補助するためのプラグインを作りました。
記念にソースを公開しておきますので、自分でプラグインを作ってみたい方は参考にしてみてください。

&#60;?php
/*
Plugi [...]]]></description>
			<content:encoded><![CDATA[<p>WordPress で階層化コンテンツ管理を補助するためのプラグインを作りました。</p>
<p>記念にソースを公開しておきますので、自分でプラグインを作ってみたい方は参考にしてみてください。</p>
<p><span id="more-259"></span></p>
<div class="hl-surround" style="height:280px;"><div class="hl-main"><pre><span class="hl-inlinetags">&lt;?php
</span><span class="hl-comment">/*
Plugin Name: Hierarchical document
Plugin URI: </span><span class="hl-url">http://www.game-create.com/</span><span class="hl-comment">
Description: WordPress で階層化コンテンツを管理するために必要な関数群を提供します。
Author: Byerkut
Version: 1.0
Author URI: </span><span class="hl-url">http://www.game-create.com/menu/profile
</span><span class="hl-comment">*/

/**
 * 階層化コンテンツを管理するために必要なメソッドを提供する
 */
</span><span class="hl-reserved">class </span><span class="hl-identifier">HierarchicalDocument
</span><span class="hl-brackets">{
    </span><span class="hl-comment">/**
     * デバッグ情報
     *</span><span class="hl-inlinedoc"> @access </span><span class="hl-comment">private
     *</span><span class="hl-inlinedoc"> @var </span><span class="hl-comment">mixed
     */
    </span><span class="hl-reserved">var </span><span class="hl-var">$__debug</span><span class="hl-code">;

    </span><span class="hl-comment">/**
     * デバッグ情報を保存する
     *
     *</span><span class="hl-inlinedoc"> @params </span><span class="hl-comment">mixed $debugInfo デバッグ情報
     */
    </span><span class="hl-reserved">function </span><span class="hl-identifier">debug</span><span class="hl-brackets">(</span><span class="hl-var">$debugInfo</span><span class="hl-brackets">)
    {
        </span><span class="hl-var">$this</span><span class="hl-code">-&gt;</span><span class="hl-identifier">__debug</span><span class="hl-code"> = </span><span class="hl-var">$debugInfo</span><span class="hl-code">;
    </span><span class="hl-brackets">}

    </span><span class="hl-comment">/**
     * デバッグ情報を取得する
     *
     *</span><span class="hl-inlinedoc"> @return </span><span class="hl-comment">mixed デバッグ情報
     */
    </span><span class="hl-reserved">function </span><span class="hl-identifier">getDebug</span><span class="hl-brackets">()
    {
        </span><span class="hl-reserved">return </span><span class="hl-var">$this</span><span class="hl-code">-&gt;</span><span class="hl-identifier">__debug</span><span class="hl-code">;
    </span><span class="hl-brackets">}

    </span><span class="hl-comment">/**
     * 指定した記事のオブジェクトを返す
     *
     *</span><span class="hl-inlinedoc"> @access </span><span class="hl-comment">public
     *</span><span class="hl-inlinedoc"> @param </span><span class="hl-comment">integer $id 取得する記事の ID
     *</span><span class="hl-inlinedoc"> @return </span><span class="hl-comment">object 記事
     */
    </span><span class="hl-reserved">function </span><span class="hl-identifier">getPost</span><span class="hl-brackets">(</span><span class="hl-var">$id</span><span class="hl-code"> = </span><span class="hl-reserved">null</span><span class="hl-brackets">)
    {
        </span><span class="hl-reserved">if </span><span class="hl-brackets">(</span><span class="hl-identifier">is_null</span><span class="hl-brackets">(</span><span class="hl-var">$id</span><span class="hl-brackets">)) {
            </span><span class="hl-reserved">return </span><span class="hl-var">$this</span><span class="hl-code">-&gt;</span><span class="hl-identifier">getCurrentPost</span><span class="hl-brackets">()</span><span class="hl-code">;
        </span><span class="hl-brackets">}

        </span><span class="hl-reserved">global </span><span class="hl-var">$wpdb</span><span class="hl-code">;

        </span><span class="hl-var">$sql</span><span class="hl-code"> = </span><span class="hl-identifier">sprintf</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">SELECT %s FROM %s WHERE %s</span><span class="hl-quotes">&quot;</span><span class="hl-code">,
                       </span><span class="hl-quotes">&quot;</span><span class="hl-string">*</span><span class="hl-quotes">&quot;</span><span class="hl-code">,
                       </span><span class="hl-var">$wpdb</span><span class="hl-code">-&gt;</span><span class="hl-identifier">posts</span><span class="hl-code">,
                       </span><span class="hl-quotes">&quot;</span><span class="hl-string">ID = </span><span class="hl-quotes">&quot;</span><span class="hl-code">. </span><span class="hl-var">$id</span><span class="hl-brackets">)</span><span class="hl-code">;
        </span><span class="hl-var">$post</span><span class="hl-code"> = </span><span class="hl-var">$wpdb</span><span class="hl-code">-&gt;</span><span class="hl-identifier">get_row</span><span class="hl-brackets">(</span><span class="hl-var">$sql</span><span class="hl-code">, </span><span class="hl-identifier">OBJECT</span><span class="hl-brackets">)</span><span class="hl-code">;

        </span><span class="hl-reserved">return </span><span class="hl-var">$post</span><span class="hl-code">;
    </span><span class="hl-brackets">}

    </span><span class="hl-comment">/**
     * 現在のクエリが特定している記事のオブジェクトを返す
     *
     *</span><span class="hl-inlinedoc"> @access </span><span class="hl-comment">public
     *</span><span class="hl-inlinedoc"> @return </span><span class="hl-comment">object 現在の記事
     */
    </span><span class="hl-reserved">function </span><span class="hl-identifier">getCurrentPost</span><span class="hl-brackets">()
    {
        </span><span class="hl-reserved">global </span><span class="hl-var">$wp_query</span><span class="hl-code">;

        </span><span class="hl-comment">// 記事でもページでもない場合は戻る
        </span><span class="hl-reserved">if </span><span class="hl-brackets">(</span><span class="hl-code">!</span><span class="hl-identifier">is_single</span><span class="hl-brackets">()</span><span class="hl-code"> &amp;&amp; !</span><span class="hl-identifier">is_page</span><span class="hl-brackets">()) {
            </span><span class="hl-reserved">return false</span><span class="hl-code">;
        </span><span class="hl-brackets">}

        </span><span class="hl-comment">// 記事が取得できていない場合は戻る
        </span><span class="hl-reserved">if </span><span class="hl-brackets">(</span><span class="hl-code">!</span><span class="hl-reserved">isset</span><span class="hl-brackets">(</span><span class="hl-var">$wp_query</span><span class="hl-code">-&gt;</span><span class="hl-identifier">post</span><span class="hl-brackets">)) {
            </span><span class="hl-reserved">return false</span><span class="hl-code">;
        </span><span class="hl-brackets">}

        </span><span class="hl-comment">// 記事が１つに絞られていない場合は戻る
        </span><span class="hl-reserved">if </span><span class="hl-brackets">(</span><span class="hl-code">!</span><span class="hl-identifier">is_object</span><span class="hl-brackets">(</span><span class="hl-var">$wp_query</span><span class="hl-code">-&gt;</span><span class="hl-identifier">post</span><span class="hl-brackets">)) {
            </span><span class="hl-reserved">return false</span><span class="hl-code">;
        </span><span class="hl-brackets">}

        </span><span class="hl-reserved">return </span><span class="hl-var">$wp_query</span><span class="hl-code">-&gt;</span><span class="hl-identifier">post</span><span class="hl-code">;
    </span><span class="hl-brackets">}

    </span><span class="hl-comment">/**
     * 前の記事を取得する
     *
     *</span><span class="hl-inlinedoc"> @access </span><span class="hl-comment">public
     *</span><span class="hl-inlinedoc"> @return </span><span class="hl-comment">object 前の記事
     */
    </span><span class="hl-reserved">function </span><span class="hl-identifier">getPreviousPost</span><span class="hl-brackets">()
    {
        </span><span class="hl-reserved">if </span><span class="hl-brackets">((</span><span class="hl-var">$post</span><span class="hl-code"> = </span><span class="hl-var">$this</span><span class="hl-code">-&gt;</span><span class="hl-identifier">getCurrentPost</span><span class="hl-brackets">())</span><span class="hl-code"> == </span><span class="hl-reserved">false</span><span class="hl-brackets">) {
            </span><span class="hl-reserved">return </span><span class="hl-number">0</span><span class="hl-code">;
        </span><span class="hl-brackets">}

        </span><span class="hl-reserved">global </span><span class="hl-var">$wpdb</span><span class="hl-code">;

        </span><span class="hl-var">$where</span><span class="hl-code"> = </span><span class="hl-reserved">array</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">menu_order &lt;</span><span class="hl-quotes">&quot;</span><span class="hl-code">. </span><span class="hl-var">$post</span><span class="hl-code">-&gt;</span><span class="hl-identifier">menu_order</span><span class="hl-code">,
                       </span><span class="hl-quotes">&quot;</span><span class="hl-string">post_parent = </span><span class="hl-quotes">&quot;</span><span class="hl-code">. </span><span class="hl-var">$post</span><span class="hl-code">-&gt;</span><span class="hl-identifier">post_parent</span><span class="hl-code">,
                       </span><span class="hl-quotes">&quot;</span><span class="hl-string">post_status = 'publish'</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">)</span><span class="hl-code">;

        </span><span class="hl-var">$sql</span><span class="hl-code"> = </span><span class="hl-identifier">sprintf</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">SELECT %s FROM %s WHERE %s ORDER BY %s LIMIT 1</span><span class="hl-quotes">&quot;</span><span class="hl-code">,
                       </span><span class="hl-quotes">&quot;</span><span class="hl-string">*</span><span class="hl-quotes">&quot;</span><span class="hl-code">,
                       </span><span class="hl-var">$wpdb</span><span class="hl-code">-&gt;</span><span class="hl-identifier">posts</span><span class="hl-code">,
                       </span><span class="hl-quotes">&quot;</span><span class="hl-string">(</span><span class="hl-quotes">&quot;</span><span class="hl-code">. </span><span class="hl-identifier">join</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">) AND (</span><span class="hl-quotes">&quot;</span><span class="hl-code">, </span><span class="hl-var">$where</span><span class="hl-brackets">)</span><span class="hl-code">. </span><span class="hl-quotes">&quot;</span><span class="hl-string">)</span><span class="hl-quotes">&quot;</span><span class="hl-code">,
                       </span><span class="hl-quotes">&quot;</span><span class="hl-string">menu_order DESC</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">)</span><span class="hl-code">;
        </span><span class="hl-var">$post</span><span class="hl-code"> = </span><span class="hl-var">$wpdb</span><span class="hl-code">-&gt;</span><span class="hl-identifier">get_row</span><span class="hl-brackets">(</span><span class="hl-var">$sql</span><span class="hl-code">, </span><span class="hl-identifier">OBJECT</span><span class="hl-brackets">)</span><span class="hl-code">;

        </span><span class="hl-reserved">return </span><span class="hl-var">$post</span><span class="hl-code">;
    </span><span class="hl-brackets">}

    </span><span class="hl-comment">/**
     * 次の記事を取得する
     *
     *</span><span class="hl-inlinedoc"> @access </span><span class="hl-comment">public
     *</span><span class="hl-inlinedoc"> @return </span><span class="hl-comment">object 次の記事
     */
    </span><span class="hl-reserved">function </span><span class="hl-identifier">getNextPost</span><span class="hl-brackets">()
    {
        </span><span class="hl-reserved">if </span><span class="hl-brackets">((</span><span class="hl-var">$post</span><span class="hl-code"> = </span><span class="hl-var">$this</span><span class="hl-code">-&gt;</span><span class="hl-identifier">getCurrentPost</span><span class="hl-brackets">())</span><span class="hl-code"> == </span><span class="hl-reserved">false</span><span class="hl-brackets">) {
            </span><span class="hl-reserved">return </span><span class="hl-number">0</span><span class="hl-code">;
        </span><span class="hl-brackets">}

        </span><span class="hl-reserved">global </span><span class="hl-var">$wpdb</span><span class="hl-code">;

        </span><span class="hl-var">$where</span><span class="hl-code"> = </span><span class="hl-reserved">array</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">menu_order &gt; </span><span class="hl-quotes">&quot;</span><span class="hl-code">. </span><span class="hl-var">$post</span><span class="hl-code">-&gt;</span><span class="hl-identifier">menu_order</span><span class="hl-code">,
                       </span><span class="hl-quotes">&quot;</span><span class="hl-string">post_parent = </span><span class="hl-quotes">&quot;</span><span class="hl-code">. </span><span class="hl-var">$post</span><span class="hl-code">-&gt;</span><span class="hl-identifier">post_parent</span><span class="hl-code">,
                       </span><span class="hl-quotes">&quot;</span><span class="hl-string">post_status = 'publish'</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">)</span><span class="hl-code">;

        </span><span class="hl-var">$sql</span><span class="hl-code"> = </span><span class="hl-identifier">sprintf</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">SELECT %s FROM %s WHERE %s ORDER BY %s LIMIT 1</span><span class="hl-quotes">&quot;</span><span class="hl-code">,
                       </span><span class="hl-quotes">&quot;</span><span class="hl-string">*</span><span class="hl-quotes">&quot;</span><span class="hl-code">,
                       </span><span class="hl-var">$wpdb</span><span class="hl-code">-&gt;</span><span class="hl-identifier">posts</span><span class="hl-code">,
                       </span><span class="hl-quotes">&quot;</span><span class="hl-string">(</span><span class="hl-quotes">&quot;</span><span class="hl-code">. </span><span class="hl-identifier">join</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">) AND (</span><span class="hl-quotes">&quot;</span><span class="hl-code">, </span><span class="hl-var">$where</span><span class="hl-brackets">)</span><span class="hl-code">. </span><span class="hl-quotes">&quot;</span><span class="hl-string">)</span><span class="hl-quotes">&quot;</span><span class="hl-code">,
                       </span><span class="hl-quotes">&quot;</span><span class="hl-string">menu_order ASC</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">)</span><span class="hl-code">;
        </span><span class="hl-var">$post</span><span class="hl-code"> = </span><span class="hl-var">$wpdb</span><span class="hl-code">-&gt;</span><span class="hl-identifier">get_row</span><span class="hl-brackets">(</span><span class="hl-var">$sql</span><span class="hl-code">, </span><span class="hl-identifier">OBJECT</span><span class="hl-brackets">)</span><span class="hl-code">;

        </span><span class="hl-reserved">return </span><span class="hl-var">$post</span><span class="hl-code">;
    </span><span class="hl-brackets">}

    </span><span class="hl-comment">/**
     * 現在の記事が所属するトップ記事の ID を取得する
     *
     *</span><span class="hl-inlinedoc"> @access </span><span class="hl-comment">public
     *</span><span class="hl-inlinedoc"> @param </span><span class="hl-comment">integer $topParentID トップ記事の親 ID
     *</span><span class="hl-inlinedoc"> @return </span><span class="hl-comment">integer トップ記事の ID
     */
    </span><span class="hl-reserved">function </span><span class="hl-identifier">getTopPostID</span><span class="hl-brackets">(</span><span class="hl-var">$topParentID</span><span class="hl-code"> = </span><span class="hl-number">0</span><span class="hl-brackets">)
    {
        </span><span class="hl-reserved">if </span><span class="hl-brackets">((</span><span class="hl-var">$post</span><span class="hl-code"> = </span><span class="hl-var">$this</span><span class="hl-code">-&gt;</span><span class="hl-identifier">getCurrentPost</span><span class="hl-brackets">())</span><span class="hl-code"> == </span><span class="hl-reserved">false</span><span class="hl-brackets">) {
            </span><span class="hl-reserved">return </span><span class="hl-number">0</span><span class="hl-code">;
        </span><span class="hl-brackets">}

        </span><span class="hl-comment">// 親がルートでない場合は再帰的に取得
        </span><span class="hl-reserved">if </span><span class="hl-brackets">(</span><span class="hl-var">$topParentID</span><span class="hl-code"> != </span><span class="hl-var">$post</span><span class="hl-code">-&gt;</span><span class="hl-identifier">post_parent</span><span class="hl-brackets">) {
            </span><span class="hl-reserved">return </span><span class="hl-var">$this</span><span class="hl-code">-&gt;</span><span class="hl-identifier">__findTopPostID</span><span class="hl-brackets">(</span><span class="hl-var">$topParentID</span><span class="hl-code">,
                                          </span><span class="hl-var">$post</span><span class="hl-code">-&gt;</span><span class="hl-identifier">post_parent</span><span class="hl-brackets">)</span><span class="hl-code">;
        </span><span class="hl-brackets">}

        </span><span class="hl-reserved">return </span><span class="hl-var">$post</span><span class="hl-code">-&gt;</span><span class="hl-identifier">ID</span><span class="hl-code">;
    </span><span class="hl-brackets">}

    </span><span class="hl-comment">/**
     * HierarchicalDocument::getTopPostID() の内部メソッド
     *
     * 指定した ID の親記事を検索する
     *
     *</span><span class="hl-inlinedoc"> @access </span><span class="hl-comment">private
     *</span><span class="hl-inlinedoc"> @param </span><span class="hl-comment">integer $topParentID トップ記事の親 ID
     *</span><span class="hl-inlinedoc"> @param </span><span class="hl-comment">integer $targetID 親記事の ID
     *</span><span class="hl-inlinedoc"> @return </span><span class="hl-comment">integer トップ記事の ID
     */
    </span><span class="hl-reserved">function </span><span class="hl-identifier">__findTopPostID</span><span class="hl-brackets">(</span><span class="hl-var">$topParentID</span><span class="hl-code">, </span><span class="hl-var">$target_id</span><span class="hl-brackets">)
    {
        </span><span class="hl-reserved">global </span><span class="hl-var">$wpdb</span><span class="hl-code">;

        </span><span class="hl-comment">// てっぺんにたどり着いてしまったら戻る
        </span><span class="hl-reserved">if </span><span class="hl-brackets">(</span><span class="hl-var">$target_id</span><span class="hl-code"> == </span><span class="hl-number">0</span><span class="hl-brackets">) {
            </span><span class="hl-reserved">return </span><span class="hl-number">0</span><span class="hl-code">;
        </span><span class="hl-brackets">}

        </span><span class="hl-comment">// 親ページの親 ID を求める
        </span><span class="hl-var">$sql</span><span class="hl-code"> = </span><span class="hl-identifier">sprintf</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">SELECT %s FROM %s WHERE %s</span><span class="hl-quotes">&quot;</span><span class="hl-code">,
                       </span><span class="hl-quotes">&quot;</span><span class="hl-string">post_parent</span><span class="hl-quotes">&quot;</span><span class="hl-code">,
                       </span><span class="hl-var">$wpdb</span><span class="hl-code">-&gt;</span><span class="hl-identifier">posts</span><span class="hl-code">,
                       </span><span class="hl-quotes">&quot;</span><span class="hl-string">ID = </span><span class="hl-quotes">&quot;</span><span class="hl-code">. </span><span class="hl-var">$target_id</span><span class="hl-brackets">)</span><span class="hl-code">;
        </span><span class="hl-var">$post_parent</span><span class="hl-code"> = </span><span class="hl-var">$wpdb</span><span class="hl-code">-&gt;</span><span class="hl-identifier">get_var</span><span class="hl-brackets">(</span><span class="hl-var">$sql</span><span class="hl-brackets">)</span><span class="hl-code">;

        </span><span class="hl-comment">// 親がルートでない場合は再帰的に取得
        </span><span class="hl-reserved">if </span><span class="hl-brackets">(</span><span class="hl-var">$topParentID</span><span class="hl-code"> != </span><span class="hl-var">$post_parent</span><span class="hl-brackets">) {
            </span><span class="hl-reserved">return </span><span class="hl-var">$this</span><span class="hl-code">-&gt;</span><span class="hl-identifier">__findTopPostID</span><span class="hl-brackets">(</span><span class="hl-var">$topParentID</span><span class="hl-code">,
                                          </span><span class="hl-var">$post_parent</span><span class="hl-brackets">)</span><span class="hl-code">;
        </span><span class="hl-brackets">}

        </span><span class="hl-reserved">return </span><span class="hl-var">$target_id</span><span class="hl-code">;
    </span><span class="hl-brackets">}

    </span><span class="hl-comment">/**
     * 記事が子供の記事を持っているかの真偽値を取得する
     *
     *</span><span class="hl-inlinedoc"> @access </span><span class="hl-comment">public
     *</span><span class="hl-inlinedoc"> @param </span><span class="hl-comment">integer $id 対象の記事の ID
     *</span><span class="hl-inlinedoc"> @return </span><span class="hl-comment">boolean 子供の記事を持っているかの真偽値
     */
    </span><span class="hl-reserved">function </span><span class="hl-identifier">hasChildren</span><span class="hl-brackets">(</span><span class="hl-var">$id</span><span class="hl-code"> = </span><span class="hl-reserved">null</span><span class="hl-brackets">)
    {
        </span><span class="hl-var">$post</span><span class="hl-code"> = </span><span class="hl-brackets">(</span><span class="hl-identifier">is_null</span><span class="hl-brackets">(</span><span class="hl-var">$id</span><span class="hl-brackets">))</span><span class="hl-code"> ?
            </span><span class="hl-var">$this</span><span class="hl-code">-&gt;</span><span class="hl-identifier">getCurrentPost</span><span class="hl-brackets">()</span><span class="hl-code">:
            </span><span class="hl-var">$this</span><span class="hl-code">-&gt;</span><span class="hl-identifier">getPost</span><span class="hl-brackets">(</span><span class="hl-var">$id</span><span class="hl-brackets">)</span><span class="hl-code">;

        </span><span class="hl-reserved">if </span><span class="hl-brackets">(</span><span class="hl-reserved">empty</span><span class="hl-brackets">(</span><span class="hl-var">$post</span><span class="hl-brackets">)) {
            </span><span class="hl-reserved">return false</span><span class="hl-code">;
        </span><span class="hl-brackets">}

        </span><span class="hl-reserved">global </span><span class="hl-var">$wpdb</span><span class="hl-code">;

        </span><span class="hl-var">$where</span><span class="hl-code"> = </span><span class="hl-reserved">array</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">post_parent = </span><span class="hl-quotes">&quot;</span><span class="hl-code">. </span><span class="hl-var">$post</span><span class="hl-code">-&gt;</span><span class="hl-identifier">ID</span><span class="hl-code">,
                       </span><span class="hl-quotes">&quot;</span><span class="hl-string">post_status = 'publish'</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">)</span><span class="hl-code">;
        </span><span class="hl-var">$sql</span><span class="hl-code"> = </span><span class="hl-identifier">sprintf</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">SELECT %s FROM %s WHERE %s</span><span class="hl-quotes">&quot;</span><span class="hl-code">,
                       </span><span class="hl-quotes">&quot;</span><span class="hl-string">count(*)</span><span class="hl-quotes">&quot;</span><span class="hl-code">,
                       </span><span class="hl-var">$wpdb</span><span class="hl-code">-&gt;</span><span class="hl-identifier">posts</span><span class="hl-code">,
                       </span><span class="hl-quotes">&quot;</span><span class="hl-string">(</span><span class="hl-quotes">&quot;</span><span class="hl-code">. </span><span class="hl-identifier">join</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">) AND (</span><span class="hl-quotes">&quot;</span><span class="hl-code">, </span><span class="hl-var">$where</span><span class="hl-brackets">)</span><span class="hl-code">. </span><span class="hl-quotes">&quot;</span><span class="hl-string">)</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">)</span><span class="hl-code">;
        </span><span class="hl-var">$children</span><span class="hl-code"> = </span><span class="hl-var">$wpdb</span><span class="hl-code">-&gt;</span><span class="hl-identifier">get_var</span><span class="hl-brackets">(</span><span class="hl-var">$sql</span><span class="hl-brackets">)</span><span class="hl-code">;

        </span><span class="hl-reserved">return </span><span class="hl-brackets">(</span><span class="hl-number">0</span><span class="hl-code"> &lt;</span><span class="hl-var">$children</span><span class="hl-brackets">)</span><span class="hl-code">;
    </span><span class="hl-brackets">}

    </span><span class="hl-comment">/**
     * 記事の子供となる記事のリストを取得する
     *
     *</span><span class="hl-inlinedoc"> @access </span><span class="hl-comment">public
     *</span><span class="hl-inlinedoc"> @param </span><span class="hl-comment">integer $id 対象の記事の ID
     *</span><span class="hl-inlinedoc"> @return </span><span class="hl-comment">array 子供記事のリスト
     */
    </span><span class="hl-reserved">function </span><span class="hl-identifier">getChildren</span><span class="hl-brackets">(</span><span class="hl-var">$id</span><span class="hl-code"> = </span><span class="hl-reserved">null</span><span class="hl-brackets">)
    {
        </span><span class="hl-var">$post</span><span class="hl-code"> = </span><span class="hl-brackets">(</span><span class="hl-identifier">is_null</span><span class="hl-brackets">(</span><span class="hl-var">$id</span><span class="hl-brackets">))</span><span class="hl-code"> ?
            </span><span class="hl-var">$this</span><span class="hl-code">-&gt;</span><span class="hl-identifier">getCurrentPost</span><span class="hl-brackets">()</span><span class="hl-code">:
            </span><span class="hl-var">$this</span><span class="hl-code">-&gt;</span><span class="hl-identifier">getPost</span><span class="hl-brackets">(</span><span class="hl-var">$id</span><span class="hl-brackets">)</span><span class="hl-code">;

        </span><span class="hl-reserved">if </span><span class="hl-brackets">(</span><span class="hl-reserved">empty</span><span class="hl-brackets">(</span><span class="hl-var">$post</span><span class="hl-brackets">)) {
            </span><span class="hl-reserved">return array</span><span class="hl-brackets">()</span><span class="hl-code">;
        </span><span class="hl-brackets">}

        </span><span class="hl-reserved">global </span><span class="hl-var">$wpdb</span><span class="hl-code">;

        </span><span class="hl-var">$where</span><span class="hl-code"> = </span><span class="hl-reserved">array</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">post_parent = </span><span class="hl-quotes">&quot;</span><span class="hl-code">. </span><span class="hl-var">$post</span><span class="hl-code">-&gt;</span><span class="hl-identifier">ID</span><span class="hl-code">,
                       </span><span class="hl-quotes">&quot;</span><span class="hl-string">post_status = 'publish'</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">)</span><span class="hl-code">;
        </span><span class="hl-var">$sql</span><span class="hl-code"> = </span><span class="hl-identifier">sprintf</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">SELECT %s FROM %s WHERE %s ORDER BY %s</span><span class="hl-quotes">&quot;</span><span class="hl-code">,
                       </span><span class="hl-quotes">&quot;</span><span class="hl-string">*</span><span class="hl-quotes">&quot;</span><span class="hl-code">,
                       </span><span class="hl-var">$wpdb</span><span class="hl-code">-&gt;</span><span class="hl-identifier">posts</span><span class="hl-code">,
                       </span><span class="hl-quotes">&quot;</span><span class="hl-string">(</span><span class="hl-quotes">&quot;</span><span class="hl-code">. </span><span class="hl-identifier">join</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">) AND (</span><span class="hl-quotes">&quot;</span><span class="hl-code">, </span><span class="hl-var">$where</span><span class="hl-brackets">)</span><span class="hl-code">. </span><span class="hl-quotes">&quot;</span><span class="hl-string">)</span><span class="hl-quotes">&quot;</span><span class="hl-code">,
                       </span><span class="hl-quotes">&quot;</span><span class="hl-string">menu_order ASC</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">)</span><span class="hl-code">;
        </span><span class="hl-var">$children</span><span class="hl-code"> = </span><span class="hl-var">$wpdb</span><span class="hl-code">-&gt;</span><span class="hl-identifier">get_results</span><span class="hl-brackets">(</span><span class="hl-var">$sql</span><span class="hl-code">, </span><span class="hl-identifier">OBJECT</span><span class="hl-brackets">)</span><span class="hl-code">;

        </span><span class="hl-reserved">return </span><span class="hl-var">$children</span><span class="hl-code">;
    </span><span class="hl-brackets">}

    </span><span class="hl-comment">/**
     * 記事中の [child_post_list] を子供記事のリストに展開する
     *
     * the_content のフィルタ
     *
     *</span><span class="hl-inlinedoc"> @access </span><span class="hl-comment">public
     *</span><span class="hl-inlinedoc"> @param </span><span class="hl-comment">integer $id 対象の記事の ID
     *</span><span class="hl-inlinedoc"> @return </span><span class="hl-comment">string 子供記事リストのタグ
     */
    </span><span class="hl-reserved">function </span><span class="hl-identifier">getChildPostList</span><span class="hl-brackets">(</span><span class="hl-var">$id</span><span class="hl-code"> = </span><span class="hl-reserved">null</span><span class="hl-brackets">)
    {
        </span><span class="hl-comment">// 子供がいない場合は戻る
        </span><span class="hl-reserved">if </span><span class="hl-brackets">(</span><span class="hl-code">!</span><span class="hl-var">$this</span><span class="hl-code">-&gt;</span><span class="hl-identifier">hasChildren</span><span class="hl-brackets">(</span><span class="hl-var">$id</span><span class="hl-brackets">)) {
            </span><span class="hl-reserved">return null</span><span class="hl-code">;
        </span><span class="hl-brackets">}

        </span><span class="hl-comment">// 子供を取得する
        </span><span class="hl-var">$children</span><span class="hl-code"> = </span><span class="hl-var">$this</span><span class="hl-code">-&gt;</span><span class="hl-identifier">getChildren</span><span class="hl-brackets">(</span><span class="hl-var">$id</span><span class="hl-brackets">)</span><span class="hl-code">;

        </span><span class="hl-comment">// データを整形する
        </span><span class="hl-var">$output</span><span class="hl-code"> = </span><span class="hl-quotes">&quot;</span><span class="hl-string">&lt;ul&gt;</span><span class="hl-special">\n</span><span class="hl-quotes">&quot;</span><span class="hl-code">;
        </span><span class="hl-reserved">foreach </span><span class="hl-brackets">(</span><span class="hl-var">$children </span><span class="hl-reserved">as </span><span class="hl-var">$child</span><span class="hl-brackets">) {
            </span><span class="hl-var">$format</span><span class="hl-code"> = </span><span class="hl-quotes">'</span><span class="hl-string">&lt;li class=&quot;%s&quot;&gt;&lt;a href=&quot;%s&quot;&gt;%s&lt;/a&gt;&lt;/li&gt;</span><span class="hl-quotes">'</span><span class="hl-code">;
            </span><span class="hl-var">$output</span><span class="hl-code"> .= </span><span class="hl-identifier">sprintf</span><span class="hl-brackets">(</span><span class="hl-var">$format</span><span class="hl-code">. </span><span class="hl-quotes">&quot;</span><span class="hl-special">\n</span><span class="hl-quotes">&quot;</span><span class="hl-code">,
                               </span><span class="hl-quotes">&quot;</span><span class="hl-string">page_item page-item-</span><span class="hl-quotes">&quot;</span><span class="hl-code">. </span><span class="hl-var">$child</span><span class="hl-code">-&gt;</span><span class="hl-identifier">ID</span><span class="hl-code">,
                               </span><span class="hl-identifier">get_permalink</span><span class="hl-brackets">(</span><span class="hl-var">$child</span><span class="hl-code">-&gt;</span><span class="hl-identifier">ID</span><span class="hl-brackets">)</span><span class="hl-code">,
                               </span><span class="hl-var">$child</span><span class="hl-code">-&gt;</span><span class="hl-identifier">post_title</span><span class="hl-brackets">)</span><span class="hl-code">;
        </span><span class="hl-brackets">}
        </span><span class="hl-var">$output</span><span class="hl-code"> .= </span><span class="hl-quotes">&quot;</span><span class="hl-string">&lt;/ul&gt;</span><span class="hl-special">\n</span><span class="hl-quotes">&quot;</span><span class="hl-code">;

        </span><span class="hl-reserved">return </span><span class="hl-var">$output</span><span class="hl-code">;
    </span><span class="hl-brackets">}
}

</span><span class="hl-comment">/**
 * 記事中の [child_post_list] を子供記事のリストに展開する
 *
 * the_content のフィルタ
 *
 *</span><span class="hl-inlinedoc"> @access </span><span class="hl-comment">public
 *</span><span class="hl-inlinedoc"> @params </span><span class="hl-comment">string $content 記事の本文
 *</span><span class="hl-inlinedoc"> @return </span><span class="hl-comment">string 更新した記事の本文
 */
</span><span class="hl-reserved">function </span><span class="hl-identifier">expandChildPostList</span><span class="hl-brackets">(</span><span class="hl-var">$content</span><span class="hl-brackets">)
{
    </span><span class="hl-reserved">if </span><span class="hl-brackets">(</span><span class="hl-var">$list</span><span class="hl-code"> = </span><span class="hl-var">$GLOBALS</span><span class="hl-brackets">[</span><span class="hl-quotes">&quot;</span><span class="hl-string">hrDoc</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">]</span><span class="hl-code">-&gt;</span><span class="hl-identifier">getChildPostList</span><span class="hl-brackets">()) {
        </span><span class="hl-var">$content</span><span class="hl-code"> = </span><span class="hl-identifier">preg_replace</span><span class="hl-brackets">(</span><span class="hl-quotes">'</span><span class="hl-string">/\[child_post_list\]/</span><span class="hl-quotes">'</span><span class="hl-code">,
                                </span><span class="hl-var">$list</span><span class="hl-code">,
                                </span><span class="hl-var">$content</span><span class="hl-brackets">)</span><span class="hl-code">;
    </span><span class="hl-brackets">}

    </span><span class="hl-reserved">return </span><span class="hl-var">$content</span><span class="hl-code">;
</span><span class="hl-brackets">}

</span><span class="hl-comment">/**
 * 自動的に生成する HierarchicalDocument のインスタンス
 *</span><span class="hl-inlinedoc"> @global </span><span class="hl-comment">object $hrDoc
 */
</span><span class="hl-var">$GLOBALS</span><span class="hl-brackets">[</span><span class="hl-quotes">&quot;</span><span class="hl-string">hrDoc</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">]</span><span class="hl-code"> =&amp; </span><span class="hl-reserved">new </span><span class="hl-identifier">HierarchicalDocument</span><span class="hl-brackets">()</span><span class="hl-code">;

</span><span class="hl-comment">// フィルタ追加
</span><span class="hl-identifier">add_filter</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">the_content</span><span class="hl-quotes">&quot;</span><span class="hl-code">, </span><span class="hl-quotes">&quot;</span><span class="hl-string">expandChildPostList</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-inlinetags">?&gt;</span></pre></div></div>
<p>重要な部分を解説していきます。</p>
<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-inlinetags">&lt;?php
</span><span class="hl-comment">/*
Plugin Name: Hierarchical document
Plugin URI: </span><span class="hl-url">http://www.game-create.com/</span><span class="hl-comment">
Description: WordPress で階層化コンテンツを管理するために必要な関数群を提供します。
Author: Byerkut
Version: 1.0
Author URI: </span><span class="hl-url">http://www.game-create.com/menu/profile
</span><span class="hl-comment">*/
</span><span class="hl-inlinetags">?&gt;</span></pre></div></div>
<p>これはプラグインを認識するために必要なコメントです。ソースの先頭に必ず書いてください。意味は何となくわかると思います。この情報が管理画面に出てきますので、最初はちょっと感動します。</p>
<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-inlinetags">&lt;?php
</span><span class="hl-comment">/**
 * 階層化コンテンツを管理するために必要なメソッドを提供する
 */
</span><span class="hl-reserved">class </span><span class="hl-identifier">HierarchicalDocument
</span><span class="hl-brackets">{
}
</span><span class="hl-inlinetags">?&gt;</span></pre></div></div>
<p>これは必要ではありません。クラスによってプラグインの機能を実装したかったので作りました。このようにプラグインの中には自由にクラスや関数を作ることができます。</p>
<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-inlinetags">&lt;?php
</span><span class="hl-comment">/**
 * 自動的に生成する HierarchicalDocument のインスタンス
 *</span><span class="hl-inlinedoc"> @global </span><span class="hl-comment">object $hrDoc
 */
</span><span class="hl-var">$GLOBALS</span><span class="hl-brackets">[</span><span class="hl-quotes">&quot;</span><span class="hl-string">hrDoc</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">]</span><span class="hl-code"> =&amp; </span><span class="hl-reserved">new </span><span class="hl-identifier">HierarchicalDocument</span><span class="hl-brackets">()</span><span class="hl-code">;
</span><span class="hl-inlinetags">?&gt;</span></pre></div></div>
<p>ここは少し重要です。このコードはプラグインが有効になると WordPress の初期化の段階で実行されるようになります。つまり require_once() されるのと同じイメージになります。このコードは関数やメソッドの外に書いてあるわけですので require_once() されれば自動的に実行されるというわけです。</p>
<p>なぜグローバル変数を作っているのかというと、このグローバル変数があるかないかによって、テンプレート内からプラグインが有効になっているかなっていないかを判断するためです。次のようにして使います。</p>
<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-inlinetags">&lt;?php
</span><span class="hl-reserved">if </span><span class="hl-brackets">(</span><span class="hl-reserved">isset</span><span class="hl-brackets">(</span><span class="hl-var">$GLOBALS</span><span class="hl-brackets">[</span><span class="hl-quotes">&quot;</span><span class="hl-string">hrDoc</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">])) {
  </span><span class="hl-comment">// プラグインが有効になっているときのみプラグインの機能を使う
</span><span class="hl-brackets">}
</span><span class="hl-inlinetags">?&gt;</span></pre></div></div>
<p>この判断は必須ではありませんが、プラグインを無効にした際にエラーに遭遇する可能性があります。また、プラグインの動作が後述のフィルタやアクションで完結する場合はこの判断は不要です（というか書く場所がありません）。</p>
<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-inlinetags">&lt;?php
</span><span class="hl-comment">// フィルタ追加
</span><span class="hl-identifier">add_filter</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">the_content</span><span class="hl-quotes">&quot;</span><span class="hl-code">, </span><span class="hl-quotes">&quot;</span><span class="hl-string">expandChildPostList</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">)</span><span class="hl-code">;
</span><span class="hl-inlinetags">?&gt;</span></pre></div></div>
<p>ここもキモです。このコードによって WordPress が公開するプログラムのフックポイントにユーザコードを登録します。第１引数にはフックポイントの名前、第２引数にはフックしたい関数の名前を指定します。もし、クラスのメソッドを指定したい場合は array(&#038;$instance, &#8220;methodName&#8221;) のように配列で指定します。</p>
<p>フックポイントにはアクションとフィルタの２種類あります。アクションとは新規記事の保存やメールの送信など、なんらかの動作（変化）を伴う機能に対するフックポイントです。フィルタとは記事の内容表示やコメントの内容表示など、表示の機能に対するフックポイントです。</p>
<p>今回の例にある add_filter() はフィルタにユーザコードを登録する関数で、アクションにユーザコードを登録するためには add_action() を使います。</p>
<p>アクションとフィルタのフックポイントの一覧は次のページにまとめられています。英語ですが、なんとなく読めると思います。</p>
<ul>
<li><a href="http://codex.wordpress.org/Plugin_API/Action_Reference" class="external">アクションのフックポイント</a></li>
<li><a href="http://codex.wordpress.org/Plugin_API/Filter_Reference" class="external">フィルタのフックポイント</a></li>
</ul>
<p>add_action() や add_filter() によって登録された関数やメソッドが WordPress から呼ばれる際に引数を伴う場合があります。今回は the_content というフックポイントに expandChildPostList() という関数を登録していますが、この関数には $content という引数がひとつ渡されます。ここには投稿内容が入っており、この変数を編集して戻り値として返すことによって、記事の内容が表示される際に expandChildPostList() の実行結果で内容をフィルタリングすることができるようになります。 the_content とは記事が表示される際のフックポイントです。</p>
<p>急ぎ足でしたが WordPress のプラグインの作り方のさわりの部分は押さえることができたと思います。管理画面を作ったり、テーブルを追加したりするには、まだまだ知らなければならないことがたくさんあるのですが、時間がありましたら公開したいと思います。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.game-create.com/archives/259/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>ブログのコンテンツ管理機能を強化中です</title>
		<link>http://www.game-create.com/archives/253</link>
		<comments>http://www.game-create.com/archives/253#comments</comments>
		<pubDate>Mon, 11 Feb 2008 14:39:13 +0000</pubDate>
		<dc:creator>Byerkut</dc:creator>
				<category><![CDATA[日記]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://www.game-create.com/?p=253</guid>
		<description><![CDATA[ただいま、ブログのコンテンツ管理機能を強化しています。

以前からメルマガのフォローや初心者向けのコンテンツをブログとは別に用意したいと思っていたのですが、実は WordPress の制約でなかなか実現に至りませんでした [...]]]></description>
			<content:encoded><![CDATA[<p>ただいま、ブログのコンテンツ管理機能を強化しています。</p>
<p><span id="more-253"></span></p>
<p>以前からメルマガのフォローや初心者向けのコンテンツをブログとは別に用意したいと思っていたのですが、実は WordPress の制約でなかなか実現に至りませんでした。</p>
<p>ここへきて、ようやく重い腰を上げた Byerkut さん。 WordPress に足りない関数をズガガガーっとコーディングしてみましたよ。久々に生の PHP を書きました。</p>
<p>今後は連載企画がポコポコとアップされることと思われます。手始めに「これからゲームプログラミングを始める方へ」というテーマでアイデアをアウトラインプロセッサに入力しています。逐次アップにしようか、一括アップにしようか、ちと思案中です…</p>
<p>それにしてもブログエンジンの内部に詳しくなってしまいました。本が一冊書けてしまうかもしれません。とりあえず今書いている本ができあがったら考えます。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.game-create.com/archives/253/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>phphlstring で意図しない行スペースが空いてしまう問題</title>
		<link>http://www.game-create.com/archives/39</link>
		<comments>http://www.game-create.com/archives/39#comments</comments>
		<pubDate>Sat, 18 Aug 2007 02:04:41 +0000</pubDate>
		<dc:creator>Byerkut</dc:creator>
				<category><![CDATA[コンピュータ]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[プラグイン]]></category>

		<guid isPermaLink="false">http://www.game-create.com/?p=39</guid>
		<description><![CDATA[以前のエントリーのように C++ のコードを掲載して phphlstring という技術（プラグイン）を使って色分けする場合、行コメントの次に :: で始まるシンボルがあると無駄に空白が空いてしまうようです。

2007 [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.game-create.com/archives/9">以前のエントリー</a>のように C++ のコードを掲載して phphlstring という技術（プラグイン）を使って色分けする場合、行コメントの次に :: で始まるシンボルがあると無駄に空白が空いてしまうようです。</p>
<p><span id="more-39"></span></p>
<p>2007/09/25 追記： IE では再現しないようです。</p>
<p>状況</p>
<div class="hl-surround" ><div class="hl-main"><pre><span class="hl-comment">// 行コメントです</span><span class="hl-default">
::</span><span class="hl-identifier">SomeGlobalVariable</span><span class="hl-default">; </span><span class="hl-comment">// :: で始まるシンボルです</span></pre></div></div>
<p>みごとに行が空いていますね。</p>
<p>解決策は :: をつけないでグローバルスコープを指定するしかないようです。 Windows API はシンボルが長いので自分が作ったシンボルと名前がバッティングすることはないとは思いますけど…</p>
]]></content:encoded>
			<wfw:commentRss>http://www.game-create.com/archives/39/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

