<?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>monoooki &#187; programming</title>
	<atom:link href="http://monoooki.net/tag/programming/feed" rel="self" type="application/rss+xml" />
	<link>http://monoooki.net</link>
	<description></description>
	<lastBuildDate>Thu, 03 Dec 2009 03:56:57 +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>Tokyo Art BiyoriがMA5で部門賞を受賞しました</title>
		<link>http://monoooki.net/article/2606</link>
		<comments>http://monoooki.net/article/2606#comments</comments>
		<pubDate>Tue, 01 Dec 2009 09:22:26 +0000</pubDate>
		<dc:creator>kazuhiko</dc:creator>
				<category><![CDATA[Article]]></category>
		<category><![CDATA[event]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://monoooki.net/?p=2606</guid>
		<description><![CDATA[
Mashup Award 5 に出展していた Tokyo Art Biyori が、部門賞（Tokyo Art Beat &#8211; Gadago NPO賞）を受賞しました。ありがとうございます！
たまたま三鷹プロ [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://maedaseisaku.com/labs/tab/"><img src="http://monoooki.net/wordpress/wp-content/uploads/tokyo_art_biyori.png" alt="Tokyo Art Biyori" title="Tokyo Art Biyoriのサイトへ" width="620" height="470" class="alignnone size-full wp-image-2580" /></a><br />
Mashup Award 5 に出展していた <a href="http://maedaseisaku.com/labs/tab/">Tokyo Art Biyori</a> が、部門賞（Tokyo Art Beat &#8211; Gadago NPO賞）を受賞しました。ありがとうございます！</p>
<p>たまたま<a href="http://groups.google.co.jp/group/m-pgcafe">三鷹プログラマーズカフェ</a>に参加したときにこのイベントを知り、家に帰ってAPIを眺めていたところ沢山のAPIの中に妻がよく見ている<a href="http://www.tokyoartbeat.com/">東京アートビート</a>の名前を見つけ、そこから制作企画が始まりました。</p>
<p>妻いわく「アートビートはイベント情報がちょっと見づらい」との事で、具体的には<strong>「今、どこで、何をやっているかがすぐにわからない」</strong>という点に不便を感じていました。<br />
ギャラリーや美術館の常設展などは無料で入れるところが多く<strong>気軽に立ち寄りたい</strong>のですが、「今日これから上野に行く用事ができたので、ついでに寄れそうな場所を探したい」という場合にサイトが使いづらかったようです。</p>
<p>アートビートのサイトにはイベントカテゴリの中に「エリアで探す」という項目が既にあったので、今回はここを強化する目的で作ることにしました。<br />
余計なものは付けない方向で考えていたため、トップページはエリア名だけを並べ、クリックしたらその地域のイベントが地図と一緒に出るだけにしました。ただそれだけなんですが、導線が整理されてだいぶ使いやすくなったようです。地図で位置関係が見えるようになったのもよかったかなと思います。<br />
また、公式サイトのレスポンスが遅いため、取得したRSSをキャッシュしてスムーズに閲覧できるようにしてあります（キャッシュは3時間おきに更新しています）。</p>
<p style="margin-top: -1em;line-height: 1.3;"><small>（余談ですが、東京アートビートとニューヨークアートビート、どちらも同じサーバで動いているのにレスポンスがぜんぜん違います。東京のほう、もうちょっと軽くなるとうれしいです。）</small></p>
<p>開発言語はPHP+SmartyとJavascriptです。PHPはWordpressを触っていた際に少し覚えた程度でしたが、普段やらないことに挑戦したことでいろいろ知ることができました。これを機にもっと幅を広げられたらなと思っています。制作期間は1週間でした。</p>
<p style="margin-top: 2em">
今後は、これも妻の要望ですが携帯対応を予定しています。まだ動作で少し怪しいところがあるので、一緒にその辺りもつぶせたらと思っています。美術館めぐりが好きな方、是非とも使ってみてくださいね。</p>
]]></content:encoded>
			<wfw:commentRss>http://monoooki.net/article/2606/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>人見知り用ATNDというサービスを作りました</title>
		<link>http://monoooki.net/article/2462</link>
		<comments>http://monoooki.net/article/2462#comments</comments>
		<pubDate>Tue, 03 Nov 2009 13:17:24 +0000</pubDate>
		<dc:creator>kazuhiko</dc:creator>
				<category><![CDATA[Article]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://monoooki.net/?p=2462</guid>
		<description><![CDATA[
最近勉強会などに顔を出すようになったため、ATND というサービスを利用する機会が増えました。ATNDは全体的にシンプルでわかりやすいのですが、初対面が多く集まるには情報が不足している気がしたので、いろいろ使えそうなも [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://monoooki.net/wordpress/wp-content/uploads/ma5_atnd.png" alt="ma5_atnd" title="ma5_atnd" width="620" height="457" class="alignnone size-full wp-image-2469" /><br />
最近勉強会などに顔を出すようになったため、<a href="http://atnd.org/">ATND</a> というサービスを利用する機会が増えました。ATNDは全体的にシンプルでわかりやすいのですが、初対面が多く集まるには情報が不足している気がしたので、いろいろ使えそうなものをかき集めくっつけてみました。</p>
<ul>
<li><a href="http://maedaseisaku.com/labs/atnd/">人見知り用ATND</a></li>
</ul>
<p>コンセプトは、『ATND にいろいろ付加情報をつけ、初対面でも話題に困らないようネタを仕込むことができる、人見知りによる人見知りのためのサービス』です。</p>
<h3>使い方</h3>
<p>ページ上部の入力フォームに、ATNDのイベントIDを入力します。<br />
（例）<code>http://atnd.org/events/1889</code> の<strong>最後の数字の部分</strong></p>
<p>ATNDに登録済みの方はユーザーネームも入力すると、過去に同じイベントに同席した人をチェックできます。</p>
<h3>機能紹介</h3>
<h4>イベント情報関連</h4>
<p>ATNDと同じような情報を表示します。住所がキチンと入力されている場合は、右側に開催地を中心としたGoogleMAPを表示します。<br />
同時に食べログでお店をチェックし、近隣にあるようなら目印を追加します。</p>
<p>2次会の場所を提案できたり、「近所のうなぎ屋がおいしいらしいよ！」とアピールして存在感を出すことができるようになる…かもしれません。</p>
<h4>現地周辺の飲食店情報</h4>
<p>食べログの情報をそのまま出しています。一人で行くようなバーとかどうなんだろう･･･？と思いましたが、用途は人それぞれなのでフィルタリングせず全部出してます。</p>
<h4>このイベントに関連する情報</h4>
<p>イベント情報のタイトル、キャッチフレーズ、住所、概要を全部Yahoo!のキーフレーズ抽出APIに投げ、返ってきた物を適当にチェックして今度はSimpleAPIシリーズの Wikipedia APIに投げ、キーワードに完全にマッチするものだけを表示します。</p>
<p>「東京都の鳥はユリカモメらしいんですよ。だから東京臨海新交通臨海線の愛称もゆりかもめなんですかね？」と、相手が困る質問をぶつけて存在感をだせる･･･かもしれません。<br />
地名以外はわけのわからない結果になってしまいますが、ご愛嬌ということで。</p>
<h4>参加者情報</h4>
<p><img src="http://monoooki.net/wordpress/wp-content/uploads/ma5_atnd_prof.png" alt="ma5_atnd_prof" title="ma5_atnd_prof" width="413" height="58" class="alignnone size-full wp-image-2466" /><br />
ここはGoogle Chart以外にAPIを使ってないのでアレですが、個人的に知りたい情報だったので作りました。</p>
<p>イベント参加者の名前は他のウェブサービスでも同じことが多いので、名前一覧を取得したらTwitterアカウントの有無をチェックします。もしあればアイコン、自己紹介文、最新のつぶやきを表示します。見つからない場合はGoogleで検索し、近い名前のTwitterアカウントかiddyアカウントを探してきます。今まで手動でやっていたことを、自動でやらせてます。</p>
<p>Twitterのアカウント名が違ったりアカウントを持っていない場合でも、ATNDと同じ名前のユーザーがTwitter上にいれば拾ってきてしまいます（外人のアカウントを拾うことが多いです）。内容で判断しつつ、あくまで目安として使用してください。</p>
<p>Twitterと同様に、アカウント名と同じはてブとはてダがある場合はアイコンを追加します。</p>
<p>Twitterアイコンの左に出ている数字は、ATNDを通じて参加したイベントの数を表示しています。オフ会の猛者が初めてATNDを使って「１」と表示されることもあると思いますが、あくまで目安として。上限は100です。</p>
<p>ページ上部でユーザー名を入力した場合は、過去2回以上同席した人をチェックして、その人の背景色を赤く表示します。これは <a href="http://sugamasao.dip.jp/atnd/">となりのATNDさん</a> を参考にしました。</p>
<h4>その他</h4>
<p><img src="http://monoooki.net/wordpress/wp-content/uploads/ma5_atnd_other.png" alt="ma5_atnd_other" title="ma5_atnd_other" width="422" height="169" class="alignnone size-full wp-image-2495" /><br />
パーマリンクに対応しているので、自分の参加予定のイベントをブックマークできます。ほとんどAjaxなのでページ遷移はありませんが、便利そうかなと思ってつけました。<br />
また、イベント開催場所の住所が入力されていて、かつ一週間以内であれば、天気予報を表示します。</p>
<h3>使用API</h3>
<ul>
<li>ATND</li>
<li>食べログ</li>
<li>Googlemap</li>
<li>SimpleAPI Wikipedia</li>
<li>Yahoo!天気情報のRSS</li>
<li>Google Chart API</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://monoooki.net/article/2462/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordpressをCMSとして使い、小さな本のサイトを構築した</title>
		<link>http://monoooki.net/article/649</link>
		<comments>http://monoooki.net/article/649#comments</comments>
		<pubDate>Thu, 03 Apr 2008 15:42:19 +0000</pubDate>
		<dc:creator>kazuhiko</dc:creator>
				<category><![CDATA[Article]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[本]]></category>

		<guid isPermaLink="false">http://monoooki.net/blog/?p=656</guid>
		<description><![CDATA[先日、f-dexというフリーペーパーのサイトをリリースした。f-dexとはうちの嫁さんが友達と作っている、デザイン、オモシロ系のネタを扱ったA6サイズの小冊子のこと。フリーペーパーながら有名人に突撃インタビューを敢行した [...]]]></description>
			<content:encoded><![CDATA[<p>先日、<a href="http://www.f-dex.com/">f-dexというフリーペーパーのサイト</a>をリリースした。f-dexとはうちの嫁さんが友達と作っている、デザイン、オモシロ系のネタを扱ったA6サイズの小冊子のこと。フリーペーパーながら有名人に突撃インタビューを敢行したりして、<a href="http://www.f-dex.com/archive/regularcontents/feature">特集の内容</a>が妙に豪華だったりする。<br />
特集のほかに、友人知人のツテでいろんな人に記事を書いてもらったり、長く付き合いのある印刷会社の協力で凝った印刷を試したり、そのお礼に印刷がらみの小ネタを載せたりしていて、手に取ってくれている人たちからご好評をいただいている。</p>
<p>f-dexのサイトは以前からあったが、ニュースやイベント情報（f-dexのではなく、記事を寄稿してもらったりしてお世話になっている方々のイベント情報）をちょこっと載せているだけだった。バックナンバーをWeb上で見せるという話も出たことがあったが、忙しかったりタイミングが合わなかったりして、なかなか実行に移せないでいた。</p>
<p>ちょうど個人的にWordpressを触っていたこともあり、ブログ以外のものを作りたいなーと思っていたので、承諾を得て仕事の合間にサイトを作ってみることにした。（ちなみに、Wordpressを使った他の事例は<a href="http://www.sasamegu.org/">嫁さんのサイト</a>（デザインはやってもらった）。案件では今の所機会に恵まれていないので、使ったことがありません。<a href="http://monoooki.net/blog/about/#contact">随時大募集中です</a>）</p>
<h3>サイトの全体像</h3>
<p>まず、サイトの全体像から。主なコンテンツとして「ニュース、配布場所、バックナンバーの閲覧、バックナンバーの請求、特集（プレゼントとか）、イベント紹介」があり、補助的な内容として「f-dexについて、メールフォーム」がある。</p>
<p><img src='http://monoooki.net/wordpress/wp-content/uploads/fdex-sitemap.gif' alt='f-dexのサイトマップ' /></p>
<p>この中で、頻繁に更新しブログ的な機能と相性が良いのは「ニュース、特集、イベント情報」の3つ。これとは反対に、一度作ってしまえば後はあまり触らなくていいモノ、WordpressのPAGE機能と相性が良いのは「配布場所」と補助内容の3つ。<br />
残った「バックナンバーの閲覧」と「バックナンバーの請求」のうち、請求の方は別で作ったフォームがあるので、今回はWordpressで管理しない。「バックナンバーの閲覧」はややこしい事をしてしまったので、分けて書きます。</p>
<h3>ブログと相性のいいページ/ PAGEと相性のいいページ</h3>
<p>ブログと相性のいいページは、特に何も考えず普通のブログっぽく作成。一覧ページのページ遷移用にWP-PAGENAVIプラグインを使用したくらいで、特筆する箇所はなし。</p>
<p>PAGEと相性のいいページも特に変わった事はしていないので、あまり書くことはない･･･かも。メールフォームの所にContact Form][というプラグインを使ったことくらい。</p>
<p>基本的に変なカスタマイズはせず、Wordpressの基本機能だけで作成。ここまでは本に載ってるサンプルで出来ました。</p>
<h3>バックナンバーの閲覧</h3>
<p>ここがサイトの一番重要なところなので、見せ方を工夫した。<br />
f-dexの内容はインタビューに始まり、写真、イラスト、各種連載…というような順番になっている。インタビューもさることながら、連載記事も有名なイラストレーターさんだったり、クリエーターさんだったり、噺家さんだったりと多岐にわたっていて面白いので、Vol.001、Vol.002などの号数に関係なく読めるようにした。</p>
<h4>1. バックナンバー閲覧画面の、最初の画面</h4>
<p><img src='http://monoooki.net/wordpress/wp-content/uploads/fdex-archivetop.gif' alt='f-dexのアーカイブトップ' class='right' />グローバルナビゲーションのArchiveを押したら、バックナンバーの最初のページが出るようになっている。ここでは「本や連載記事がこれだけあるよ！」というのを見せたかったので、本のサムネールや連載のバナーを並べてにぎやかなデザインにした。<br />
楽をしたかったので、このページは内容が追加されたら自動で表示されるようになっている。</p>
<p class='clear margintop'>まず表紙の方の説明。<br />
一冊の本の中身について、それぞれこんな風にカテゴリをつけている。</p>
<p><img src='http://monoooki.net/wordpress/wp-content/uploads/fdex-category.gif' alt='カテゴリー付け' /></p>
<p>「表紙」というカテゴリはf-dexの表紙になる部分にしかつけていないので、query_postsで表紙カテゴリのエントリだけを取得。各記事のタイムスタンプを発行日にしているので、日付の古いものから順に並べればVol.001、Vol.002…と綺麗に並んでくれる。</p>
<pre class="brush: php;">
query_posts('showposts=-1&amp;category_name=cover&amp;order=asc');
</pre>
<p>取得した表紙エントリのかたまりをループで回す際、get_the_category()を使うと各エントリにつけてあるカテゴリのリストが得られる（戻り値はカテゴリID）ので、ここからVol名を取得。</p>
<pre class="brush: php;">
// vol名取得
foreach((get_the_category()) as $cat){
	if(strstr($cat-&gt;slug, &quot;vol&quot;)){
		$newestVol = $cat-&gt;slug;
	}
}
</pre>
<p>表紙の画像はvol001_thumb_l.jpgというような名前で統一してあらかじめアップロードしてあるので、取得したvol名をファイル名に指定すれば、その号の表紙が表示される。</p>
<pre class="brush: php;">
// 表紙ファイル名
$cover = get_bloginfo('template_url') . &quot;/images/cover/&quot; . $newestVol . &quot;_thumb_l.jpg&quot;;
</pre>
<p>表紙サムネールの下に出す特集の内容をどうするか悩んだ末、カスタムフィールドに入れることにした。featureというキーで登録しておいたので、その値を表示するようにして完成。（困ったときのカスタムフィールドだなぁ…、と実感しました）</p>
<pre class="brush: php;">
特集：&lt; ?php echo post_custom(&quot;feature&quot;); ?&gt;
</pre>
<p>連載のバナーの表示部分も同じような感じで表示。<br />
※サイトのトップページも同じ要領でやっているので、自動で表示されます。</p>
<h4>2. 左メニューに、Vol名、連載記事、著者別のリストを表示</h4>
<p>これはVol名、連載記事、著者を格納するための親カテゴリを作り、具体的な内容のカテゴリをその中に登録し、mnk_list_cats('child_of=xx');を使って表示。</p>
<p>Wordpressはver2.3.2日本語版からタグが標準装備されたので使いたかったけど、これをやりたかったので断念。</p>
<h4>3. 各号のトップページで表紙を出す</h4>
<p>左メニューのVol.001というリンクや表紙のサムネールをクリックしたら、各号の表紙が出るようにした。archive/vol001/index.html を用意するようなイメージ。</p>
<p><img src='http://monoooki.net/wordpress/wp-content/uploads/fdex-voltop.gif' alt='f-dex各号のトップページ' /></p>
<p>Vol.001などのVol名はカテゴリなので、通常は管理画面で設定した件数だけ、このカテゴリに属したエントリが表示される。一般的にこういったカテゴリートップでは、記事へのリンクが付いた見出しと概要を表示することが多い。例：<a href="http://wiredvision.jp/news/culture/">http://wiredvision.jp/news/culture/</a></p>
<p>f-dexは各号ごとに紙や印刷加工が違ったりするので、表紙の画像以外に説明文を入れたかった。各号のカテゴリートップでそれをやりたかったので、ちょっと変な事をした。</p>
<p>1. で書いたように、各エントリの日付は発行日にしてある。さらに、エントリの内容が本の順番どおりに並ぶよう時間をずらして登録してある。表紙は23時、特集は22時、その次の記事は21時･･･といった感じ。Wordpressのループはデフォルトで新しいものから順に取り出すので、カウント用の変数を用意して先頭のエントリだけは本文を表示、それ以外はリスト表示にして目次として使った。</p>
<pre class="brush: php;">
if(have_posts()) : while(have_posts()) : the_post();
$entryCount++;

if($entryCount == 1){
	// 先頭のエントリだけ本文表示
	the_content();
}else{
	// それ以外は目次としてタイトルだけ表示
	the_title();
}
endwhile; endif;
</pre>
<p>表紙の画像はカスタムフィールドに入れても良かったけど、ここも楽したかったのでカテゴリにつけたVol名から自動で表示するようにした。なので、ここで入力しているのは表紙の説明文のみ。<br />
テンプレートを使っても良かったかな･･･と思ったけど、新刊ごとにテンプレートを作るのもどうかなと思ったのでこうしました。</p>
<h4>4. 記事ページ間の遷移</h4>
<p>f-dexは本なので、Vol.001ならVol.001内だけで「＜前のページへ / 次のページへ＞」とリンクをつけて、現物と同じように読めるようにした。<br />
Wordpressのテンプレートタグにnext_post_link()、previous_post_link()というものがあり、引数に” in_same_cat=true”を与えると同じカテゴリの前後エントリだけにリンクを張ってくれる。エントリにつけるカテゴリが1つだけなら、このタグが使えたので簡単だった。</p>
<p>今回はカテゴリを複数つけているので、このタグがうまく機能しなかった。各エントリのカテゴリがget_the_category()で出力した時の最後に来るカテゴリとして認識されてしまうようで、「Vol.001カテゴリ」を見ていたと思ったらいつの間にか「筆っこカテゴリ」を見ていた…というような事が起こってしまった。<br />
2番にあるように今回はタグ機能が使えないので、next_post_link()、previous_post_link()を改造することにした。</p>
<p>Wordpressのインストールフォルダ内で「next_post_link」を含むファイルを検索すると、link-template.phpに入っていることがわかる。Ver2.3.2では450行目にnext_post_linkの定義があるので見てみると…</p>
<pre class="brush: php;">
function next_post_link($format='%link &amp;raquo;', $link='%title', $in_same_cat = false, $excluded_categories = '') {
	$post = get_next_post($in_same_cat, $excluded_categories);

	if ( !$post )
		return;

	$title = $post-&gt;post_title;

	if ( empty($post-&gt;post_title) )
		$title = __('Next Post');

	$title = apply_filters('the_title', $title, $post);
	$string = '&lt;a href=&quot;'.get_permalink($post-&gt;ID).'&quot;&gt;';
	$link = str_replace('%title', $title, $link);
	$link = $string . $link . '&lt;/a&gt;';
	$format = str_replace('%link', $link, $format);

	echo $format;
}
</pre>
<p>この関数はリンクの見栄えを担当しているだけで、エントリが同じカテゴリかどうかの判別はget_next_postという関数でやっていることが分かった。get_next_postの定義は少し上の391行目にあるので見てみる。</p>
<pre class="brush: php;">
function get_next_post($in_same_cat = false, $excluded_categories = '') {
	global $post, $wpdb;

	if( empty($post) || !is_single() || is_attachment() )
		return null;

	$current_post_date = $post-&gt;post_date;

	$join = '';
	if ( $in_same_cat ) {
		$join = &quot; INNER JOIN $wpdb-&gt;term_relationships AS tr ON p.ID = tr.object_id &quot;;
		$cat_array = mnk_get_object_terms($post-&gt;ID, 'category', 'fields=tt_ids');
		$join .= ' AND (tr.term_taxonomy_id = ' . intval($cat_array[0]);
		for ( $i = 1; $i &lt; (count($cat_array)); $i++ ) {
			$join .= &#8216; OR tr.term_taxonomy_id = &#8216; . intval($cat_array[$i]);
		}
		$join .= &#8216;)&#8217;;
	}

	$sql_exclude_cats = &#8221;;
	if ( !empty($excluded_categories) ) {
		$blah = explode(&#8216; and &#8216;, $excluded_categories);
		$posts_in_ex_cats = get_objects_in_term($blah, &#8216;category&#8217;);
		$posts_in_ex_cats_sql = &#8216;AND p.ID NOT IN (&#8216; . implode($posts_in_ex_cats, &#8216;,&#8217;) . &#8216;)&#8217;;
	}

	$join  = apply_filters( &#8216;get_next_post_join&#8217;, $join, $in_same_cat, $excluded_categories );
	$where = apply_filters( &#8216;get_next_post_where&#8217;, &quot;WHERE p.post_date &gt; &#8216;$current_post_date&#8217; AND p.post_type = &#8216;post&#8217; AND p.post_status = &#8216;publish&#8217; $posts_in_ex_cats_sql AND p.ID != $post-&gt;ID&quot;, $in_same_cat, $excluded_categories );
	$sort  = apply_filters( &#8216;get_next_post_sort&#8217;, &#8216;ORDER BY p.post_date ASC LIMIT 1&#8242; );

	return @$wpdb-&gt;get_row(&quot;SELECT p.ID, p.post_title FROM $wpdb-&gt;posts AS p $join $where $sort&quot;);
}
</pre>
<p>if ( $in_same_cat ) { … }の中がカテゴリの判別をしているところなので、そこを中心に見る。</p>
<p>if文の2行下の$cat_arrayに、エントリが属しているカテゴリの番号が入る。例としてVol.001の特集ページだと、</p>
<pre class="brush: php;">
Array
(
    [0] =&gt; 8
    [1] =&gt; 11
)
</pre>
<p>のようになっている。変数名が$cat_arrayなので、これがカテゴリIDかな･･･と思っていたら<strong>違っていた</strong>。DBのmnk_term_taxonomyテーブルを見てみると、カテゴリIDであるterm_idをterm_taxonomy_idという値とマッピングしている。そして$cat_arrayの値はterm_taxonomy_idの数字が出ていた。</p>
<p>まずはterm_idが欲しいので、term_taxonomy_idをterm_idに変換する関数をfunction.phpに作る。</p>
<pre class="brush: php;">
function conv_taxonomyID2termID($id){
	global $wpdb;
	return $wpdb-&gt;get_results(&quot;SELECT term_id FROM $wpdb-&gt;term_taxonomy WHERE term_taxonomy_id=$id&quot;);
}
</pre>
<p>ついでにカテゴリIDからスラッグ名に変換する関数も作った。これはcategory.phpにget_cat_IDという似たような関数があったので、返す値をIDからスラッグ名に変えただけ。</p>
<pre class="brush: php;">
function get_cat_slug($cat_id) {
	$cat_id = (int) $cat_id;
	$category = &amp;get_category($cat_id);
	return $category-&gt;slug;
}
</pre>
<p>これらを使って、カテゴリIDからスラッグ名を取得し、volで始まるカテゴリだけを入れるようにした。そうすると、各エントリは同じVol名のエントリにしかリンクを張らなくなるので、晴れて目的達成。ただ、コアファイルに書き足してしまうとWordpressの再インストール時に上書きしてしまいそうなので、これもfunction.phpにget_next_post_volという名前で保存しておいた。また、next_post_linkもnext_post_link_volという名前に変えて、こちらで追記した関数を読むように変更した。</p>
<h3 class='margintop'>今回使用したプラグイン</h3>
<dl>
<dt><a href="http://akismet.com/">Akismet</a></dt>
<dd>標準で入っているコメントスパム対策プラグイン。</dd>
<dt><a href="http://chip.cuccio.us/projects/contact-form-II/">Contact Form][</a></dt>
<dd>コンタクトフォーム設置用。手軽で便利。</dd>
<dt><a href="http://dancameron.org/wordpress/">Search Everything</a></dt>
<dd>サイト内検索の範囲を広げる。（デフォルトが記事本文のみなので。狭いよね…。）</dd>
<dt><a href="http://fortes.com/projects/wordpress/top-level-cats/">Top Level Categories</a></dt>
<dd>Wordpressのパーマリンク設定で%category%を使った際、デフォルトだとhttp://hoge.com/category/news/とかhttp://hoge.com/category/event/ のように、「category」が入ってしまう。ここのcategoryの部分を消してくれるプラグイン。カテゴリーベースの所に/.と入れても消せるけど、どこかで不具合があったのでこっちを使うことにした。（<a href="http://bono.s201.xrea.com/2006/06/158-mnk_directory/">WP: 設置ディレクトリと異なるページをホームにする</a>をやったときだったかも）<br />
via.<a href="http://wordpress.org/extend/ideas/topic.php?id=359">WordPress › WordPress Ideas — Remove 'Category Base' From Permalinks</a>
</dd>
<dt><a href="http://wordpress.org/extend/plugins/upload-unziper/">Upload Unzipper</a></dt>
<dd>画像をzipに圧縮して、まとめてアップロードできる。ちゃんと画像をエントリに関連付けてくれる。一つのエントリに画像をたくさん使う際に便利。</dd>
<dt><a href="http://roel.meurders.nl/wordpress-plugins/wp-addquicktag-plugin-for-adding-quicktags/">WP-AddQuicktag</a></dt>
<dd>エントリ投稿画面にクイックタグボタンを増やせる。エントリ内でいろいろタグを使う際に便利。（なぜか新規投稿時だけ機能していない）</dd>
<dt><a href="http://lesterchan.net/portfolio/programming.php">WP-PageNavi</a></dt>
<dd>ページナビゲーションを「Page 1 2 »」という形で出してくれる。</dd>
<dt><a href="http://www.feedburner.com/fb/a/help/wordpress_quickstart">FeedBurner FeedSmith</a></dt>
<dd>RSSはfeedburnerを通して公開しているので、転送するために。</dd>
<dt><a href="http://www.arnebrachhold.de/redir/sitemap-home/">Google XML Sitemaps</a></dt>
<dd>アーカイブ内のページ数が結構あるので使ってみました。</dd>
</dl>
<h3>小ネタ</h3>
<h4>画像アップロードの初期設定を変える方法(ver.2.3.3以前)</h4>
<p><img src='http://monoooki.net/wordpress/wp-content/uploads/fdex_upload.gif' alt='fdex_upload.gif' class='right' />エントリに画像を入れる際、デフォルトだと表示：サムネイル、リンク先：ファイルが選択されており、「エディタに送る」ボタンを押すとサムネールのタグが書き出されてしまう。個人的に表示：フルサイズ、リンク先：なしが好みなので、最初からこうなるようコアファイルを以下のように変更した。</p>
<p>ver2.3.2の場合、wp-admin/js/upload.js の中の</p>
<ol>
<li>124行目 checked = 'display-thumb'; をコメントアウト</li>
<li>138行目 value='file'となっているinput要素から、checked='checked'を切り取る</li>
<li>140行目 value='none'となっているinput要素に貼り付け</li>
</ol>
<h4>隠れてしまっているアップロードボタンを直す(ver.2.3.3以前)</h4>
<p>wp-admin/wp-admin.css の適当な場所に、以下のコードを記述する。</p>
<pre class="brush: php;">
form#upload-file th label {
	white-space: nowrap;
}
</pre>
<p><a href="http://phpbb.xwd.jp/viewtopic.php?p=5084">WordPress Japan :: トピックを表示 - 画像アップロード画面でアップロードボタンが隠れる</a><br />
これと同じ話題。</p>
<h4>カスタムフィールドの使い方</h4>
<p>名前が悪いのでいまいち何に使うのかわからないカスタムフィールド。これはエントリにメタ情報を自由に追加できる機能で、記事に変数が使えるようなもの。（DBもmnk_postmetaというテーブルに入っていて、meta_key、meta_valueというフィールド名で保存されている）</p>
<p>普通のブログをやっている時は出番があまりないが、何かしら定型の値をエントリに持たせたいときに威力を発揮する。Wordpressサイト構築スタイルブックでは航空券の値段や訪問都市、航空会社などの情報を入れていたし、f-dexのサイトでは特集の内容を入れて使った。バイクのツーリングだったら、行き先、気温、所要時間、走行距離なんかを入れてもいい。<br />
値は普通にDBに保存されるので、「走行距離が200km以上」とか「気温10度以下」といった条件でエントリの抽出ができたりする…かも（試してません）。</p>
<p>値を取り出すときはpost_custom('キーの値’)とするだけでOK。アンダースコアで始まるキーはシステムが使用するので、重複させないように注意。カスタムフィールドを使ったプラグインもいくつかあるようなので、使いようによっては面白いことが出来そうです。</p>
<h3>参考にしたサイト</h3>
<p><a href="http://bono.s201.xrea.com/wordpress/">power source* » WordPress</a><br />
逆引きリストが便利。設置ディレクトリと…の記事も解説が詳しくてわかりやすかったです。</p>
<p><a href="http://d.hatena.ne.jp/aratako0/">TRANS [hatena]</a><br />
<a href="http://d.hatena.ne.jp/aratako0/20080204/p1">WordPressテーマ（テンプレート）カスタマイズのまとめ（日本語訳）</a>他、Wordpress関連のエントリは色々と参考になりました。Yahoo! UI LibraryのCSSを使っている...とのエントリもあったので、まねして使ってみたりしました。</p>
<p><a href="http://codex.wordpress.org/Main_Page">Main Page « WordPress Codex</a><br />
日本のフォーラムはまだまだ情報量が少ないので、他の方もやってるように本家の中を検索して回りました。英語は辛い…。</p>
<h3>参考にした書籍</h3>
<p><iframe src="http://rcm-jp.amazon.co.jp/e/cm?t=monoooki-22&#038;o=9&#038;p=8&#038;l=as1&#038;asins=4839921695&#038;fc1=000000&#038;IS2=1&#038;lt1=_blank&#038;lc1=0000FF&#038;bc1=000000&#038;bg1=FFFFFF&#038;f=ifr" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe><br />
Wordpressのフォーラムなどでよく見かける、マクラケン直子さんの著書。解説が丁寧なので、まったくの初心者だった自分は助かりました。基本から学べるので初めての人におすすめ。<br />
3月末に<a href="http://www.amazon.co.jp/gp/search?ie=UTF8&#038;keywords=WordPress%E3%83%93%E3%82%B8%E3%83%8D%E3%82%B9%E3%83%96%E3%83%AD%E3%82%B0%E6%A8%99%E6%BA%96%E3%82%AC%E3%82%A4%E3%83%89%E3%83%96%E3%83%83%E3%82%AF&#038;tag=monoooki-22&#038;index=blended&#038;linkCode=ur2&#038;camp=247&#038;creative=1211">WordPressビジネスブログ標準ガイドブック</a><img src="http://www.assoc-amazon.jp/e/ir?t=monoooki-22&amp;l=ur2&amp;o=9" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;padding:0 !important" />が出たようなので、こちらも要チェック。</p>
<p><iframe src="http://rcm-jp.amazon.co.jp/e/cm?t=monoooki-22&#038;o=9&#038;p=8&#038;l=as1&#038;asins=4839921911&#038;fc1=000000&#038;IS2=1&#038;lt1=_blank&#038;lc1=0000FF&#038;bc1=000000&#038;bg1=FFFFFF&#038;f=ifr" style="width:120px;height:240px;clear:left;margin-top: 1em;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe><br />
上記のTRANSに紹介されていた本。こちらは基礎から応用まで、ブログからサイトの作り方までを解説している。カテゴリースラッグを使って画像を自動で表示する方法なんかは、ブログの作り方しか知らなかった自分には目からうろこでした。タグリファレンスもわかりやすくて◎。エントリの日付をいじって好きな順に並べるアイデアも、この本から得ました。</p>
<h3>最後に</h3>
<p>なかば勢いと思いつきで作ってしまったので、もっと便利な方法があるよ！とか、このページがわかりにくいよ！といった意見に飢えています。なにかありましたら、こちらのコメント欄や<a href="http://www.f-dex.com/contact">f-dexのほうのコメントフォーム</a>からご連絡ください。</p>
]]></content:encoded>
			<wfw:commentRss>http://monoooki.net/article/649/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>ループカウンタの変数名</title>
		<link>http://monoooki.net/article/249</link>
		<comments>http://monoooki.net/article/249#comments</comments>
		<pubDate>Sat, 02 Sep 2006 08:14:29 +0000</pubDate>
		<dc:creator>kazuhiko</dc:creator>
				<category><![CDATA[Article]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://monoooki.net/blog/?p=247</guid>
		<description><![CDATA[13 名前：ねこま ：03/03/02 22:59
>ループカウンタの変数名をどうしたらいいですか?
>i,j,k,n,mは使いました、このつぎのネストしてるループはどのもじですか?
ネストしてるカウンタ用には
n1,  [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>13 名前：ねこま ：03/03/02 22:59<br />
>ループカウンタの変数名をどうしたらいいですか?<br />
>i,j,k,n,mは使いました、このつぎのネストしてるループはどのもじですか?<br />
ネストしてるカウンタ用には<br />
n1, n2, n3&#8230;<br />
とか統一した方がわかりやすいです．</p>
<pre><code>    for (n1=0; n1&lt;100; ++n1) &#123;    　for (n2=0; n2&lt;200; ++n2) &#123;    　　for (n3=0; n3&lt;300; ++n3) &#123;    　　　if (n1 == 50) &#123;　　　　// ←どのカウンタかわかりやすい    　　　　...    　　　&#125;    　　&#125;    　&#125;    &#125;</code></pre>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://monoooki.net/article/249/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>perlを使ってメール受信</title>
		<link>http://monoooki.net/article/121</link>
		<comments>http://monoooki.net/article/121#comments</comments>
		<pubDate>Fri, 23 Jun 2006 06:35:32 +0000</pubDate>
		<dc:creator>kazuhiko</dc:creator>
				<category><![CDATA[Article]]></category>
		<category><![CDATA[mail]]></category>
		<category><![CDATA[PC]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://monoooki.net/blog/?p=119</guid>
		<description><![CDATA[携帯に特定のメールだけ転送したいという願いをPerlが叶えてくれそうなので頑張る予定。CPANからいくつかモジュールをインストール中。インストールの方法忘れてたけど、install hogehogeと勘で入れたら動いてく [...]]]></description>
			<content:encoded><![CDATA[<p>携帯に特定のメールだけ転送したいという願いをPerlが叶えてくれそうなので頑張る予定。CPANからいくつかモジュールをインストール中。インストールの方法忘れてたけど、install hogehogeと勘で入れたら動いてくれた。単純で助かる。</p>
<p>（追記）<br />
Net::POP3での受信をロリポップで試すと、メールは0件と言われてしまう。Biglobeでやるとちゃんと帰ってくるので謎。ちょっと困り中。</p>
<p>（追記2）<br />
Net::POP3は諦めてGmailを使うことにした。<br />
PCのメールをGmailに転送→Gmailでフィルタかけて携帯に転送 という流れ。ずいぶん前にこれやってる人が近所にいた気がする…。とりあえず無事に出来てよかった。安心してパソコン切っとける。</p>
<p><a href="http://www.google.co.jp/search?q=gmail+%E6%90%BA%E5%B8%AF%E3%80%80%E8%BB%A2%E9%80%81&#038;btnG=Google+%E6%A4%9C%E7%B4%A2&#038;hl=ja&#038;client=firefox&#038;rls=org.mozilla%3Aja%3Aofficial">参考にしたページたち</a></p>
]]></content:encoded>
			<wfw:commentRss>http://monoooki.net/article/121/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>lolipopでUnicode使うとエラーが出る</title>
		<link>http://monoooki.net/article/42</link>
		<comments>http://monoooki.net/article/42#comments</comments>
		<pubDate>Fri, 28 Apr 2006 05:43:19 +0000</pubDate>
		<dc:creator>kazuhiko</dc:creator>
				<category><![CDATA[Article]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[memo]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://monoooki.net/blog/?p=40</guid>
		<description><![CDATA[UTF-8 BOM付のファイルをCGIに使うとエラーが出た。BOM付けないといいみたい。前もこれで詰まったような…？
Flashで外部ファイルにUnicode使うときもBOM付けたら駄目だっけか。もう忘れまくり。
とりあ [...]]]></description>
			<content:encoded><![CDATA[<p>UTF-8 BOM付のファイルをCGIに使うとエラーが出た。BOM付けないといいみたい。前もこれで詰まったような…？</p>
<p>Flashで外部ファイルにUnicode使うときもBOM付けたら駄目だっけか。もう忘れまくり。<br />
とりあえず付けないように気をつける(｀・ω・´)</p>
]]></content:encoded>
			<wfw:commentRss>http://monoooki.net/article/42/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
