<?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; プラグイン</title>
	<atom:link href="http://www.game-create.com/archives/tag/%e3%83%97%e3%83%a9%e3%82%b0%e3%82%a4%e3%83%b3/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/3478</link>
		<comments>http://www.game-create.com/archives/3478#comments</comments>
		<pubDate>Mon, 07 Jun 2010 14:22:30 +0000</pubDate>
		<dc:creator>Byerkut</dc:creator>
				<category><![CDATA[ゲームプログラミング]]></category>
		<category><![CDATA[Emacs]]></category>
		<category><![CDATA[Emacs Lisp]]></category>
		<category><![CDATA[ゲームエンジン]]></category>
		<category><![CDATA[プラグイン]]></category>
		<category><![CDATA[備忘録]]></category>
		<category><![CDATA[書籍]]></category>

		<guid isPermaLink="false">http://www.game-create.com/?p=3478</guid>
		<description><![CDATA[プラグイン対応するためには、コアだけはもちろん自分の方で作るのですが、付随する基本機能もプラグインで作っていくという方向性が良いのかもしれません。

いつもながら抽象的な表現ですが、 Emacs の elisp みたいな [...]]]></description>
			<content:encoded><![CDATA[<p>プラグイン対応するためには、コアだけはもちろん自分の方で作るのですが、付随する基本機能もプラグインで作っていくという方向性が良いのかもしれません。</p>
<p><span id="more-3478"></span></p>
<p>いつもながら抽象的な表現ですが、 Emacs の elisp みたいなイメージです（一緒についてくる elisp を基本機能というには語弊がありますが）。他ならぬ自分自身がプラグイン仕様のユーザーであるという立場になることで、要件の不足などを発見できるかもしれません。</p>
<p><a href="http://www.amazon.co.jp/%E3%82%B2%E3%83%BC%E3%83%A0%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%B3%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0-GAME-DEVELOPER-%E8%B5%A4%E5%9D%82-%E7%8E%B2%E9%9F%B3/dp/4797331976/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1275960371&amp;sr=8-1" class="external">Amazon.co.jp： ゲームエンジンプログラミング GAME DEVELOPER: 赤坂 玲音: 本</a></p>
<p>この辺、もっかい目を通してみましょうか…</p>
]]></content:encoded>
			<wfw:commentRss>http://www.game-create.com/archives/3478/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>bluewind から Launchy に乗り換えました</title>
		<link>http://www.game-create.com/archives/3385</link>
		<comments>http://www.game-create.com/archives/3385#comments</comments>
		<pubDate>Tue, 25 May 2010 14:51:45 +0000</pubDate>
		<dc:creator>Byerkut</dc:creator>
				<category><![CDATA[コンピュータ]]></category>
		<category><![CDATA[Launchy]]></category>
		<category><![CDATA[twitter]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Windows Vista]]></category>
		<category><![CDATA[キーボード]]></category>
		<category><![CDATA[プラグイン]]></category>
		<category><![CDATA[ランチャー]]></category>

		<guid isPermaLink="false">http://www.game-create.com/?p=3385</guid>
		<description><![CDATA[bluewind がメンテナンスされないようでして、 Windows Vista 以降はホットキーを設定するのも大変だったこともあり、 Launchy に乗り換えです。
Launchy: The Open Source  [...]]]></description>
			<content:encoded><![CDATA[<p>bluewind がメンテナンスされないようでして、 Windows Vista 以降はホットキーを設定するのも大変だったこともあり、 Launchy に乗り換えです。</p>
<p><a href="http://www.launchy.net/" class="external">Launchy: The Open Source Keystroke Launcher</a></p>
<p><span id="more-3385"></span></p>
<p>ホットなコマンドラインランチャーだけあって最新 OS の対応がいいのはもちろんですが、自動でプログラムを拾ってくれるのがなんとも嬉しい感じです（インストールするだけでインデックスが作られている場所のプログラムを名前から起動できるようになります）。</p>
<p>ただ、 bluewind のように作業ディレクトリを指定したりはできないようで、起動時のオプションを細かく指定したい場合はインデックスが作られる場所にショートカットを作っておくなどする必要があるようです（設定によってインデックスが作られているかに関係なく任意のディレクトリを対象にすることもできます）。</p>
<p>ショートカットを作る手間が惜しくないならスタートメニューからプログラムの起動もできるのですが、 Launchy は Twitter の投稿クライアントになるプラグインがあったり、キーボードから手を離したくない派の方は使う意義があるのではないでしょうか。</p>
<p>Emacs のミニバッファ風ランチャーを作るまではこちらにお世話になります。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.game-create.com/archives/3385/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>体験版、ただ配信するだけでは。更なる活用を・・・「小野憲史のゲーム評評」第10回 / GameBusiness.jp</title>
		<link>http://www.game-create.com/archives/2483</link>
		<comments>http://www.game-create.com/archives/2483#comments</comments>
		<pubDate>Fri, 20 Nov 2009 07:40:18 +0000</pubDate>
		<dc:creator>Byerkut</dc:creator>
				<category><![CDATA[ウェブログ]]></category>
		<category><![CDATA[trac]]></category>
		<category><![CDATA[twitter]]></category>
		<category><![CDATA[プラグイン]]></category>
		<category><![CDATA[同人ゲーム]]></category>

		<guid isPermaLink="false">http://www.game-create.com/?p=2483</guid>
		<description><![CDATA[同人ゲームにはインターネットによる告知がベターでしょうか。
体験版、ただ配信するだけでは。更なる活用を・・・「小野憲史のゲーム評評」第10回 / GameBusiness.jp

ゲーム開発に特化した Trac と Tw [...]]]></description>
			<content:encoded><![CDATA[<p>同人ゲームにはインターネットによる告知がベターでしょうか。</p>
<p><a href="http://www.gamebusiness.jp/article.php?id=690" class="external">体験版、ただ配信するだけでは。更なる活用を・・・「小野憲史のゲーム評評」第10回 / GameBusiness.jp</a></p>
<p><span id="more-2483"></span></p>
<p>ゲーム開発に特化した Trac と Twitter を足して2で割ったようなシステムがあるとうれしいなぁ、なんて思うのですが、 Trac のプラグインでも作ればできるのでしょうか。個人製作なんか特にですが、できれば作る過程と作品とで両方楽しんでもらいたいと思います（ストーリーものは辛そうですが）。</p>
<p>ちなみに昔は ( Trac + Blog ) / 2 のシステムがほしいとか言ってました。時勢なんですかね。</p>
<p>コラムニストの方、どこかでお名前を見かけたことがあると思ったら持っている本の著者の方でした。前にもこんなことがあったような…</p>
]]></content:encoded>
			<wfw:commentRss>http://www.game-create.com/archives/2483/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>サイト内検索機能の不具合を修正しました</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>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>
