<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2japanesefull.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:xhtml="http://www.w3.org/1999/xhtml" version="2.0">

<channel>
	<title>wpxtreme</title>
	
	<link>http://wpxtreme.jp</link>
	<description>XTREME WORDPRESS STUNTS</description>
	<lastBuildDate>Thu, 12 Aug 2010 07:44:57 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://wpxtreme.jp/feed" />
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/Wpxtreme" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="wpxtreme" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://paipo.jp/bookmarklet/?url=http%3A%2F%2Ffeeds.feedburner.com%2FWpxtreme" src="http://www.feedburner.jp/fb/i/subscribe_paipo.gif">Paipo???</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://add.my.yahoo.co.jp/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2FWpxtreme" src="http://img.yahoo.co.jp/i/jp/my/addtomy1.gif">myyahoo???</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2FWpxtreme" src="http://www.newsgator.com/images/ngsub1.gif">NewsGator Online???</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://feedpath.jp/feedreader/feeds_add?url=http%3A%2F%2Ffeeds.feedburner.com%2FWpxtreme" src="http://feedpath.jp/common/images/sub_feedpath.gif">feedpath???</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.bloglines.com/sub/http://feeds.feedburner.com/Wpxtreme" src="http://www.bloglines.com/images/sub_modern11.gif">Bloglines???</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2FWpxtreme" src="http://buttons.googlesyndication.com/fusion/add.gif">Google???</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://r.hatena.ne.jp/append/http://feeds.feedburner.com/Wpxtreme" src="http://r.hatena.ne.jp/images/addto_w.gif">???RSS???</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://reader.livedoor.com/subscribe/http://feeds.feedburner.com/Wpxtreme" src="http://image.reader.livedoor.com/img/banner/91_17_1.gif">Livedoor???????</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://reader.goo.ne.jp/web/bookmarklet.html?,,http%3A%2F%2Ffeeds.feedburner.com%2FWpxtreme" src="http://reader.goo.ne.jp/web/img/addwebrss.gif">goo RSS???????</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.live.com/?add=http%3A%2F%2Ffeeds.feedburner.com%2FWpxtreme" src="http://tkfiles.storage.msn.com/x1piYkpqHC_35nIp1gLE68-wvzLZO8iXl_JMledmJQXP-XTBOLfmQv4zhj4MhcWEJh_GtoBIiAl1Mjh-ndp9k47If7hTaFno0mxW9_i3p_5qQw">Subscribe with Live.com</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://mix.excite.eu/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2FWpxtreme" src="http://image.excite.co.uk/mix/addtomix.gif">Subscribe with Excite MIX</feedburner:feedFlare><item>
		<title>コメントの承認メールを記事の作成者に送信するプラグイン Notify Author !!!</title>
		<link>http://wpxtreme.jp/notify-author</link>
		<comments>http://wpxtreme.jp/notify-author#comments</comments>
		<pubDate>Sat, 31 Jul 2010 17:13:47 +0000</pubDate>
		<dc:creator>kz</dc:creator>
				<category><![CDATA[PLUGIN]]></category>
		<category><![CDATA[mail]]></category>
		<category><![CDATA[modifications]]></category>
		<category><![CDATA[plugin]]></category>

		<guid isPermaLink="false">http://wpxtreme.jp/?p=549</guid>
		<description><![CDATA[wpxtreme がお届けする WordPress プラグイン第1段は、フォーラムでの回答がめんどくさいからっていう、またもやド叱られかねない理由で作成いたしました。kz は立派な大人ですので、例えド叱られても「うるせーバーカ」なんつーハシタないレスポンスはいたしません。御忠告は真摯に受けとめ、自分でしっかりと考えを整理した上で、ブログ上にてクソ長ーーーーい総括をいたしますので、どちら様もご遠慮なく叱咤くださいませ。できれば激励8割でお願いします。あと、口のキキ方にはどなた様もゼヒとも気をつけましょう。しつこい。<br />
さて、フォーラム元ネタは <a href="http://ja.forums.wordpress.org/topic/4661">記事を書いた人にコメントの承認をさせたい</a> です。言われてみれば、至極まっとうな仕様ですね。カスタマイズ的にはライトなのでプラグイン初心者のオレ様にはうってつけです。がんばるぞ。
ぁ？ <a href="http://wpxtreme.jp/wordpress-show-random-images-attached-to-the-posts">非プラ三原則</a> がどうしたって？何だそれ、おいしいの？<a class="excerpt-more" href="http://wpxtreme.jp/notify-author">Continue Reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<h4>Description</h4>
<p>Notifies the author of the post about a new comment that is a awaiting approval.<br />
要は、WordPress の記事へコメントが投稿された時に管理者宛に送られてくる「モデレートしてください」のメールを、その記事の作成者宛に送信したい、って話です。<br />
ちなみに、「モデレートしてください」のメールは</p>
<ul>
<li>管理画面メインメニュー［設定｜ディスカッション］の［コメント表示条件］で<br />
「管理者の承認を常に必要とする」にチェックがある場合は、常に<br />
「すでに承認されたコメントの投稿者のコメントを許可し、それ以外のコメントを承認待ちにする」にチェックがある場合は、今まで承認されたことがない人のコメントについて</li>
<li>管理画面メインメニュー［設定｜一般］の［メールアドレス］宛に送信されます。</li>
</ul>
<h4>Download</h4>
 <li><a href="http://wpxtreme.jp/cms/wp-content/plugins/download-monitor/download.php?id=4" title="Notifies the author of the post about a new comment that is a awaiting approval.">Notify Author !!!&nbsp;&nbsp;version: 1.0</a> (.zip&nbsp;&nbsp;1.39 kB)</li>
<p><a ahref=0"http://wordpress.org/extend/plugins/">公式プラグインディレクトリ</a> からダウンロードできると良いよねー。</p>
<h4>Installation</h4>
<ol>
<li>Upload `notify-author.php` to the `/wp-content/plugins/` directory.</li>
<li>Activate `Notify Author !!!` through the 'Plugins' menu in WordPress.</li>
</ol>
<p>これくらいの英語は翻訳されんでも読もうぜ。な。</p>
<h4>プラグインによるカスタマイズの基本</h4>
<p>カスタマイズのとっかかりはまず、どこをイジればいいのかを探すことから始めます。ヒントはどうにもシックリこない件名の「モデレートしてください」メールにありますよ。</p>
<pre><code>承認する: http://example.com/wp-admin/comment.php?action=approve&#038;c=4</code></pre>
<p>ね。「approve」ってあるでしょ。こんなん「承認」でしか使わない単語よね。んじゃ「approve」で WordPress コアファイルを検索するのじゃ！って結構な数のファイルがありますね。じゃー wp-includes/pluggable.php から見てみましょう。</p>
<pre><code>#1138 $notify_message .= sprintf( __('Approve it: %s'),  admin_url("comment.php?action=approve&#038;c=$comment_id") ) . "\r\n";</code></pre>
<p>なんてラッキー！この関数は <code>wp_notify_moderator()</code> なのでビンゴですね、「ビンゴ」なんて実社会で言うヤツ見た事ないですけど。<br />
実はこの pluggable.php にあるファンクションは、プラグインで好きにカスタマイズしちゃってちょうだいってヤツばかりなんです。なんつっても pluggable ですから。意味わかるよね？よし、いいコだ。んで、1つ1つのファンクションが</p>
<pre><code>if ( !function_exists('ファンクション名') ) :　〜　endif;</code></pre>
<p>で囲まれてますでしょ奥さん？これは、この名前のファンクションがプラグインに無けりゃ今からコレ使うようにするし、ありゃぁソッチ使いますよ、って意味です。クダケ過ぎてかえってわかりにくいですね。フィルタだのアクションだのフックを駆使しなくても関数ごとゴッソリ変えられるってワケです。で、プラグインで同名の名前を作って処理内容を自分色に染め上げるわけですが、プラグインでのファンクションの定義も pluggable.php と同じく</p>
<pre><code>if ( !function_exists('ファンクション名') ) :　〜　endif;</code></pre>
<p>で囲ってあげましょう。これは、プラグイン有効化の時に、既にオリジナルのファンクションが読まれちゃってるので、再定義エラー！ってならないようにするためです。有効化した後は、WordPress くんは有効化されたプラグイン → pluggable.php の順に読み込みますので、プラグインで定義されたファンクションの方が有効になるって仕組みです。ってややこしいわ！</p>
<h4>カスタマイズの詳細</h4>
<p>なんともシックリこない件名の「モデレート」してくださいメールの宛先になっている、管理画面メインメニュー［設定｜一般］の［メールアドレス］は、<code>admin_email</code> ってゆーオプションに入ってます。<code>wp_notify_moderator()</code> では以下のようにアドレスを取得し、メール送信します。</p>
<pre><code>$admin_email = get_option('admin_email');
  :
@wp_mail($admin_email, $subject, $notify_message, $message_headers);</code></pre>
<p>pluggable らしくファンクション内には一見するとフックがありません。とは言っても <code>get_option()</code> の内部で呼んでる <code>pre_option_admin_email</code> フィルタでムリムリカスタマイズすることだってできるんだぜ、ぁあん？ですが、諸々メンドクサイことになること必至ですので、pluggable らしく関数を丸コピして、必要な所だけコソッと変更しましょう。</p>
<pre><code>オリジナル：
$comment = $wpdb-&gt;get_row($wpdb-&gt;prepare("SELECT * FROM $wpdb-&gt;comments WHERE comment_ID=%d LIMIT 1", $comment_id));
$post = $wpdb-&gt;get_row($wpdb-&gt;prepare("SELECT * FROM $wpdb-&gt;posts WHERE ID=%d LIMIT 1", $comment-&gt;comment_post_ID));
  :
$admin_email = get_option('admin_email');
  :
@wp_mail($admin_email, $subject, $notify_message, $message_headers);

変更後：
$comment = get_comment($comment_id);
$post = get_post($comment-&gt;comment_post_ID);
$user = get_userdata($post-&gt;post_author);
  :
@wp_mail($user-&gt;user_email, $subject, $notify_message, $message_headers);</code></pre>
<p>はい、こんだけです。オリジナルの <code>$post</code>, <code>$comment</code> の取得の仕方はツライので、ステキに書き換えましょう。あとは、メールの送付先を投稿の作成者のアドレスにするだけです。最後にプラグインファイルとしての体裁を整えればできあがりです。詳細はプラグインファイルをダウンロードして見てみて。なんつー手抜き。<br />
ちなみに、作成者に 'moderate_comments' の権限は無くていいのかね、って疑問がありますが 、承認処理をしている <code>wp-admin/comment.php</code> では記事に対する 'edit_posts' の権限のチェックしかしてません。記事の作成者は当然 'edit_posts' 権限があるので、Capabilities に関しては気にせんで OK です。<strrong>今のところ</strong>。</p>
<h4>Conclusion</h4>
<p>ちゅーわけで、初めてのプラグインは何とか動いてるようです。初めてって不安ですよね。こ、これで合ってるのかな。オレ変じゃないかな。とドキドキもんです。でもま、変だっていいじゃない、間違ってても気にすんなよ。皆そうやって成長するもんさ。ただちょっと先を行ってる人は、アタタカク見守ってあげようぜ。経験値があるのは別に偉いってことでも能力が上ってことでもありゃしねぇ。自分だって経験値が無い時があったんだから、そういうこと忘れないように、オゴリタカブラナイように。そいでもって追い抜かれる恐怖を感じるなら、相手を叩くよりも自分を高める方に持って行くのがクールってもんだぜ。<br />
ぁ、オレ様がブチ抜くよフフ、って話じゃないからね。オレって結構謙虚なんだからラブ&hearts;<br />
当プラグインへのご質問・ご要望は <a href="#respond">コメント</a> でお気軽に。</p>
<h5>動作確認バージョン</h5><ul class="tested-vers"><li>WordPress 3.0.1</li></ul>]]></content:encoded>
			<wfw:commentRss>http://wpxtreme.jp/notify-author/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://wpxtreme.jp/notify-author" />
	</item>
		<item>
		<title>Sex and the City 2 Bling Diamond Text Effect in Photoshop</title>
		<link>http://wpxtreme.jp/sex-and-the-city-2-bling-diamond-text-effect-in-photoshop</link>
		<comments>http://wpxtreme.jp/sex-and-the-city-2-bling-diamond-text-effect-in-photoshop#comments</comments>
		<pubDate>Thu, 27 May 2010 20:10:51 +0000</pubDate>
		<dc:creator>kz</dc:creator>
				<category><![CDATA[TUTORIALS]]></category>
		<category><![CDATA[logo]]></category>
		<category><![CDATA[photoshop]]></category>
		<category><![CDATA[typography]]></category>

		<guid isPermaLink="false">http://wpxtreme.jp/?p=495</guid>
		<description><![CDATA[<a href="http://www.sexandthecitymovie.com/" title="フラッシュだよ、気をつけて！">Sex and the City 2</a> がもうすぐ公開ですね。前回の映画を DVD で見てからすっかりハマって、ドラマのDVDを借りまくってました。旧作が100円で良かった、ありがとう GEO。同時期にブームになった人が近隣に複数いたらしく、返却されたら即借りる、返却したら即借りられてる。といった静かな攻防も楽しかったです。<br />
ところで、キャバ嬢向け雑誌や花より男子のDVDパッケージのようなキラキラのデコロゴ、どうやって描いてるか知ってますか？知ってたら教えて（はぁと。調べてもなんかビミョーなチュートリアルしかあらへんわ、使えんのぉと常々思ってたところにこの Sex and the City 2、キラキラで来よったで。さすがサマンサ伊達に50超えとらへんわ。<br />
そういったわけで今回は、Sex and the City 2 のキラキラにインスパイアされたオレが  Photoshop でこうすると似たようなことができまっせという内容をお届けする。ちゃんとデザインの勉強をした方や業務で培ったテクをお持ちの方は優しい心で見守ってあげてください。 <a class="excerpt-more" href="http://wpxtreme.jp/sex-and-the-city-2-bling-diamond-text-effect-in-photoshop">Continue Reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<h4>Final Image</h4>
<p><a href="http://wpxtreme.jp/cms/wp-content/uploads/2010/05/satc2-1.jpg"><img src="http://wpxtreme.jp/cms/wp-content/uploads/2010/05/satc2-1-620x310.jpg" alt="" title="Final Image" width="620" height="310" class="alignnone size-large wp-image-502" /></a>もうちょっと作品的にステキに仕上げると良いのだけども、都合により愛想のない仕上がりになっておる。なお、この記事ではいつものような「えびちゃんがどう」とかいう無駄な話はしない。だって超忙しいんだもの。<br />
なおなお、この記事は Mac 向けに書いている。というかオレは Windows のことはイチイチ気にかけてあげないので、残念ながら Windows をお使いの方はキーの使い方など各自適宜読み替えてください。でもどうせ替えるなら Mac にカエルのがオススメだよ。</p>
<h4>背景を描く</h4>
<p>ここは本題じゃないので読み飛ばして OK。</p>
<ul>
<li>ファイル > 新規<br />
幅1000pixel x 高さ500pixel<br />
<a href="http://wpxtreme.jp/cms/wp-content/uploads/2010/05/satc2-11.jpg"><img src="http://wpxtreme.jp/cms/wp-content/uploads/2010/05/satc2-11-620x387.jpg" alt="" title="新規" width="620" height="387" class="alignnone size-large wp-image-510" /></a></li>
<li>フィルタ ＞ 描画 ＞ 雲模様1<br />
描画色：#FFFFFF<br />
背景色：#000000<br />
<a href="http://wpxtreme.jp/cms/wp-content/uploads/2010/05/satc2-2.jpg"><img src="http://wpxtreme.jp/cms/wp-content/uploads/2010/05/satc2-2-620x387.jpg" alt="" title="雲模様" width="620" height="387" class="alignnone size-large wp-image-511" /></a></li>
<li>フィルタ ＞ ぼかし ＞ ガウス<br />
半径：70pixel<br />
<a href="http://wpxtreme.jp/cms/wp-content/uploads/2010/05/satc2-3.jpg"><img src="http://wpxtreme.jp/cms/wp-content/uploads/2010/05/satc2-3-620x387.jpg" alt="" title="ぼかし" width="620" height="387" class="alignnone size-large wp-image-512" /></a></li>
<li>フィルタ ＞ ノイズ ＞ ノイズを加える<br />
量：2%<br />
分布方法：均等に分布<br />
<a href="http://wpxtreme.jp/cms/wp-content/uploads/2010/05/satc2-4.jpg"><img src="http://wpxtreme.jp/cms/wp-content/uploads/2010/05/satc2-4-620x387.jpg" alt="" title="ノイズ" width="620" height="387" class="alignnone size-large wp-image-513" /></a></li>
<li>レイヤー ＞ 新規調整レイヤー ＞ トーンカーブ<br />
<a href="http://wpxtreme.jp/cms/wp-content/uploads/2010/05/satc2-5.jpg"><img src="http://wpxtreme.jp/cms/wp-content/uploads/2010/05/satc2-5-620x387.jpg" alt="" title="トーンカーブ" width="620" height="387" class="alignnone size-large wp-image-514" /></a></li>
<li>レイヤー ＞ 新規調整レイヤー ＞ 色相・彩度<br />
色相：292<br />
彩度：15<br />
明度：50<br />
色彩の統一をチェック<br />
<a href="http://wpxtreme.jp/cms/wp-content/uploads/2010/05/satc2-6.jpg"><img src="http://wpxtreme.jp/cms/wp-content/uploads/2010/05/satc2-6-620x387.jpg" alt="" title="色相・彩度" width="620" height="387" class="alignnone size-large wp-image-515" /></a></li>
</ul>
<h4>ダイアモンドのパターン作成</h4>
<p>恐れんで良い。ただの白い丸だ。</p>
<ul>
<li>ファイル > 新規<br />
幅 7pixel x 高さ 7pixel</li>
<li>新規レイヤーを作成して、楕円ツールで円を描画<br />
描画色：#FFFFFF<br />
※7 x 7 めいっぱいじゃなくて、周囲は黒い部分を残し気味にしてあげよう。<br />
※別のレイヤーを下敷きにして、描画色 #000000 で塗りつぶしておくと見易いぜ。<br />
<a href="http://wpxtreme.jp/cms/wp-content/uploads/2010/05/satc2-7.jpg"><img src="http://wpxtreme.jp/cms/wp-content/uploads/2010/05/satc2-7-620x387.jpg" alt="" title="ダイアモンドだね" width="620" height="387" class="alignnone size-large wp-image-517" /></a></li>
<li>編集 ＞ パターンを定義<br />
パターン名：diamond7x7<br />
※背景は透明にしておくこと。<br />
<a href="http://wpxtreme.jp/cms/wp-content/uploads/2010/05/satc2-8.jpg"><img src="http://wpxtreme.jp/cms/wp-content/uploads/2010/05/satc2-8-620x387.jpg" alt="" title="パターンを定義" width="620" height="387" class="alignnone size-large wp-image-518" /></a></li>
</ul>
<h4>デコるぜ</h4>
<ul>
<li>テキスト追加<br />
フォント：Minion Pro<br />
サイズ：256pt<br />
描画色：#333333<br />
※WPCITYって、、、だよなうんオレもそう思うよ。<br />
<a href="http://wpxtreme.jp/cms/wp-content/uploads/2010/05/satc2-9.jpg"><img src="http://wpxtreme.jp/cms/wp-content/uploads/2010/05/satc2-9-620x387.jpg" alt="" title="テキスト追加" width="620" height="387" class="alignnone size-large wp-image-519" /></a></li>
<li>テキストレイヤーの上に新規レイヤーを作成して、先ほど作成したパターンで塗りつぶす。<br />
レイヤー名：dia<br />
パターン：diamond7x7<br />
<a href="http://wpxtreme.jp/cms/wp-content/uploads/2010/05/satc2-10.jpg"><img src="http://wpxtreme.jp/cms/wp-content/uploads/2010/05/satc2-10-620x387.jpg" alt="" title="パターンで塗りつぶし" width="620" height="387" class="alignnone size-large wp-image-520" /></a></li>
<li>クリッピングマスクを作成。</li>
<li>「dia」レイヤーを複製する。<br />
レイヤー名：dia blur</li>
<li>クリッピングマスクを作成。</li>
<li>フィルタ ＞ ぼかし ＞ ガウス<br />
半径：0.8pixel<br />
<a href="http://wpxtreme.jp/cms/wp-content/uploads/2010/05/satc2-111.jpg"><img src="http://wpxtreme.jp/cms/wp-content/uploads/2010/05/satc2-111-620x387.jpg" alt="" title="ぼかし" width="620" height="387" class="alignnone size-large wp-image-521" /></a></li>
<li>一番上に新規レイヤーを作成して、テクスチャを貼付け。<br />
レイヤー名：grunge<br />
テクスチャ：<a href="http://www.bittbox.com/freebies/free-texture-tuesday-white-and-black-grunge" title="Bittbox">Bittbox</a><br />
描画モード：乗算<br />
不透明度：70%<br />
※黒い部分が文字にまんべんなくかかるようにテクスチャを移動したり回転したりすると良い。<br />
<a href="http://wpxtreme.jp/cms/wp-content/uploads/2010/05/satc2-12.jpg"><img src="http://wpxtreme.jp/cms/wp-content/uploads/2010/05/satc2-12-620x387.jpg" alt="" title="テクスチャ" width="620" height="387" class="alignnone size-large wp-image-522" /></a></li>
<li>イメージ ＞ 色調補正 ＞ トーンカーブ<br />
黒いところがドギツク黒くなり過ぎないように、下の方を持ち上げよう（キャプチャ忘れ）。</li>
<li>フィルタ ＞ ぼかし ＞ ガウス<br />
半径：0.5pixel</li>
<li>クリッピングマスクを作成。<br />
<a href="http://wpxtreme.jp/cms/wp-content/uploads/2010/05/satc2-13.jpg"><img src="http://wpxtreme.jp/cms/wp-content/uploads/2010/05/satc2-13-620x387.jpg" alt="" title="テクスチャぼかし" width="620" height="387" class="alignnone size-large wp-image-523" /></a></li>
</ul>
<p>ダイヤは白と黒だけよりも、虹色をほんのり加えるとソレっぽくなるぞ。</p>
<ul>
<li>一番上に新規レイヤーを作成して、描画色で塗りつぶす。<br />
レイヤー名：color<br />
描画色：#000000</li>
<li>フィルタ ＞ ノイズ ＞ ノイズを加える。<br />
量：100%<br />
分布方法：均等に分布<br />
※カラーノイズだぜ<br />
<a href="http://wpxtreme.jp/cms/wp-content/uploads/2010/05/satc2-14.jpg"><img src="http://wpxtreme.jp/cms/wp-content/uploads/2010/05/satc2-14-620x387.jpg" alt="" title="カラーノイズ" width="620" height="387" class="alignnone size-large wp-image-524" /></a></li>
<li>フィルタ ＞ ピクセレート ＞ モザイク<br />
セルの大きさ：10平方ピクセル
<br /><a href="http://wpxtreme.jp/cms/wp-content/uploads/2010/05/satc2-15.jpg"><img src="http://wpxtreme.jp/cms/wp-content/uploads/2010/05/satc2-15-620x387.jpg" alt="" title="カラーモザイク" width="620" height="387" class="alignnone size-large wp-image-525" /></a></li>
<li>フィルタ ＞ ぼかし ＞ ガウス<br />
半径：8pixel<br />
<a href="http://wpxtreme.jp/cms/wp-content/uploads/2010/05/satc2-16.jpg"><img src="http://wpxtreme.jp/cms/wp-content/uploads/2010/05/satc2-16-620x387.jpg" alt="" title="カラーモザイクぼかし" width="620" height="387" class="alignnone size-large wp-image-526" /></a></li>
<li>クリッピングマスクを作成。<br />
描画モード：カラー<br />
<a href="http://wpxtreme.jp/cms/wp-content/uploads/2010/05/satc2-17.jpg"><img src="http://wpxtreme.jp/cms/wp-content/uploads/2010/05/satc2-17-620x387.jpg" alt="" title="リアルな色づけ" width="620" height="387" class="alignnone size-large wp-image-527" /></a><br />
※ほんのりがステキ。</li>
</ul>
<h4>縁取ってみよう</h4>
<p>おいおい、あんまり欲張るもんじゃないぜ。</p>
<ul>
<li>テキストレイヤーの下に新規レイヤーを作成する。<br />
レイヤー名：stroke</li>
<li>command+テキストレイヤーをクリック。<br />
テキストが選択される。</li>
<li>選択 ＞ 選択範囲を変更 ＞ 拡張<br />
拡張量：2pixel<br />
<a href="http://wpxtreme.jp/cms/wp-content/uploads/2010/05/satc2-18.jpg"><img src="http://wpxtreme.jp/cms/wp-content/uploads/2010/05/satc2-18-620x387.jpg" alt="" title="縁取り拡張" width="620" height="387" class="alignnone size-large wp-image-529" /></a></li>
<li>「stroke」レイヤーを選択し、選択範囲内を描画色で塗りつぶす。<br />
描画色：#FFFFFF<br />
<a href="http://wpxtreme.jp/cms/wp-content/uploads/2010/05/satc2-19.jpg"><img src="http://wpxtreme.jp/cms/wp-content/uploads/2010/05/satc2-19-620x387.jpg" alt="" title="縁取り塗りつぶし" width="620" height="387" class="alignnone size-large wp-image-530" /></a></li>
<li>「stroke」レイヤーをコピーして非表示にしておく。</li>
<li>command+テキストレイヤーをクリック。<br />
「stroke」レイヤーを選択し［delete］キーを押す。<br />
※まさに縁取り！<br />
<a href="http://wpxtreme.jp/cms/wp-content/uploads/2010/05/satc2-20.jpg"><img src="http://wpxtreme.jp/cms/wp-content/uploads/2010/05/satc2-20-620x387.jpg" alt="" title="まさに縁取り" width="620" height="387" class="alignnone size-large wp-image-531" /></a></li>
<li>「stroke」レイヤーをダブルクリックして「レイヤースタイル」を開く。<br />
ベベルとエンボス - <br />
サイズ：0<br />
角度：90<br />
<a href="http://wpxtreme.jp/cms/wp-content/uploads/2010/05/satc2-21.jpg"><img src="http://wpxtreme.jp/cms/wp-content/uploads/2010/05/satc2-21-620x387.jpg" alt="" title="ベベル" width="620" height="387" class="alignnone size-large wp-image-532" /></a></li>
<li>「grunge」レイヤーを複製し、「stroke」レイヤーの上に移動してクリッピングマスクを作成。<br />
「color」レイヤーのクリッピングが外れるので直してあげてね。</li>
<li>フィルタ ＞ ぼかし ＞ ガウス<br />
半径：3pixel<br />
<a href="http://wpxtreme.jp/cms/wp-content/uploads/2010/05/satc2-22.jpg"><img src="http://wpxtreme.jp/cms/wp-content/uploads/2010/05/satc2-22-620x387.jpg" alt="" title="ぼかしグランジ" width="620" height="387" class="alignnone size-large wp-image-533" /></a></li>
<li>テキストレイヤーをダブルクリックして「レイヤースタイル」を開く。<br />
シャドウ - <br />
角度：100<br />
距離：1<br />
チョーク：20<br />
サイズ：5<br />
<a href="http://wpxtreme.jp/cms/wp-content/uploads/2010/05/satc2-29.jpg"><img src="http://wpxtreme.jp/cms/wp-content/uploads/2010/05/satc2-29-620x387.jpg" alt="" title="シャドウ" width="620" height="387" class="alignnone size-large wp-image-543" /></a></li>

</ul>
<h4>白いよりは青みがかってる方がリアル</h4>
<ul>
<li>一番上に新規レイヤーを作成し塗りつぶす。<br />
レイヤー名：blue<br />
描画色：#587EE0（青っぽければ何でも良い）</li>
<li>フィルタ ＞ ノイズ ＞ ノイズを加える。<br />
量：100%<br />
分布方法：均等に分布<br />
グレースケールノイズにチェック<br />
<a href="http://wpxtreme.jp/cms/wp-content/uploads/2010/05/satc2-23.jpg"><img src="http://wpxtreme.jp/cms/wp-content/uploads/2010/05/satc2-23-620x387.jpg" alt="" title="青いノイズ" width="620" height="387" class="alignnone size-large wp-image-535" /></a></li>
<li>フィルタ ＞ ぼかし ＞ ガウス<br />
半径：1pixel<br />
<a href="http://wpxtreme.jp/cms/wp-content/uploads/2010/05/satc2-24.jpg"><img src="http://wpxtreme.jp/cms/wp-content/uploads/2010/05/satc2-24-620x387.jpg" alt="" title="青ノイズぼかし" width="620" height="387" class="alignnone size-large wp-image-536" /></a></li>
<li>クリッピングマスクを作成。<br />
描画モード：オーバーレイ<br />
不透明度：50%<br />
<a href="http://wpxtreme.jp/cms/wp-content/uploads/2010/05/satc2-25.jpg"><img src="http://wpxtreme.jp/cms/wp-content/uploads/2010/05/satc2-25-620x387.jpg" alt="" title="青オーバーレイ" width="620" height="387" class="alignnone size-large wp-image-537" /></a><br />
※ググっと良くなりましたね。</li>
</ul>
<h4>キラキラ bling bling させよう</h4>
<ul>
<li>一番上に新規レイヤーを作成。<br />
レイヤー名：star</li>
<li>星形（十字形）のブラシをどっかからパチッてきて鋭い輝きを追加。<br />
描画色：#FFFFFF<br />
不透明度：100%<br />
流量：100%<br />
<a href="http://wpxtreme.jp/cms/wp-content/uploads/2010/05/satc2-26.jpg"><img src="http://wpxtreme.jp/cms/wp-content/uploads/2010/05/satc2-26-620x387.jpg" alt="" title="星" width="620" height="387" class="alignnone size-large wp-image-539" /></a></li>
<li>一番上に新規レイヤーを作成。<br />
レイヤー名：light</li>
<li>普通のブラシでソフトな輝きを追加。<br />
描画色：#FFFFFF<br />
不透明度：100%<br />
流量：50%<br />
<a href="http://wpxtreme.jp/cms/wp-content/uploads/2010/05/satc2-27.jpg"><img src="http://wpxtreme.jp/cms/wp-content/uploads/2010/05/satc2-27-620x387.jpg" alt="" title="ソフトなかがやき" width="620" height="387" class="alignnone size-large wp-image-540" /></a></li>
 <li>command+「strokeのコピー」レイヤーをクリックし、「light」レイヤーを選択。</li>
<li>レイヤー ＞ レイヤーマスク ＞ 選択範囲外をマスク</li>
<li>「star」レイヤーを選択。</li>
<li>レイヤー ＞ レイヤーマスク ＞ 選択範囲外をマスク</li>
</ul>
<p>つまり、キャプチャ忘れってことだ。テキスト外の bling bling を削除！してます。お好みで。</p>
<h4>縮小してもイケてるぜ</h4>
<p>ちょろっと検索して出てくるチュートリアルは使えんのぉ、の理由に作成後に縮小しちゃうとすごく残念なことになってしまう、てのがある。やってみたらわかる。すごく残念。でも、なんとコイツは縮小してもイカしてるのだ。ありがとう Sex and the City 2 のロゴ描いた人。</p>
<ul>
<li>テキスト関連のレイヤーをすべて選択してマージしちゃおう。command+E だ。<br />
えー！せっかく描いたのにー！って人は「すべて選択＞新規フォルダに入れる＞フォルダ複製＞ソッチをマージ」すると良い。</li>
<li>そしてリサイズ（縮小）</li>
<li>フィルタ ＞ シャープ ＞ シャープ</li>
<li>編集 ＞ 「シャープ」をフェード<br />
不透明度：70%<br />
<a href="http://wpxtreme.jp/cms/wp-content/uploads/2010/05/satc2-28.jpg"><img src="http://wpxtreme.jp/cms/wp-content/uploads/2010/05/satc2-28-620x387.jpg" alt="" title="縮小" width="620" height="387" class="alignnone size-large wp-image-542" /></a></li>
</ul>
<p>縮小後にシャープしてあげるとギラギラが増してよろしいがやり過ぎはダメです。さらに縮小する場合は「light」レイヤーは非表示にして、「star」レイヤーで bling bling を増やすといいぞ。このとき、星形ブラシは「十字」にするように。「×印」にするとイマイチなのだ。</p>
<h4>Conclusion</h4>
<p>まったく愛想の無いチュートリアルでしたが言いたいことはおわかりいただけましたでしょうか。より味わい深くするには以下をお試しください。</p>
<ul>
<li>整列してるダイアモンド塗りつぶしパターンをちょいちょいズラす。</li>
<li>グランジー部分を手作業でがんばる。</li>
<li>シャドウを焼き込みでがんばる。</li>
<li>bling bling を覆い焼きでがんばる。</li>
</ul>
<p>手間をかければかける程、イキな仕上がりになります。んが、同時に絵心も要求されますのでご注意ください。<a href="http://wpxtreme.jp/cms/wp-content/uploads/2010/05/satc2-1.jpg"><img src="http://wpxtreme.jp/cms/wp-content/uploads/2010/05/satc2-1-620x310.jpg" alt="" title="Final Image" width="620" height="310" class="alignnone size-large wp-image-502" /></a>
WordPress くんが微妙に縮小した画像が表示されてるので、クリックしてちょい大きくして見てね。んーすばらしい。一年くらいウマイやり方ねーかなーと悶々しておったがこれで解決じゃフハハハh！小悪魔花より系とは表現方法が違うけどもオレはこっちのが好きだぜラブ&hearts;</p>
<h5>動作確認バージョン</h5><ul class="tested-vers"><li>Photoshop CS4</li></ul>]]></content:encoded>
			<wfw:commentRss>http://wpxtreme.jp/sex-and-the-city-2-bling-diamond-text-effect-in-photoshop/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://wpxtreme.jp/sex-and-the-city-2-bling-diamond-text-effect-in-photoshop" />
	</item>
		<item>
		<title>フォーラムの歩き方</title>
		<link>http://wpxtreme.jp/how-to-walk-on-a-forum</link>
		<comments>http://wpxtreme.jp/how-to-walk-on-a-forum#comments</comments>
		<pubDate>Sun, 16 May 2010 21:04:44 +0000</pubDate>
		<dc:creator>kz</dc:creator>
				<category><![CDATA[HOW-TO]]></category>
		<category><![CDATA[text]]></category>

		<guid isPermaLink="false">http://wpxtreme.jp/?p=431</guid>
		<description><![CDATA[ども、不誠実なノイズです。<br />
アイツなら絶対記事を書くはずだ、と思われていた皆様の読み通り、今回はえびちゃんの結婚について kz のコメントを発表いたします。<br >
するかー！えびぞうとどっちが早よワヤになるか対決したらええねん！えび同士でな！フハハハハ！うまいなオレフハハハハ！<br />
ソッチの話ではなく、フォーラムでの回答の仕方について kz の考え方をお届けしますね。ただし、通常は不穏な空気を察知したらスルーするのが大人の対応です。フォーラム内に本題外の返信をしたり、ましてや粘着的にブログ記事にするのは、内容のステキ度に関わらず一般的に敬遠される行動です。将来のある皆は真似しないように。<br />
さて、フォーラムには色んな背景を持った様々なレベルの方々が集います。考え方も生き様も人それぞれ。フォーラムはコミュニティ、すなわち社会です。オンラインであってもソコでの歩き方はオフラインと同様。背筋をピンと伸ばして颯爽と歩くにはどういったことに配慮すれば良いのか、オマエが言うなとホウボウから突っ込まれつつ、いつものようにダラダラ書きます。

<a class="excerpt-more" href="http://wpxtreme.jp/how-to-walk-on-a-forum">Continue Reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<h4>概要</h4>
<p>WordPress 日本語フォーラムでの <a href="http://ja.forums.wordpress.org/topic/4000">タクソノミーの名前取得</a> というトピックへの kz の回答に対して「セキュリティ上の問題」「回答の仕方」「回答者としての姿勢」という観点からご指摘をいただいた。どれも大切なことなので kz 的総括を行いココに記す。2010.5.16 没。お亡くなってどうすんねん。</p>
<h4>訂正</h4>
<p>まず、kz の発言に「<code>single_cat_title()</code> 〜そのまま <code>echo</code>」とあるがこれは誤りである。ごめんな、WordPress。投稿前に <code>single_cat_title</code> のフィルタを Finder ちゃんに尋ねてみてもそんなんないよーとツレナイ返事だったので <code>add_filter</code> されてないと誤解しちまったぜ。wp-includes/general-template.php すら出てこん時点で気づけっちゅう話。なお、これは言い訳でも自己弁護でもなく単に事実をご説明差し上げただけだ。皆様におかれましては、ぐねぐねしたモノの見方はせずにまっすぐスクスクと育っていただきたい。それにしても自分の過ちを自ら素直に認める辺り、さすが kz だな。人間ができておる。<br />
実際は wp-includes/default-filters.php で <code>wptexturize</code>, <code>strip_tags</code> が <code>add_filter</code> されているので安心してください。Finder ちゃんがたまにちゃんと検索してくれなくなるのは MacBook 買い替えのお知らせなのか？</p>
<h4>はじめに</h4>
<p>イチイチ但し書きするのはメンドウなので予め皆さんへのお願いをまとめておく。しっかり読んでご理解いただけましたら [Accept] ボタンをクリックして先へお進みください。</p>
<ul>
<li>本文では「一般的に」「普通なら」「通常は」などのような書き方をするが「普通ってなんですか？そんなの人それぞれじゃないですか？」とか中学生みたいな反応は思春期まっただ中のうちに使い果たしておいて欲しいので、読む前にグラウンド100周×50本走ってこい。</li>
<li>例えば「価値観を押し付けるのは良くない」に対して「それこそ良くないって価値観を押し付けてますよね」な返しは、「アホって言う人がアホなんです」に「アホって言う人がアホ、って言う人がアホなんです」と返すのと同じである。ちょっと例えがアレだが言いたい事はわかるだろう。そもそも初めにアホって言うヤツがイカンのであって、言いがかりをつけられた側がそれを指摘するのは問題ない。わからん？ん、走ってこい。こういった小ナマイキな小学生的反応もご遠慮いただけますと、今夜もおいしくご飯がいただけますのでヨロシク。</li>
<li>kz は明らかな悪意を持って自分を攻撃してくる個人を除いて、特定の個人に対してオンラインのテキストなんぞで攻撃することはない。とは言っても世の中はとても広くて、存在しない悪意を実体参照するという特殊能力を持った好戦的な X-MEN が存在する。今回はそういった方々のために、実験的に「別に何の悪意も敵意もないのでよろしくね（はぁと」っちゅー意味で、必要かもと思われる箇所の文末に「ラブ&hearts;」を付加する。しかしまー、そんな人間を超越した存在にまで配慮してテキストを書かなイカンとなると毛がいくらあっても足りんわ。日本はいつからこんな但し書き地獄になったんだ？</li>
<li>あとは、他人と円滑にコミュニケーションが取れる読解力・察するセンスがあればよろしい。</li>
</ul>
<h4>kz の自己紹介</h4>
<p>そもそも kz ってどんなやつやねんという方向けに「昔ワンレンサラサラロングヘアーだった人への100の質問」にお答えします 。<a href="http://yokohama2010.wordcamp.jp/" title="WordCamp 横浜公式サイト">WordCamp Yokohama</a> でお会いするであろう方々には心の事前準備としてもぜひご活用いただきたい。準備は事前に決まっとるわ！事後の準備があるなら事後というコトバに含まれるステキなニュアンスについてぜひ語り明かしたいものです。もう準備関係あらへんがな。</p>
<ul>
<li>オンラインでもオフラインでも公共の場での人への接し方は変わらない。<br />
公共オンラインの例：フォーラム<br />
公共オフラインの例：一般社会<br />
※ちなみに wpxtreme はプライベートなオンラインな。</li>
<li>仲の良い人，面識のある人，面識のない人，まったく知らん人 各々への接し方は変わらない。</li>
<li>嫌われてることはあるだろうが、わざわざ人を嫌うことはない。メンドウだもの。<br />
苦手なタイプはいる。ワンマン社長とかのメンドくさい系。</li>
<li>理論，概念，建前に興味は無い。実際どうなんってゆー正味の話がすべてさ。</li>
<li>律儀なメンドくさがりだが、メンドウなことを無くすための努力は惜しまない。</li>
<li>非常にまったりしておる。カリカリしても何も生み出さんので怒る必要がない。</li>
<li>誰に対しても悪気も悪意も敵意も何も無い。メンドクサイやん。</li>
<li>どっかでボロクソ言われてても気にならない。マイナスオーラに包まれてお気の毒にとは思う。</li>
<li>明確な敵意を持って直接攻撃されたら、ケツの穴にゴーヤ突っ込んで奥歯ガタガタ言わしたる。</li>
<li>物事をプラス方向にのみ考える。毎日幸せ。</li>
<li>タブーは無い。何でもカンでもオープンでいいじゃない。</li>
<li>ロクでもない WEB 関連業者が口のうまさだけで儲けている実情。</li>
<li>最近は Photoshop をイジってる方が楽しい。</li>
</ul>
<h4>kz の生きる指針</h4>
<p>kz のことがもっと知りたいの、というえびちゃん（人妻）に。</p>
<ul>
<li>他人を変えることはできない。自分が変われば他人も変わる。</li>
<li>会社に属さなくなっても、社会に属していることを忘れない。</li>
<li>ロジックの世界にどっぷり浸かっていても、人（の心）はロジカルでないことを忘れない。</li>
<li>心に余裕を。社会に感謝を。人に愛情を。テキストにユーモアを。そして何より察するセンスを。</li>
</ul>
<h4>kz の心がけ＠コミュニティ</h4>
<ul>
<li>キチキチ堅苦しくしない。<br />
雰囲気の良さがコミュニティを発展させると考えているため。キチキチはギスギスに変わるしね。</li>
<li>「他人」に対して意見しない。「他人の意見」に対して自分の意見を述べる。</li>
<li>他人の意見の真意が明確でない場合に勝手に決めつけて議論しない。</li>
<li>どう見たって明らかな悪意、以外は「他人」や「他人の意見」を悪い方向に捉えない。<br />
悪く捉えたときは、自分の心がダークサイド寄りになってるってことよ。</li>
<li>他人の意見への改善提案は「〜っていう風だと皆がより幸せになれるかも」な書き方にする。</li>
<li>考え方は人それぞれ。他人の考えをすべて認める必要も細かく否定する必要も無い。<br />
「自分」に対する誤った意見には、ご丁寧に説明をいたします。</li>
<li>自分の考えを他人に強要しない。<br />
日本語ワカリマスカ？という意味で「読☆解☆力」というツッコミはする。<br />
オレ様に従え、賛同せよ、なんつー思惑はない。</li>
<li>相手の使う言葉・表現を使う。</li>
<li>冷たいテキストにならないように楽しんで書く。<br />
感じ悪い書き方しても誰も幸せにならないし、自分の評価を下げるだけだぜ？</li>
<li>コミュニティの特定の個人に対する意見を別のところで書かない。<br />
そういうのは大抵悪口だろ？それは無粋ってもんだぜ。<br />
オレが別のところで意見を述べる場合は関係者にお知らせするぜ。カゲ口にならんようにな。</li>
<li>各々がその時点でできることに、無理せず貢献すれば良い。</li>
<li>誰に対してであろうと謙虚に愛情を持って接する。</li>
</ul>
<p>どれも当たり前やんけですね。え、もう異論があるの？わぉ。とりあえず、横浜においでよ。それにしても kz kz ってどんだけ自分大好きやねんと思われるだろうが、自分を愛せないで誰かを愛することなんてできやしないわ！</p>
<h4>登場人物</h4>
<p>ここでは、一般観覧者の方々から見て kz vs の図式になっている風な方々を対象にする。まだ序盤で元気なので但し書くが、これはその方々に向けた呪いの記事ではない。ケーススタディとして今回の実例を引き合いに、kz の考えをシャア・アズナブルである。ちゃうわ、私もよくよく運のない男だとか言うてる場合か。シェアすることで誰かにとって何らかの参考になれば幸いってわけだ。</p>
<p><br /><strong>lilyfan さん</strong>：<br />
ご存知 Ktai Entry, Ktai Style などのプラグイン作者。kz とは <a href="http://wpxtreme.jp/ktai-entry-%e3%81%a7%e3%83%87%e3%82%b3%e3%83%a1%e3%83%bc%e3%83%ab%ef%bc%88%e8%83%8c%e6%99%af%e3%81%af%e9%99%a4%e3%81%8f%ef%bc%89">Ktai Entry でデコメール</a> が Ktai Entry に取り込まれたり、WordBench 名古屋でお会いしたり、WordCamp 名古屋の WEB 担当チーマー同士なので知った仲だ。</p>
<p><br /><strong>spais さん</strong>：<br />
wp.Vicuna という WordPress テンプレートを提供されている様子。<a href="http://yokohama2010.wordcamp.jp/" title="WordCamp 横浜公式サイト">WordCamp Yokohama</a> 告知バナーのブログパーツを提供されていた気がする。当該トピックが初対面。</p>
<p><br />では、この WordPress に多大な貢献をされているステキな方達と、4ヶ月かそこらのポッと出 WordPress 日本語フォーラム初心者 kz とのやり取り骨子を以下にまとめてみよう。ツイート からも適宜無断引用する。著作権どうこう言うヤツはグラウンドを3年程がむしゃらに駆け回れ。なお kz 側の説明が念入りかもしれんが、それはココが kz のホームなので当たり前のことだ。イチイチ説明さすなラブ&hearts;<br />
<p class="append">【お題】<br />taxonomy.php でタクソノミーの名前を表示したい。<br />
single_cat_title() や single_tag_title() に相当するものはないか？</p>
<p><strong>kz</strong></p>
<ul>
<li>ザザッと <code>single_cat_title() </code> を調べる。</li>
<li><code>$taxonomy = $wp_query-&gt;get_queried_object(); echo $taxonomy-&gt;name;</code> で動作確認。</li>
<li>フィルタが気になったので Finder ちゃんに尋ねるが詳細は前述の通り。</li>
<li>そのまま返信。</li>
</ul>
<p><br /><strong>lilyfan さん</strong>：</p>
<ul>
<li>セキュリティ上の問題について
<ul>
<li><code>echo esc_html($taxonomy-&gt;name);</code> にするべき。</li>
<li>タクソノミー名なら大丈夫のはずだが、変数をそのまま echo するのは原則禁止とした方がよい。</li>
<li>WordPress のコアコードでも <code>esc_html()</code> してないとこあるけどね。(twitter)</li>
</ul>
</li>
<li>回答の仕方について
<ul>
<li>回答としてコードをいきなり書くのは、怠け者の質問者を増やすのでやめて頂きたい。</li>
<li>コードは質問者がまず作って、回答者は添削に徹する方が質問者のためになる。(twitter)</li>
</ul>
</li>
</ul>
<p><br /><strong>kz</strong>：<br />
<ul>
<li>セキュリティについて
<ul>
<li>タクソノミー名の表示やったら正味問題ないんちゃうんという認識。</li>
<li>お題を解く事のみにフォーカスしているので、実運用に際しては各自よきにはからえ。</li>
</ul>
</li>
<li>回答の仕方について
<ul>
<li>バシッとコードで一発解決、が諸々クールだと思っている。</li>
<li>質問者が怠け者か勤勉かには立ち入らない。</li>
</ul>
</li>
<li>何故回答するのか
<ul>
<li>1つの質問でお世話になったので1万倍にして返す。</li>
<li>どうなんだろと思って調べてコレか！と学ぶのが楽しい。</li>
</ul>
</li>
</ul>
<p><br /><strong>spais さん</strong>：（3返信とも同じ主旨ラブ&hearts;）<br />
<ul>
<li>お世話を返す気持ちなら不備のある発言はしない方がよい。</li>
<li>セキュリティ的な穴はちょっとした気の緩みから生まれる。</li>
<li>めんどくさいならば無理に答える必要は無い。</li>
<li>プラグインを利用したタクソノミー名改ざんのサンプルご提供。</li>
</ul>
<p>自分に都合の良いところだけ抽出とかセコいマネはしないぜ？本記事を書き始めた後に返信がさらに追加されてるけども、本質的に新しいネタは無くてオレ的にはどうでもいいので省略する。興味ある方は <a href="http://ja.forums.wordpress.org/topic/4000" title="WordPress 日本語フォーラム">当該トピック</a> を確認してね。<br />
あ、ちなみに spais さんの返信はオレの話を読まずにワザと同じ事を3回書いてるとしか思えないので全部読まんでも良いと思うけど、お腹が空いてる人はあえて全部読んで満腹になるのもアリだぜラブ&hearts; そんな感じですが OK ？はい、では続けますね。</p>
<h4>それぞれの主張と kz の見解</h4>
<p>アツ苦しい議論を展開する御三方に共通するのは、スルーしないところである。そう、言わな気がすまん側の住人なのだ。だが、社会にすんなり順応されている皆さんにしてみたら他でやれっちゅう話。多くの場合、言わな気がすまんことは言わん方が良いことなのだ。どうなろうとも自分の人生には一切自分で責任を持つという武士でない限り、真似はしない方が平和な生活を営む事ができるのでぜひ覚えておいて欲しい。</p>
<p><br /><strong>lilyfan さん</strong> vs <strong>kz</strong>：</p>
<p>lilyfan さんの本題は「回答コードをいきなり書くのは、怠け者の質問者を増やすのでやめて」だ。「はっきり言うと」とあるので自明ですね。これに気づかんようでは、えびちゃんとデートはおろか、話をすることさえママならんだろう。水着の季節までには何としてでも読解力を鍛えておいて欲しいところだ。<br />で、最近のシンプル過ぎる kz の回答は、ご自身の考えからするとフォーラムに悪影響を及ぼすと思われていたと考えるのが自然だろう。<code>esc_html()</code> のツッコミは単にそれを伝えるためのきっかけに過ぎない。<br />
<br />
で、オレは残念ながら赤ペン先生的な回答の仕方はできない。それはオレがボランティアとして貢献できる範囲を超えているし、自分勝手な事を言えばそんなんちっともオモロないラブ&hearts;。わがままでごめんね皆グスン。<br />
lilyfan さんも kz も色んな意味でフォーラムをより良くしたいという思いは、基本的に同じである。しかし、以下のような決定的な違いがある。</p>
<ul>
<li>良しとする回答のスタイル。
  <ul>
    <li><strong>lilyfan さん</strong>：質問者が自身が考えて解決するように導く。</li>
    <li><strong>kz</strong>：ズバッと即答。</li>
  </ul>
lilyfan さんは即答スタイルに対して「自分で解決しようとしない質問者が増え、フォーラム全体の向上心的なものが右肩下がりになる」ことを危惧している。<br />
質問者の向上心的なものについては、オレは介入しない。伸びる人は自分で伸びるし、伸びる気の無い人は他人がいくら世話を焼いても伸びないと考えているからだ。そして、導くスタイル自体にはまったく異論はない。が、前述の通りそのスタイルでの貢献は負担が大き過ぎてできない。<br />
<br />
導くスタイルは「実践する」となるとハードルがかなり高いと思っている。オレが重要視する「実際どうなん」ってところがムズい。まず、タフな回答者が相当数いないと返信率が間違いなく下がる。すると、質問しても回答がつかない、ここで聞いても解決しない、という悪循環になりフォーラムが停滞する。100円賭けてもいい。また、回答者にかなりの大きさの器が必要となる。赤ペンスタイルがすべて笑顔で解決するとこれほど素晴らしいことはないのだが、回答者がちょいちょいイヤミになったりキレたり途中で去ってしまう流れには結構良くお目にかかる。これはとても残念ネ。<br />
良い視点での話が全然できなくてスマンかったが「こうすればオール OK だぜ？」というナイスアイデアをお持ちの方は、ぜひアチコチでご提案してみてくださいね。マジで頼むぜ。オレからは「タフで器のデカイ回答者を相当数配備」を提案。<br />
<br />
即答スタイルは、lilyfan さんの危惧する悪影響はもちろんあるかもしれない。一方、別な視点から見れば、お前スパムかっちゅう勢いで回答しまくると不思議な事にフォーラム全体が活気づく。またお会いしましたね、という質問者は前回より少しカワがムケている。そして新たな回答者がポツポツ出てくる。しまいにゃ、おいおい、ちったぁオレにも回答させてくれよってなことに！これは皆さん実際に目の当たりにしたんではないでしょか。コレがオレの言う諸々の好循環である。導くスタイルでもこの好循環はあるけども、悪循環との相殺とかかなりのリソースを投入しないとなので、フォーラム全体の活気までは結構遠い。<br />
<br />
ついでに言うと「1万倍にして返す」は申し訳ないが数の話である。1個1個100％の抜かりない回答をするっちゅう意味ではない。できるかそんなもん！ハゲるわ！ラブ&hearts;。オレの唯一の質問はフォーラムでは解決していないが、そんなことはどうでも良い。レアケースな質問だったので返信がなかなか無く、無駄に更新を繰り返してただ待つよりは「尋ねるだけでは申し訳ないし」と回答を始めた。で、しばらくして返信をいただいた。そら嬉しかったがね。何より「返信があった」ってことがですよ。無視されるくらいならいっそ嫌われたい乙女心がよくわかった。だからオレは他の誰かが答えられる質問より、まったく返信がなくてどんどん下に消えて行くようなマニアックな質問に積極的に回答するようにしておったわけじゃ。<br />
<br />
そして kz の経験から言えるのは、フォーラムに限らず人生のあらゆる局面で「人のため」と思って何かをしてもほぼ残念な結果に終わるということだ。「これだけしてやってるのに」とか感じ悪いヤツも顔を出してくる。でも、すべては自分のため、そういう気持ちで臨むと何故だかすべてがスムーズに動いてくれる。なのでオレは「解くのが楽しい」から回答する。<br />
<br />
物事を進めるのには色んなやり方がある。ビジネスとしてシビアに検討すればコストパフォーマンスが一つの指標になるだろう。オレは自分なりにできること／できないこと、メリット／デメリットをコミュニティ全体を通して捉えてマイベストを実践するし、各々が良しとするスタイルで自由に貢献すれば良いと思う。ウチのフォーラムだとこういうやり方がベストですね、ってのを回答者達で考えてみるのもいいだろう。自分が参加しているオープンソースのフォーラムをよりステキにするにはどんな方法があるか、皆もそれぞれ考えて、できれば実践してみると少し世界が広がるかもしれないよ。<br />
<br />
</li>
<li>自分の考えるスタイルを他者にも求めるかどうか。
  <ul>
    <li><strong>lilyfan さん</strong>：求める。</li>
    <li><strong>kz</strong>：皆好きにしたらええと思うよ。</li>
  </ul>
</li>
フォーラムのルールにより回答方法が指定されていれば、参加する者はそれには当然従うべきである。できるなら参加するし、できないなら参加しない、ほんだけ。こういうやり方でお願いという話でも同じ。できるならするし、できないのはごめんなさいとなるラブ&hearts;。<br />
</ul>
<p>さて、ココまで読んで「コイツの自己弁護はまったく鼻につく」というご感想を持たれた方、いらっしゃいますでしょうかラブ&hearts;。えーっとですね、そちらの方から順にグラウンドへ出ていただけますか。はい、100×100で。よろしくお願いいたします。</p>
<p><br /><strong>spais さん</strong> vs <strong>kz</strong>：</p>
<p>非常に興味深い方なので横浜で会うのが楽しみである。なんせ今までに会った事のないタイプだ。そう、えびちゃんクラスを落とすのは金持ちでもイケメンでもない。アホほど男が群がってくる女性ならその程度の男は見飽きておる。自分の知らない世界を教えてくれる男にこそメロメロになるのだ。なお、ここから「ラブ&hearts;」の出現率が異様に高くなるので心しておいてくれ。<br />
<br />
spais さんの本題は一貫して「間違いは誰にでもある」「知ったかぶって間違った意見を貫き通すのは人に迷惑がかかるのでやめてほしい」だ。3回も繰り返し丁寧にご返信くださったので、読解力を鍛え中の方々にも非常にありがたかったと思うラブ&hearts;。spais さんについてオレはまったくご存じなかったが、リンクを探してたどればセクシャルなフレーズをオンライン上に散りばめるちょっとした変態さんだというのがすぐにわかるだろうラブ&hearts;。珍しく他人について語ったがこれは spais さんの人となりを理解する上で非常に重要なポイントであって、他人に意見をしているわけではない。説明だ。違いはわかるね？イチイチ言わんでも良いだろう。さらに今回のやり取りでわかったこともこっそり教えてあげる。</p>
<ul>
<li>あるフレーズをテキストとして書くときの「これはマズい／問題なし」のしきい値が異常に低い。つか、筒抜けに等しいラブ&hearts;。<br />
オレも「これはちょっとどうかな」ってフレーズは面白がって使うけども、スケールが違い過ぎる。無事に社会生活を営めているのかちょっと心配になるほどだラブ&hearts;。</li>
<li>人の言ってる事をあんまり聞いてないラブ&hearts; or ワザとポイントをズラして面白がっている。<br />
コレはスマンがさすがのオレでもドッチかわからん。
</li>
</ul>
<p><strong>バックグラウンドについて</strong>：
<br />チラリとブログを拝見したところによると、spais さんは自分はフォーラムで育ったとおっしゃっている。わざわざブログに書く程なので、それはもうフォーラムに対する思いが人一倍アツイのだ。だから「お世話になったと言いながら誠意のない回答をする」kz にコンタクトせずには居られなかったのだと理解できる。そして「エスケープが必要だとわかっていながらあえてしないとは何事だ？！」「間違ったことを謝りもせずグダグダ言い訳するとは何様じゃ？！」となったのである。多分。<br />
これほどアツイ思いを持った方が今の世の中にもいたことに懐かしさを感じ、そしてそれをそのまま遠慮なく書いてしまう尋常ならざる自由さに驚愕せずにはいられないラブ&hearts;。</p>
<p><br /><strong>セキュリティに関して</strong>：
<br />（ちゅうか本題は回答の仕方だし、そもそもアナタ誰？とは今回突っ込まないでおいてあげるラブ&hearts;。）<br />
スッキリとわかりやすくご説明いただいたので勉強になった方々も多いだろう。緩みは禁物、のヒタムキな姿勢は女性ファンの心をワシ掴みにするに違いない。ただしちょっとした変態さんなのでノーマルな方は気をつけてラブ&hearts;。<br />
<br />
プラグインを使ってのタクソノミー名の改ざんは、あ、なーる。で、そういうアレならダメですね。となる。勉強になりました、ありがとうございました。と kz の礼儀正しい対応により美しくトピック終了となるはずだったが、以降グダグダになってしまって経緯を見守っていた皆様には大変申し訳なかった。<br />
<br />
抜かりは許さん spais さんと、実際問題脅威レベル的に見たら別にええんちゃうんってしつこい kz とで話が噛み合ないのは、お仕事の仕方が違うからだと思われる。spais さんのお仕事が何かは知らないが、テーマを配布しているという事は、自分が作ったものを誰かが管理者権限で使うという状況に身を置いている。お仕事でもソッチ系なら、自分の信用問題になるので抜かりは許されんことになる。ちなみに kz が安易にテーマやプラグインを作って配布しないのは、誰が使うかわからないモノだからそういったことまでバッチリ配慮して抜かりないものを提供する、のがメンドクサイからだラブ&hearts;<br />
<br />
一方 kz はサイトサービスのお仕事をしている。サイトを制作してハイ納品、という切り売りはしない。後々までずっと面倒を見るのだ。管理者権限はオレ。サイトを利用されるお客様は作成者権限のみ。Ktai からの投稿だけ、ってお客様もいる。プラグインは超実績のある自分が内容を把握できる最小限のモノしか使わない。なお、オレは仕組みに興味があるわカスタマイズしたいわでプラグインのソースはひととおり読む。そしてテーマは使った事が無い。そんなん一番楽しいとこ、自分がやりたいやんか。<br />
もう察するセンスを持ったアナタは気づきましたね？オレが一切を管理しているので実質問題ないのだ。フォームから入ってくる値はコワイので気をつけているが、データベースに入ってる値はクリーンなのだ。なのだっていうかそれが当たり前だと思っていたのでタクソノミーの表示がなんで危険なの、っていう素朴な認識なのであった。<br />
<br />
セキュリティについてまとめると lilyfan さん，spais さんがおっしゃるようにフォーラムで誰がどう使うかわからないコードからは危険を排除しておいた方が良い。どこからきたデータも信用しない、のが抜かりない。おっしゃる通りだ。なので大変勉強になりました。ありがとうございました。と返信いたしましたなのである。よろしいでしょうか。<br />
とは言っても実際問題そこまでして XSS か？っちゅう点はそのままです。しつこい。<br />
<br />
このやりとりから学べることは、以下の通り。</p>
<p class="append">他人の置かれている状況を把握してない状態で話をしても噛み合ない。<br />
そんな状態で他人に対して意見を投げつけると危険。<br />
わかっていながら、っちゅーのは誤解やんか。もうしつこいラブ&hearts;。</p>
</p>
<p>さて、ここまで読んで「謝りもしねぇで後出しのフォローを書いてボクのことわかってよとはふざけたヤツだ」と思われた方、いらっしゃいますでしょうかラブ&hearts;。えーっとですね、そちらの方から順に今度はプールへ出ていただけますか。はい、50×1000で。よろしくお願いいたします。<br />
<br />
そろそろ疲れてきたのでまとめに入っていくぜ。spais さんのセキュリティに関するご意見はスッキリしてわかりやすいが、kz に対してのご意見になると何故だかまったく意味がわからない。わかる人がいらっしゃいましたらお手数ですがお知らせいただくと、横浜に向けての良い準備になりますのでヨロシクです。具体的にわからないところを挙げておきますね。</p>
<ul>
<li>【解決】わかっていながら不備のあるコードを...<br />
この類いは「知りませんでしたので大変勉強になりました。ありがとうございました。」で解決だよな？</li>
<li>上と同じだけども「知らなかったならいいんです。」「知りませんでしたので大変勉強になりました。ありがとうございました。」「知っていながら...」となる意味がわかりません。面白がってワザとだよねコレラブ&hearts;。</li>
<li>重要じゃないとこだけど「どんなフォーラムでも結局どうなんってゆートピックは役に立ったことが無い。」に対して「これも、フォーラムのバックグラウンドにいる人たちの事をなにも考えてないと思います。」はまったく意味がわかんないぜ。</li>
<li>何故「後付けフォロー」という認識になるのかわからない。</li>
<li>「僕のスタンスはこうだから理解してよ的」誰しも己の考えを述べておるぞ。お二方はオレにあーせいこーせい言うがオレは自分の考えを述べるにトドめている。単なる説明だ。読解力的な意味ではいい加減理解しろよとは思うが、ボクのことわかってよな受け取り方になるのがわかりませんラブ&hearts;。あーせいこーせい言わないタイプが初めてだから「相手に求めるナルシスト」に分類されるのでしょうかラブ&hearts;。</li>
</ul>
<h4>まとめ</h4>
<p>結局のところ、今回のケースでほとんどの方々が思ったのは「何でアナタ達そんなモノの言い方するんですか？」だろう。2人から回答すんなって言われた kz をかわいそうと思ったえびちゃんがいたかもしれないし、いい気味だと思った匿名さんがいたかもしれない。<br />
オレはオレに言われるコトバは受け流すけども（今回受け流していないのにはちゃんと理由がある、察しろ。）、ごく普通の方々に対して同じように接するのは相当キツイことだと思うぜ。普通の人にはしないよっちゅーのはハンパない誤解力のせいで説得力がないラブ&hearts;。例えば質問者に対する愛情に欠ける書き方なんかは、バックグラウンドにいる方々の心を引っ掻くこともあるだろうラブ&hearts;。例えば「知ったか」とか「安っぽいプライド」なんつー超刺激的なコトバは「Sっ気が強いので攻めてるっぽく見えるかもしれませんがそんなつもりはないです。」なんつー後付け自己弁護したって相手によっちゃ表出ろやっちゅー話になるぜラブ&hearts;。<br />
<br />
オレは知らん人相手にいきなりとか、唐突に刺激的なコトバを投げつける、のがそもそもコミュニティにとって迷惑違いますやろかな考えだぜラブ&hearts;。他人への敬意が無いし愛情も無いでしょ。なのに誰々のためとか迷惑をかけるなって話になってくると、これはコントか何かか？オレはなんでやねんって突っ込めばええんか？とか思っちゃうぜラブ&hearts;。<br />
<br />
コミュニティでは他人に対して意見はしないのがベストだとオレは思うけども、せずにいられない時は、どなた様もちったぁ口のキキ方に配慮すると諸々いいんでないかなってオレは思うよ。相手にもバックグラウンドにいる方々にも、自分自身にとってもね。<br />
コードの穴を抜かり無くフサいで誰にも迷惑をかけない配慮をするように、文章のトゲを抜かり無くナラして誰にも不快な思いをさせない配慮をするのも、コミュニティでは必要なことなんじゃないかな。コードの書き方以上にね。相手は感情のある人間だもの。オレはね、そう思うよ。<br />
ん、オレが他人に強要してるって？あの、グラウンドに行ってくれるかな。アッチの方。そうそうずっと向こうの方ね。</p>
<h4>最後に</h4>
<p>今回のケースを添削して美しくまとめてみるぜ。<br />
----------------------------------------------</p>
<pre><code>$taxonomy = $wp_query-&gt;get_queried_object();
echo $taxonomy-&gt;name;</code></pre>
<p>----------------------------------------------<br />
データベースに入れる時＆表示する時にエスケープすると完璧なので</p>
<pre><code>echo esc_html($taxonomy-&gt;name);</code></pre>
<p>とするとステキです。<br />
----------------------------------------------<br />
そうなのね！勉強になりました、ありがとう。<br />
----------------------------------------------<br />
どや、清々しいだろう！俺たちがグダグダ書いたトピックと見比べてみると良いぜ。</p>]]></content:encoded>
			<wfw:commentRss>http://wpxtreme.jp/how-to-walk-on-a-forum/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://wpxtreme.jp/how-to-walk-on-a-forum" />
	</item>
		<item>
		<title>WordPressの投稿に複数のアップロード画像を一括挿入する</title>
		<link>http://wpxtreme.jp/insert-all-uploaded-images-simultaneously-into-the-post</link>
		<comments>http://wpxtreme.jp/insert-all-uploaded-images-simultaneously-into-the-post#comments</comments>
		<pubDate>Thu, 29 Apr 2010 13:50:32 +0000</pubDate>
		<dc:creator>kz</dc:creator>
				<category><![CDATA[TUTORIALS]]></category>
		<category><![CDATA[admin]]></category>
		<category><![CDATA[extensions]]></category>
		<category><![CDATA[image]]></category>
		<category><![CDATA[post]]></category>
		<category><![CDATA[upload]]></category>
		<category><![CDATA[usability]]></category>

		<guid isPermaLink="false">http://wpxtreme.jp/?p=407</guid>
		<description><![CDATA[例えば記事中に画像を多く使うスタイルのブログでは、WordPress の「画像を追加」機能は少々操作が面倒です。アップロードは一括でできますが、「投稿に挿入」は1枚ずつしかできません。挿入後に「画像を追加」ウインドウが閉じてしまうのも手間を増やしています。「ギャラリー」で「1列」が指定できれば良さそうな気もしますが、本文が画像文章画像文章という構成だとギャラリーショートコードでは間に合いません。<br />
そこで「画像を追加」ウインドウに「一括挿入」的なボタンを追加して、画像をダラダラッと本文に挿入する機能を実現してみましょう。この機能はクライアントの <a href="http://www.artfactory-inc.com">ART FACTORY GRAPHICS</a> のサイトリニューアル時に絶対メンドクサイ言われるな、と対策したものです。過去ブログの大量データ移行にも大活躍でした。<br />
ところで、この機能のプラグインを作るという話題をうっかり twitter で見かけたのですけど、世の中にこんだけ人がいりゃぁ同じタイミングで同じ挙動もするだろう、と改めて B'z は Aerosmith をパクってなどいないと確信するに至りました。そう、夢は時間を裏切らないのです。<br />
なお、wpxtreme では <a herf="http://wpxtreme.jp/wordpress-show-random-images-attached-to-the-posts">非プラ三原則</a> に則ってそうそうプラグインは作らないのでヨロシクお願いいたします。<a class="excerpt-more" href="http://wpxtreme.jp/insert-all-uploaded-images-simultaneously-into-the-post">Continue Reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<h4>一括挿入ボタンを表示する</h4>
<p>なんだかんだ言っても見た目が大事、と なんでもかんでもカタチから入って結局長続きしないアナタに倣って、まずは「画像を追加」ウインドウに［すべての添付画像を投稿に挿入］ボタンを表示するだけ、にトライしてみましょう。ところでなんは何だけどかんは何なんだろうね？<br />
「画像を追加」ウインドウの一番下には［すべての変更を保存］という特に何をするでもない雰囲気のボタンがあります。このボタンを押すことで新たに何か保存されるものがあるのかどうか、これは皆へのGWの宿題にしておきますね。それでは捜査の基本に従って、まずは対象者の身辺を洗ってみましょう。</p>
<a href="http://wpxtreme.jp/cms/wp-content/uploads/2010/04/iaui-1.jpg"><img src="http://wpxtreme.jp/cms/wp-content/uploads/2010/04/iaui-1-620x436.jpg" alt="" title="一括挿入ボタン表示の手がかり" width="620" height="436" class="alignnone size-large wp-image-409" /></a>
［すべての変更を保存］ボタンが savebutton クラスを持つ p タグで囲まれてますね。次はこの「savebutton」を追跡します。皆さんのローカルにあるはずの WordPress のソース一式から「savebutton」を検索すると、どうやら wp-admin/includes/media.php <code>media_upload_type_form()</code> で出力しているようです。</p>
<pre><code>function media_upload_type_form($type = 'file', $errors = null, $id = null) {
　（略）
&lt;p class="savebutton ml-submit"&gt;
&lt;input type="submit" class="button" name="save" value="&lt;?php esc_attr_e( 'Save all changes' ); ?&gt;" /&gt;
&lt;/p&gt;
&lt;?php
}</code></pre>
<p>が、ここに追加出力できるようなフックは見当たりません。残念。<br />
では <code>media_upload_type_form()</code> の呼び出し元はどうでしょう。同じ media.php で <code>wp_iframe()</code> の引数に使われて呼び出されているようです。</p>
<pre><code>return wp_iframe( 'media_upload_type_form', 'image', $errors, $id );</code></pre>
<p><code>wp_iframe()</code> の最後の方で、<code>$content_func</code> という引数で受け取った <code>media_upload_type_form()</code> が呼び出されています。</p> 
<pre><code>function wp_iframe($content_func /* ... */) {
　（略）
  call_user_func_array($content_func, $args);  // ここで savebutton の HTML を出力
  do_action('admin_print_footer_scripts');
?&gt;
&lt;script type="text/javascript"&gt;if(typeof wpOnload=='function')wpOnload();&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;
&lt;?php
}</code></pre>
<p>どうやら独自の HTML を出力できるのはその直下の <code>do_action('admin_print_footer_scripts')</code> のタイミングしか無さそうです。では、早速以下のような javascript でボタンを追加してみましょう。</p>
<pre><code>add_action( 'admin_print_footer_scripts', 'my_add_insert_all_images_button' );
function my_add_insert_all_images_button() {
?&gt;
&lt;script type="text/javascript"&gt;
//&lt;![CDATA[
jQuery(document).ready(function($){
  $('p.savebutton.ml-submit')
    .append(
      '&lt;input type="submit" class="button" name="bulkinsert" value="&lt;?php esc_attr_e( 'Insert all images' ); ?&gt;" /&gt;'
    );
});
//]]&gt;
&lt;/script&gt;
&lt;?php
}</code></pre>
<p>はい、バッチリ表示できました。<a href="http://wpxtreme.jp/cms/wp-content/uploads/2010/04/iaui-2.jpg"><img src="http://wpxtreme.jp/cms/wp-content/uploads/2010/04/iaui-2-620x417.jpg" alt="" title="ボタンを追加" width="620" height="417" class="alignnone size-large wp-image-413" /></a>ところが、このボタンは「画像を追加」ウインドウの「コンピュータから」タブで画像をアップロードしたときにしか表示されません。［すべての変更を保存］ボタンの身辺をもう一度洗い直してみましょう。</p>
<ul>
<li>「コンピュータから」タブ<br />
p.savebutton.ml-submit &gt; input.button[name=save]</li>
<li>「URLから」タブ<br />
なし：以降、このタブについては無視する。</li>
<li>「ギャラリー」タブ<br />
p.ml-submit &gt; input#save-all.button.savebutton[name=save]</li>
<li>「メディアライブラリ」タブ<br />
p.ml-submit &gt; input.button.savebutton[name=save]</li>
</ul>
<p>これらの論理積っぽいセレクタを検討した結果、「画像を追加」ウインドウのすべての［すべての変更を保存］ボタンの隣に［すべての添付画像を投稿に挿入］ボタンを追加するには以下のようにします。</p>
<pre><code>$('p.ml-submit>input.button[name=save]')
  .after(
    '&lt;input type="submit" class="button" name="bulkinsert" value="&lt;?php esc_attr_e( 'すべての添付画像を投稿に挿入' ); ?&gt;" /&gt;'
  );</code></pre>
<p>無事、「画像を追加」ウインドウのすべての［すべての変更を保存］ボタンの隣に［すべての添付画像を投稿に挿入］ボタンを追加することができました。すべてボタンすべてボタンくどい。<a href="http://wpxtreme.jp/cms/wp-content/uploads/2010/04/iaui-3.jpg"><img src="http://wpxtreme.jp/cms/wp-content/uploads/2010/04/iaui-3-620x417.jpg" alt="" title="各タブにボタンを追加" width="620" height="417" class="alignnone size-large wp-image-415" /></a></p>
<h4>「画像を追加」ウインドウから本文にテキスト挿入、の仕組み</h4>
<p>ボタンを表示するだけでヒト苦労でしたね。カタチから入って長続きしない感じがよくわかりました。投稿本文中に添付画像の HTML を挿入するのは［投稿に挿入］［ギャラリーを挿入］ボタンの仕組みをパチれば OK でしょう。んでは、日頃からお世話になっている［投稿に挿入］ボタンの方が親近感があるので、こちらを調べることにします。だってオレ人見知りするし。なお、このボタンの <code>name="send[画像の ID ]"</code> という属性は重要な手がかりかもなので証拠として押収しておきます。<a href="http://wpxtreme.jp/cms/wp-content/uploads/2010/04/iaui-4.jpg"><img src="http://wpxtreme.jp/cms/wp-content/uploads/2010/04/iaui-4-620x417.jpg" alt="" title="iaui-4" width="620" height="417" class="alignnone size-large wp-image-423" /></a>
では、コレをクリックするとどういう流れになるのかを明らかにするために、まずは親から攻めてみましょう。コレを含む <code>form</code> タグの <code>action</code> 属性は</p>
<pre><code>action="http://example.com/wp-admin/media-upload.php?type=image&#038;tab=gallery&#038;post_id=投稿ID"</code></pre>
<p>のようになっています。パッと見 wp-admin/media-upload.php を調べても怪しいところはありませんが、最後に</p>
<pre><code>$type = strval($_GET['type']);
  :
$tab = strval($_GET['tab']);
  :
if ( $tab == 'type' || $tab == 'type_url' )
  do_action("media_upload_$type");
else
  do_action("media_upload_$tab");
</code></pre>
<p>という記述があります。そう言えば先ほどの <code>action</code> に <code>type=image&#038;tab=gallery</code> が指定されていました。このクエリ文字列とアクションの関係は以下の通り：</p>
<ul>
<li>「コンピュータから」タブ    ... type=image&#038;tab=type     ... media_upload_image アクション</li>
<li>「ギャラリー」タブ               ... type=image&#038;tab=gallery ... media_upload_gallery アクション</li>
<li>「メディアライブラリ」タブ ... type=image&#038;tab=library ... media_upload_library アクション</li>
</ul>
<p>ヤツらはこういった暗号を使って捜査の網をかいくぐっていたんですね。どうやら「ギャラリー」タブの黒幕は <code>media_upload_gallery</code> アクション、wp-admin/includes/media.php に潜伏している模様です。ところで<code>medhia_upload_なんちゃら</code> アクションは、wp-includes/default-filters.php には記述が無いんですね。これも我々の目を欺くためでしょう。<br />
え、admin 画面でしか使わないからじゃ ... と思ったキミは先入観で目が曇っておるよ。濁っておるのだよ。キミこそがオレの天使だ！最高の女だ！と思い込むのは勝手だが、世の中にはもっと最高な天使がゴロゴロいるので視野を狭めないようにな。それに、金品の授受により天使になってくれるあのコはウソもんなので本気になってはいけない。<br />
さて、<code>media_upload_なんちゃら</code> アクションは <code>media_upload_なんちゃら</code> ファンクションを実行するようになってますので当該のファンクションを調べます。</p>
<pre><code>function media_upload_gallery() {
  $errors = array();

  if ( !empty($_POST) ) {
    $return = media_upload_form_handler();
  :</code></pre>
<p>ん、こいつ <code>media_upload_form_handler()</code> 匂うな。しかも <code>media_upload_なんちゃら</code> ファンクションのすべてで <code> if ( !empty($_POST) ) { $return = media_upload_form_handler();</code> してやがる。どれ。</p>
<pre><code>function media_upload_form_handler() {
  :
if ( isset($_POST['send']) ) {
  $keys = array_keys($_POST['send']);
  $send_id = (int) array_shift($keys);
}
  :
if ( isset($send_id) ) {
  :
  $html = apply_filters('media_send_to_editor', $html, $send_id, $attachment);
  return media_send_to_editor($html);
}</code></pre>
<p>証拠品の <code>"send[画像の ID]"</code> から画像用の HTML を作成して <code>media_send_to_editor($html)</code> しておるな。どうやら <code>media_send_to_editor()</code> が HTML を editor つまり投稿本文に送っているということらしい。</p>
<pre><code>function media_send_to_editor($html) {
?&gt;
&lt;script type="text/javascript"&gt;
/* &lt;![CDATA[ */
var win = window.dialogArguments || opener || parent || top;
win.send_to_editor('&lt;?php echo addslashes($html); ?&gt;');
/* ]]&gt; */
&lt;/script&gt;
&lt;?php
  exit;
}</code></pre>よし、わかった。</p>
<h4>すべての添付画像の HTML を投稿に挿入する</h4>
<p>以下、仕様。</p>
<ul>
<li>media_upload_ なんちゃらアクションをひととおり先取りする。</li>
<li>［すべての添付画像を投稿に挿入］ボタンがクリックされていれば横取りする。<br />
これは isset( $_POST['bilkinsert']) で判断できる。</li>
<li>投稿に添付されている画像を取得する。<br />
投稿の ID は $_REQUEST['post_id'] で取得できる。
添付画像の ID の昇順＝先に添付した画像を先に出力する。</li>
<li>画像の HTML をお好みで作成する。</li>
<li>media_send_to_editor() で本文に挿入！</li>
</ul>
<p>以下、コード。</p>
<pre><code>add_action( 'media_upload_image', 'my_bulk_insert', 1);
add_action( 'media_upload_gallery', 'my_bulk_insert', 1);
add_action( 'media_upload_library', 'my_bulk_insert', 1);
function my_bulk_insert() {
  if ( isset($_POST['bulkinsert']) ) {
    $postid = $_REQUEST['post_id'];
    $images = get_children(array(
      'post_parent' =&gt; $postid,
      'post_type' =&gt; 'attachment',
      'post_mime_type' =&gt; 'image',
      'order' =&gt; 'ASC',
      'orderby' =&gt; 'ID'
    ));
    $html = '';
    if($images){
      $ids = array_keys($images);
      $first = true;
      foreach((array)$ids as $id){
        if($first)
          $first = false;
        else
          $html .= '&lt;p&gt;&lt;br class="spacer_" /&gt;&lt;/p&gt;';
        $html .= wp_get_attachment_link($id, 'large');
      }
    }
    return media_send_to_editor($html);
  }
}</code></pre>
<p>以下、実行結果。<a href="http://wpxtreme.jp/cms/wp-content/uploads/2010/04/iaui-5.jpg"><img src="http://wpxtreme.jp/cms/wp-content/uploads/2010/04/iaui-5-620x663.jpg" alt="" title="実行結果" width="620" height="663" class="alignnone size-large wp-image-430" /></a></p>
<h4>CONCLUSION</h4>
<p>お待ちかねのまとめソースです。日本人ってまとめ記事とか大好きだよね。以下を functions.php に貼り付ければ OK だぜ。エクケープ忘れとかあったらよきにはからってくれ。</p>
<pre><code>add_action( 'admin_print_footer_scripts', 'my_add_insert_all_images_button' );
function my_add_insert_all_images_button() {
?&gt;
&lt;script type="text/javascript"&gt;
//&lt;![CDATA[
jQuery(document).ready(function($){
  $('p.ml-submit>input.button[name=save]')
    .after(
      '&lt;input type="submit" class="button" name="bulkinsert" value="&lt;?php esc_attr_e( 'すべての添付画像を投稿に挿入' );   ?&gt;" /&gt;'
    );
});
//]]&gt;
&lt;/script&gt;
&lt;?php
}

add_action( 'media_upload_image', 'my_bulk_insert', 1);
add_action( 'media_upload_gallery', 'my_bulk_insert', 1);
add_action( 'media_upload_library', 'my_bulk_insert', 1);
function my_bulk_insert() {
  if ( isset($_POST['bulkinsert']) ) {
    $postid = $_REQUEST['post_id'];
    $images = get_children(array(
      'post_parent' =&gt; $postid,
      'post_type' =&gt; 'attachment',
      'post_mime_type' =&gt; 'image',
      'order' =&gt; 'ASC',
      'orderby' =&gt; 'ID'
    ));
    $html = '';
    if($images){
      $ids = array_keys($images);
      $first = true;
      foreach((array)$ids as $id){
        if($first)
          $first = false;
        else
          $html .= '&lt;p&gt;&lt;br class="spacer_" /&gt;&lt;/p&gt;';
        $html .= wp_get_attachment_link($id, 'large');
      }
    }
    return media_send_to_editor($html);
  }
}</code></pre>
<p>コードだけ見ると結構短いが、ここに到達するまでには地道な捜査と検証を毛が抜ける思いをしながら繰り返しているのだ。キミがお手軽便利に使っているそのプラグイン、仕上げるまでにどれほどの労力が費やされているか。そのサポートにどれほどの労力を費やさなければならないか。そういったことを少し考えてみると、改めて、感謝せずにはいられなくなるだろう。<br />
感謝のカタチはそれぞれで良い。寄付（ドネーション）も良いし、パッチやアイデアの提供でも良い。毎晩ありがとうございますとプラグイン作者に祈るのも、まぁ、良いかもしれん。そして、いつかは与える側になって欲しい。それがお世話になったコミュニティへの最大の恩返しになる。そういう流れを繰り返すと世の中はどんどんキレイになっていくのだ。ステキやん。<br />
最後に、恩知らずはロクな死に方をしない、とだけ言っておこう。</p>
<h4>プログラムを作る仕事に就きたい皆さんへ</h4>
<p>ん、全然最後になっとらへん。<br />
仕様仕様と偉いさんは口にするが、そんなものは実在しない。キミのかわいい彼女と同じだ。マボロシなのだよ。いいかい、現場ではソースコードがすべてだ。なので、今のうちにソースを読み解く力をつけておくと良い。<br />
どうやってそんな力をつければいいんですか、ってそりゃアンタ人の書いたコード読み倒しゃぁええがね。世の中にはオープンソースと呼ばれる、世界中のステキな開発者達が書いたコードがそこら中に転がっている。超絶クールなコードもなにこれウンコなコードもあるだろう。何でもいいから読み倒すのだ。WordPress なんて読んで試してがヤリたい放題だぜ。猿並みに限度を知らない思春期のキミにはうってつけだ。<br />
そしてキミが男性なら、もっと女性と接すると良い。話し易いあんまり女っぽくないコじゃダメだぜ。話しかけ難い超イカすあのコ、そうムラムラしちゃうあのコだ。そういうえびちゃんとどう接すると良いかは、今まで wpxtreme で散々説明しているので改めて全記事を読み直すと良い。GW だから時間はたっぷりあるだろう。で、どんなコだろうとメロメロにさせることができるようになれば、何故だかソースを読むセンスが養われていることに気づくはずだ。<br />
読み解く力とは察する力である。察する力を身につけるには女性と接するのが良い。世の中にえびちゃんほどわけのわからんものはないのだ何の話だ。</p><h5>動作確認バージョン</h5><ul class="tested-vers"><li>WordPress 2.9.2</li></ul>]]></content:encoded>
			<wfw:commentRss>http://wpxtreme.jp/insert-all-uploaded-images-simultaneously-into-the-post/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://wpxtreme.jp/insert-all-uploaded-images-simultaneously-into-the-post" />
	</item>
		<item>
		<title>Twitter＠Anywhereの使い方WordPress編</title>
		<link>http://wpxtreme.jp/how-to-use-twitter-at-anywhere-with-wordpress</link>
		<comments>http://wpxtreme.jp/how-to-use-twitter-at-anywhere-with-wordpress#comments</comments>
		<pubDate>Sun, 18 Apr 2010 15:31:39 +0000</pubDate>
		<dc:creator>kz</dc:creator>
				<category><![CDATA[HOW-TO]]></category>
		<category><![CDATA[anywhere]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://wpxtreme.jp/?p=295</guid>
		<description><![CDATA[Twitter が発表した <a href="http://dev.twitter.com/anywhere/">@Anywhere</a>、各種サービスがこぞって取り入れることでどんな風に WEB が変わっていくのかとても楽しみです。Google が連発するマイナーサービスのように出ては消え、なんてことにはならないといいですね。<a href="http://dev.twitter.com/anywhere/begin">Getting Started</a> の翻訳記事もチラホラ出てきましたが、こういうところに書いてあるサンプルやドキュメントなどは、始まったばかりのサービスならなおさら、だいたい内容が意味不明です。平気でウソも書いてありますが、訂正されることはあまりありません。<br />
なので、良識ある wpist の皆さんは原文や日本語になった記事を読んだだけで納得してしまわないように。見聞きしただけでその世界がわかった気になるのはクラブのおねーちゃん達の得意技です。皆には目先の欲望に振り回されず、その浅さを愉しむ大人になって欲しい。<br />
そういったわけで wpxtreme では現場第一主義を貫き、実際にやってみたちゃんと動く @Anywhere の使い方を長々とお届けします。<a class="excerpt-more" href="http://wpxtreme.jp/how-to-use-twitter-at-anywhere-with-wordpress">Continue Reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<h4>まずは API キーを取得しよう</h4>
<p>Twitter の機能がラクチン API でボク達のサイトでも利用できるようになるという夢の @Anywhere。まずは「http://example.com ってサイトで使いますよ」っていうことを Twitter 様に申し出る必要があります。そうすると Twitter 様から「じゃぁ、お前んとこはこの API キーを使え」と呪文（APIキー）を授けられます。これはヨソのドメインでは使えません。めんどくさいですがイイナリになるしかないのでこの手順を踏む必要があります。</p>
<p><a href="http://dev.twitter.com/anywhere/apps/new">New Twitter Application</a> をクリックすると以下のような画面になります。<a href="http://wpxtreme.jp/cms/wp-content/uploads/2010/04/anywhere-1.jpg"><img src="http://wpxtreme.jp/cms/wp-content/uploads/2010/04/anywhere-1-620x601.jpg" alt="" title="New Twitter Application" width="620" height="601" class="alignnone size-large wp-image-383" /></a></p>
<ul>
<li>Application Name：サイトの名前</li>
<li>Application Website： サイトのURL</li>
<li>Callback URL：とりあえず同上で OK</li>
<li>Application Icon：72x72くらいでどうでしょう（指定しなくても OK）</li>
<li>CAPTCHA：2単語読んで</li>
</ul>
<p>のように必要事項を入力して［Register application］ボタンをクリックすると利用規約のウインドウが表示されるので［Accept］ボタンをクリックします。無事登録完了すると以下のような画面になります。<a href="http://wpxtreme.jp/cms/wp-content/uploads/2010/04/anywhere-2.jpg"><img src="http://wpxtreme.jp/cms/wp-content/uploads/2010/04/anywhere-2-620x381.jpg" alt="" title="@Anywhere Setup" width="620" height="381" class="alignnone size-large wp-image-384" /></a>サンプルコードの <code>id=なんちゃら</code> が API キーなのでメモっておくように。どうせ HTML ソースに丸出しになるのでモザイクをかける必要も彼女に内緒にしておく必要もありません。</p>
<p>これで自分のサイトで @Anywhere を使う準備ができました。</p>
<h4>WordPress で利用するには</h4>
<p>functions.php に以下を追加して、@Anywhere のスクリプトと @Anywhere を使用するアナタのスクリプトを読み込ませます。<code>wp_enqueue_script()</code> だと @Anywhere の URL の最後に <code>&amp;ver=2.9.2</code> とか WordPress が勝手に付けますが<del>ちゃんと動作しますのでご安心ください</del> WebKit系でちゃんと読めないようなので <code>echo</code> に変更。</p>
<pre><code>add_action('wp_print_scripts', 'my_enqueue_scripts');
function my_enqueue_scripts(){
/*
  wp_enqueue_script( // @Anywhere のスクリプト
    'twitter-anywhere', 
    'http://platform.twitter.com/anywhere.js?id=アナタのAPIキー&amp;v=1',
    array(), false, true
  );
*/
  echo '&lt;script src="http://platform.twitter.com/anywhere.js?id=アナタのAPIキー&amp;v=1" type="text/javascript"&gt;&lt;/script&gt;';

  wp_enqueue_script( // @Anywhere を使うアナタのスクリプト
    'my-script', 
    'http://example.com/〜/my-script.js',
    array(/* 'twitter-anywhere' */), false, true
  );
}</code></pre>
<p>WprdPress で、っていうのはコレだけなので詐欺的な記事タイトルですね。</p>
<h4>さぁ、始めるよ！</h4>
<p>@Anywhere は jQuery ライクな 使い方ができる API です。my-script.js とかなんとかを作成して以下のような書き方で利用すると良いでしょう。</p>
<pre><code>jQuery(document).ready(function($){
  var myTwitter;                 // オレ達が使う Twitter オブジェクト用変数。

  // @Anywhere を初期化。初期化完了後は onAnywhereLoad をコールバック！
  twttr.anywhere(onAnywhereLoad /*, ウインドウコンテキストも指定可能 */);
  
  // @Anywhere 初期化コールバック。オレ達専用の初期化はここで行う。
  function onAnywhereLoad(twitter){
    myTwitter = twitter;         // オレ達用に @Anywhere から授けられた Twitter オブジェクトを保存しておく。
    myTwitter.linkifyUsers();
    myTwitter('.hovercards-target').hovercards();
    myTwitter('.follow-kz').followButton("kzxtreme");
    /* ... などなど、お好みの初期処理を記述 */
  }

  // myTwitter を使っていつでもどこでも @Anywhere を利用できます。
  // クリックされる度に指定ユーザーのフォローボタンを追加
  $('.add-follow-button').click(function(){
    myTwitter('.follow-user').followButton($('input#user-to-follow').val());
    return false;
  });
});</code></pre>
<p>anywhere.js を読み込むと twttr オブジェクトが使えるようになります。<code>twttr</code> は 初期化とかサインアウトとかを行うための、ボク達が色々イジくれるオブジェクトとは別次元に存在するオブジェクトです。<br />
まず始めに <code>twttr.anywhere()</code> で @Anywhere を初期化します。引数にはコールバック関数 <code>onAnywhereLoad()</code> を指定し、ソコで自分の初期化処理を行います。一部のウインドウコンテキストでのみ @Anywhere を使いたい場合は、第2引数にソレを指定します。未指定の場合は、現在のページがまるっと対象です。<br />
<code>onAnywhereLoad()</code> で受け取った <code>twitter</code> がボク達が色々イジくれる Twitter オブジェクトです。上のコードのように myTwitter に Twitter オブジェクトを保存しておけば <code>onAnywhereLoad()</code> の外でも使うことができて便利ですね。ただし実際にお外で使うときは、オブジェクトが null だか undefined じゃないことをまず確認しましょう。<br />
この Twitter オブジェクトには jQuery のセレクタと同様に操作対象となる DOM 要素を指定することができます。</p>
<ul>
<li>myTwitter.linkifyUsers()<br />
linkifyUser() の対象は myTwitter のウインドウコンテキスト全体（ページ全体）。</li>
<li>myTwitter('.linkify-target').linkifyUsers()<br />
linkifyUser() の対象は myTwitter のウインドウコンテキスト内で linkify-target クラスを持つ DOM 要素以下すべて。</li>
</ul>
<p>ただし、このセレクタは <code>twttr.anywhere()</code> で初期化を行う前の DOM要素しか見ていません。<code>twttr.anywhere()</code> 以降に javascript で追加された DOM 要素はセレクトしてくれないので注意してください。</p>
<h5>Linkify - ユーザー名を自動でリンクさせる</h5>
<p>例えば ページ中のテキストに @kzxtreme のような Twitter ユーザー名があれば、それに Twitter ユーザーページへのリンクを付けてくれる。以下の文章をよく読んで linkify ! リンクをクリックしてみよう。@kzxtreme 他がリンクされるぞ。変化の瞬間を見逃さないようにね。</p>
<p class="linkify-target append">この文章には class="linkify-target" が指定されているので、この @kzxtreme にリンクが付けられるはずだ。大文字小文字は関係ない @KzXtReMe。存在しないユーザー名でもリンクする @sonnnayatu_ine_yo。非twitter ユーザー名 @ab-bc @オレ様 だとどうなるかは己の目で確かめて欲しい。@Anywhere の動向については @anywhere をフォローすると良いぞ。wpist なキミは @jawordpressorg  もマストだ。</p> 
<p>では、心を無にして、レッツ <a href="#" class="linkify">linkify！</a><br />
<br />
どうだね！非常に地味だろう！ linkify はちょっと便利だけども、たかがリンクを張るだけなのでイマイチ面白くない。真面目過ぎてツマランのだ。視野がチョー狭い思春期ならともかく、大人ならもっと遊び心が欲しい。それが大人の余裕。私年上じゃないとダメなの、というえびちゃんの真意を読み取ろう。この linkify のサンプルは以下のようなコードで実現している。</p>
<pre><code>$('.linkify').click(function(){                 // linkify クラスをもつ DOM 要素がクリックされた！
  myTwitter('.linkify-target').linkifyUsers();  // twttr では linkifyUser() はできんのだよ ...
  return false;                                 // このクリックのイベントはここで終わらせてくれ。
})</code></pre>
<p>日本語で説明すると linkify クラスを持つアンカーリンクがクリックされたときに「linkify-target クラスを持つ DOM 要素以下すべてに対して <code>linkifyUsers()</code> を実行」してユーザー名のリンクを作成しています。<br />
なお、実際にはこのように閲覧者のアクションで linkify することはないはずなので、初期化のコールバック関数内で始めから <code>linkifyUsers()</code> しちゃいましょう。</p>
<h5>コネクトしよう</h5>
<p>以降のサンプルがフルで動作するためには、今まさにキミがウチのサービスにサインイン（ログイン）＝Twitter にコネクトしている必要がある。していなくても必要になったらサインイン的コネクトウインドウが出てくるのでヨロシク。コネクトのためのボタンは <code>connectButton()</code> を使って以下ようなコードで表示する。</p>
<pre><code>myTwitter('#signin-anywhere').connectButton({
  authComplete: function(signedInUser){  // コネクト／サインイン完了後のコールバック
    /* 好きなことができます */
  }
});</code></pre>
<p>これで id が signin-anywhere の DOM 要素内にボタンが表示される。コネクト／サインイン後に何もしない＝ボタンの表示だけなら、<code>authComplete</code> オプションなしで単に <code>myTwitter('#signin-anywhere').connectButton()</code> などとすれば OK。なお、原文には <code>signOut</code> っていうオプションでユーザーがサインアウトしたときに何かやれまっせ的なことが書いてあるが、そんなイベントは今のところ発生しないぞ？</p>
<div class="append">
<p id="to-current-user"></p>
<p id="signin-anywhere"></p>
</div>
<p>アンコネクト／サインアウトのためのボタンは提供されないが、<code>twttr.anywhere.signOut()</code> を実行すればサインアウトできる。ので以下のように何かのクリックイベントで呼んでやれば良い。クリックしてもシー・・・ンとしてるので親切な方は「サインアウトしましたよ」とか表示してあげてください。</p>
<pre><code>$('.signout-anywhere').click(function(){
  alert('signout しますー');
  twttr.anywhere.signOut();
  return false;
});</code></pre>
<p class="append">右のリンクをクリックするとサインアウトします... <a class="signout-anywhere" href="#">【サインアウトする】</a></p>
<p>サインインしたりサインアウトしたりコネクトしたりアンコネクトしてみるが良い。非コネクト状態でこの記事を一通り読んだ後で、コネクトしてからこのページの表示を更新するとまた違った世界が見えてくるはずなのでぜひお試しください。</p>
<p>ところで、ユーザーがコネクト／サインインしているかの判定やユーザー情報の取得方法を説明している <a href="http://dev.twitter.com/anywhere/begin">Welcome to @Anywhere | dev.twitter.com</a> の Working with the current user にある以下のサンプル（一部）は 2010.4.18 16:00 現在ウソなので信用しないように。</p>
<pre><code>if(twitter.isConnected) {
  currentUser = twitter.User.current;
  screenName = currentUser.data('screen_name');</code></pre>
<p>以下がこのコードの具体的な真実だ。</p>
<ul>
<li>twitter.isConnected はいつでも true。だって関数だもの。isConnected() だろ。</li>
<li>twitter.User は attributes を設定するファンクション。current なんて無い。</li>
<li>data なんてファンクションは無い。</li>
</ul>
<p>正しくは、現在の（コネクト／サインインしている）ユーザーの情報は以下のように取得する。</p>
<pre><code>if(myTwitter.currentUser)
    screenName = myTwitter.currentUser.attributes.screen_name;
    profileImage = myTwitter.currentUser.attributes.profile_image_url;</code></pre>
<p>サインインしているコネクテッドなキミならわかると思うが、上に表示されているキミの情報が <code>Twitterオブジェクト.currentUser</code> で取得できる。それに続けて <code>.attributes.screen_name</code> などとたどれば必要な値を取得することができる。例えば、現在コネクト／サインインしているユーザーのプロフィール／自己紹介の内容なら以下のようにすれば OK。</p>
<pre><code>myTwitter.currentUser.attributes.description</code></pre>
<p class="append">アナタの自己紹介を <a class="get-info" href="#">取得する</a><br /><span class="your-info">[your info]</span></p>
<h5>Hovercards - ユーザー名にホバーするとツールチップが！</h5>
<p>次は linkify よりちょっとワクワクするぜ。先ほどの linkify されたユーザー名にマウスポインタをマウスオーバー（長いので以降ホバー）させると、ユーザの公開情報がイカしたツールチップで表示されるのだ。そのツールチップのことをホバーカードと呼ぶ。商標取るなら今のうちだぜ。では早速下の @kzxtreme にキミのマウスポインタをホバーさせてみて right now !</p>
<p class="hovercards-target append">この @kzxtreme にレッツホバー！</p>
<p>どうだね！ちったぁ オォッ ってなったかね！ツールチップ内の「もっと読む ...」をクリックするとさらに詳細な情報が表示させるぜ。<code>hovercards()</code> では指定の DOM 要素内をまず linkify して、そのホバーイベントで ajax なツールチップを表示させている。こ、これがマッシュアップってやつか！違うな、ハッシュドポテト食べたい。こういうオシャレなことがしたかったら、以下のようなコードを我らがイニシャライザーコールバック <code>onAnywhereLoad()</code> に追記します。hovercards で 1 語だから c は小文字でヨロシク。</p>
<pre><code>myTwitter('.hovercards-target').hovercards();</code></pre>
<p>とくに DOM 要素を限定せずページ全体に適用したい場合は <code>myTwitter.hovercards()</code> で OK。この hovercard は対象リンクが画面上のどこにあっても、リンクの上下いずれかシックリくる方に表示される。ステキ。</p>
<h5>素のユーザー名以外でもホバーカードできる？</h5>
<p>はい、私達はアナタが好き勝手に書いたリンクテキストや画像や、そしてリンクもクソも無い素のテキストにさえも ホバーカード を使えるように設計しました。すばらしい、そういった心配りがあるから Twitter はバブリーな存在になれるのだ。例えば既にリンクとなっている文章がユーザー名を含んでいる場合は、<code>hovercards()</code> の <code>infer</code> オプションに <code>true</code> を指定する。</p>
<pre><code>myTwitter('.hovercards-target-infer').hovercards({
  infer: true
});</code></pre>
<p><code>onAnywhereLoad()</code> でこんな風に書いておけば、下の <code>class="hovercards-target-infer"</code> なオレ様のアンカーリンクでもホバー時に hovercard が表示される。</p>
<p class="append"><a class="hovercards-target-infer" href="#">リンク内のテキストの一部に @kzxtreme なんてユーザー名を含む場合もOK</a></p>
<p>うむ、使いどころがよくわからんぞ。リンクテキスト内のユーザー名捜索には正規表現を使っているとのことです。</p>
<p class="append"><a class="hovercards-target-infer" href="#">えっ、じゃぁ @jawordpressorg @kzxtreme みたいにユーザー名が複数ある場合は？</a></p>
<p>始めに一致するユーザー名が hovercard の大賞おめでとう、ちゃう、対象になります。</p>
<p>次にユーザー名を含まないテキストや、もはやテキストですらない画像であってもホバーカードはご利用可能です。VISA/MASTER カードに迫る勢いだね。キタるべきカード至上社会に備えよ！ワンランク上を行く大人のステイタス、ホバーカード。まずはイメージから。</p>
<p class="append" style="overflow:hidden;"><img src="http://wpxtreme.jp/cms/wp-content/uploads/2010/01/atavar_kz1-150x150.png" alt="recent kz" title="kzxtreme" width="150" height="150" class="hovercards-target-image alignleft size-thumbnail wp-image-145" />やぁ！オレは kz。<br />もうさすがに WEB 3.0 とか言い出すヤツはいないと思ってるよ！<br />ところで、そろそろ「なんで今ドキえびちゃんなんですか？」っていうご意見があっても良さそうなんだけど、一向に無いってことはまだまだえびちゃんはアツイってことなんだね。<br />ちなみに、はてブ的にはこのサイトのキーワードは「WordPress, えびちゃん」だ。計画通り。</p>
<p>こういう場合は <code>hovercards()</code> の <code>username</code> オプションにユーザー名を指定すれば OK。パンが無ければケーキでいいじゃないの法則です。以下のようにオプション値にファンクションを書いてさんざん好きなことをした後で、思い出したように return でユーザー名を返しても良いです。</p>
<pre><code>myTwitter(".hovercards-target-image").hovercards({
    username: function(node){  // ファンクションにすると「この」DOM要素のオブジェクトを受け取れる。  
      /* do stuff */
      return node.title;       // img 要素なら title 属性にユーザー名を指定しておくと良いね！
    }
});</code></pre>
<p>ん、title 属性の値をヒント表示するブラウザだと、ウザい。では素テキストの場合。通常は太字にしたり色変えたりしないとホバーカードが出てくるなんて誰も気づかんのでご注意ください。以下、サンプルのご利用方法：</p>
<ul>
<li>「けーずぃーえくすとりぃーむ」にホバー！</li>
<li>何も起こらない ...</li>
<li>「ホバーカード対応させる！」のリンクをクリック</li>
<li>黄色くなった ...</li>
<li>怪訝な表情で再度「けーずぃーえくすとりぃーむ」にホバー</li>
<li>おおぉ「けーずぃーえくすとりぃーむ」がホバーカード対応されておる！</li>
<li>嬉しくって何度もホバー</li>
<li>「ホバー！」だらけ</li>
</ul>
<p class="append"><span class="hovercards-target-text">けーずぃーえくすとりぃーむ</span><br />
<a class="hovercards-text" href="#">上のテキストをホバーカード対応させる！</a></p>
<p>これは、以下のような jQuery を用いた javascript プログラミングで実現されています。</p>
<pre><code>$('.hovercards-text').click(function(){
  $('.hovercards-target-text').css('color', 'yellow');
    myTwitter('.hovercards-target-text').hovercards({						
      username: function(node){
        $(node).append('  ホバー！');
	return 'kzxtreme';
      }
    });
    return false;
  });
</code></pre>
<h5>あなたのそばに、フォローボタン</h5>
<p>今までは、一般の方はサイト上で follow me とか言っても twitter.com/ユーザー名 へのリンクを張るのが精一杯でしたが、@Anywhere の登場によって 本物の「フォローする」ボタンを表示させることができるようになりました。見た目は諸々の状態によって変化します。このボタンは iframe の中にいるのでデザインは 変更できません。よね？</p>
<p class="append">オレをフォローするボタン <span class="follow-kz"></span> フォローしたり解除したりしてみて。<br />
<br />
@jawordpressorg をフォローするボタン <span class="follow-jawp"></span> もうフォローしてるよね？<br />
<br />
@jpwordpressorg をフォローするボタン <span class="follow-jpwp"></span> そんなユーザーはいません。<br />
<br />
ここ <input type="text" id="user-to-follow" /> にユーザー名を入力して、<br />
フォローするボタンを <a class="add-follow" href="#">追加</a> ... <span class="follow-user"></span></p>
<p>Twitter 上での動作通り、ボタンをクリックすると確認無しでフォローします。ログインしてない場合は、まずログインウインドウが表示されます。なお、自分をフォローするボタンをクリックすると［Can't follow @kzxtreme］な disabled ボタンに変わります。ちぇっ。</p>
<h5>Tweet Box</h5>
<p>下のツイートボックスからダイレクトにつぶやけます。アプリケーションはこのサイトなので「wpxtremeから」のツイートとなるんですよ、ワォ！</p>
<div id="tweet-box"></div>
<p class="append"><span id="tweeted-text">（ここにつぶやいた内容が表示されます。）</span></p>
<p>これも簡単、サンプルコードは以下のとおり。</p>
<pre><code>myTwitter("#tweet-box").tweetBox({
  counter: true, // あと何文字ですよの表示の有無
  height: 100,
  width: 620,
  label: 'レッツツイート！',
  defaultContent: 'ツイートボックスに予め入力しておく文字列',
  onTweet: function(tweet, renderedTweet){
    $('#tweeted-text').html(renderedTweet);
});</code></pre>
<p><code>onTweet</code> にはツイート完了後の処理を書くことができます。引数の <code>tweet</code> は生のつぶやき、<code>renderedTweet</code> はマークアップされたつぶやきです。サンプルではツイート後に <code>id="tweeted-text"</code>の DOM 要素内へマークアップされたつぶやきを放り込んで表示しています。</p>
<h4>CONCLUSION</h4>
<p>以上、ナガナガと説明しましたがコレこそが今 @Anywhere でちゃんと動くサンプルです。どうせまたコロコロ変わると思うので、うまく動かないうまく動かないうまく動かないと悩まなくてもよろしい。あんまりクヨクヨするとハゲるぜ。<br />
ドMなアナタは <a href="http://platform.twitter.com/js-api.html">@Anywhere documentation</a> を頼りに試行錯誤して悶絶してみるのもいいだろう。</p><h5>動作確認バージョン</h5><ul class="tested-vers"><li>@Anywhere 1</li><li>WordPress 2.9.2</li></ul>]]></content:encoded>
			<wfw:commentRss>http://wpxtreme.jp/how-to-use-twitter-at-anywhere-with-wordpress/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://wpxtreme.jp/how-to-use-twitter-at-anywhere-with-wordpress" />
	</item>
		<item>
		<title>WordPress3.0beta1でカスタム投稿タイプを具体的に使う</title>
		<link>http://wpxtreme.jp/how-to-use-custom-post-types-in-wordpress-3-0-beta1</link>
		<comments>http://wpxtreme.jp/how-to-use-custom-post-types-in-wordpress-3-0-beta1#comments</comments>
		<pubDate>Sun, 11 Apr 2010 19:55:52 +0000</pubDate>
		<dc:creator>kz</dc:creator>
				<category><![CDATA[HOW-TO]]></category>
		<category><![CDATA[beta]]></category>
		<category><![CDATA[custom]]></category>
		<category><![CDATA[post]]></category>
		<category><![CDATA[taxonomy]]></category>

		<guid isPermaLink="false">http://wpxtreme.jp/?p=269</guid>
		<description><![CDATA[<a href="http://ja.wordpress.org/releases/#beta">WordPress 3.0 ベータ1 の日本語版</a> がリリースされ、インストールしてイジり始めた人も多いことでしょう。皆は MU との統合でサイトの複数運営が簡単になりそうねな「ネットワーク」に気がいってしまってるようだが、実際の現場で重宝されるのは圧倒的に <strong>カスタム投稿タイプ</strong> に違いないのである。多いに活用されるか否かはネーミングに因るところが大きい、ということは <a href="http://wpxtreme.jp/how-to-use-cusom-taxonomy-with-wordpress-versions-lower-than-3">以前ご説明差し上げましたとおり</a> タクソノミーが証明しているのだ。それにしても「ネットワーク」か ... 遠いな。<br />
3.0 で一介のブログシステムから本格 CMS へと大きく変貌を遂げる WordPress は、3年後をメドに「前田さんとこの WordPress テーマって有料らしいわよ！」「んまぁ！見かけによらず大胆ねぇ」とご近所のおばちゃん達のヒソヒソ話でも話題になるほどメジャーな存在として認知される予定である。そのための大きな役割を担うのが <strong>カスタム投稿タイプ</strong> なのだ。今回はその <strong>カスタム投稿タイプ</strong> がどれほどの力を秘めているのか、チョー具体的に解説しよう。いつものような変態的カスタマイズはありませんので女性はもちろんお子様にも安心してご覧いただけます。<a class="excerpt-more" href="http://wpxtreme.jp/how-to-use-custom-post-types-in-wordpress-3-0-beta1">Continue Reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<h4>3.0 以前</h4>
<p>昔は本気でこんなことしてたんだねぇ、ほぇー。と懐かしむことになるであろう現在のありがちなツクリを例に挙げてみよう。</p>
<blockquote>ブログを始めたえびちゃんは、お仕事で撮影したヘアスタイルをブログに載せたいとナジミの wper にオネダリしてみた。もちろんブログ（日記）の一投稿としてではなく、別途ヘアスタイルカタログ的なものを望んでいる。さらには「ロング，ウェーブ」などの情報も付けたいし「お気に入り度」も欲しいと言う。</blockquote>
<p>ボクが欲しいのはキミだけなのに、とかグジグジ思ってはいけない。欲しがったら負けだ。オマエを選んでやってもいいぜ？くらいの気持ちで臨むのがよろしい。そんなわけで、例えキミが wpist であっても 3.0 以前では以下のようにするしか無かった。</p>
<ul>
<li>投稿のカテゴリーに「ヘアスタイル」を追加。</li>
<li>ヘアスタイルを投稿する時は「ヘアスタイル」カテゴリーを選択。</li>
<li>「ロング，ウェーブ」はタグを利用。</li>
<li>「お気に入り度」はカスタムフィールドを利用。</li>
</ul>
<p>こうするしか、無かったんだ。しかしそれはキミの都合、そして WordPress 3.0 以前の都合です。えびちゃんは「なんでヘアスタイルが投稿なのよ！なんで日記書くときにお気に入り度とか出てくんのよ！バッカじゃないの？！」とこっちの苦労も考えず好きなこと言いやがります。<br />
ですが、おっしゃることはごもっともなのです。作り手の都合を使う側に押し付けてはいけません。「投稿を新規追加してカテゴリーのヘアスタイルにチェックを入れて投稿のタグにヘアスタイル関連タグを入力してカスタムフィールドの名前からお気に入り度を選択して値に数値を入れて更新ボタンをクリックして...」なんて呪文を唱える方がイカれてるんです。エンジニアでもない人にヘルプ読めとか言う方が何もわかっとらんのです。DIGA の字幕の ON/OFF の仕方がワケわからんぞまったく。<br />
各種デザイナー＆デベロッパーの皆さんは、使う人が何も説明されなくても自然と使えてしまう、のがベストなのだと気づきましょう。</p>
<h4>3.0 ならこんな風</h4>
<p>※以降の内容は beta1 を元に説明しておりますので、正式リリースでは事情が変わるかもしれません。なんてことは今後ともイチイチ書かないのでその辺はよきにはからってください。<br />
で、3.0 ならどうなるのかと言いますと。</p>
<ul>
<li>投稿，ページと同レベルで「ヘアスタイル」を扱える。</li>
<li>「ヘアスタイル」を編集，新規追加できる。</li>
<li>「ヘアスタイル」に専用の「ロング，ウェーブ」的分類ができる。</li>
<li>「ヘアスタイル」に専用の「お気に入り度」を追加できる。</li>
</ul>
<p>見た方が早いですね。まずは「ヘアスタイル（Hair Styles）」の一覧表示画面です。<a href="http://wpxtreme.jp/cms/wp-content/uploads/2010/04/cpt30b1-1.jpg"><img src="http://wpxtreme.jp/cms/wp-content/uploads/2010/04/cpt30b1-1-620x228.jpg" alt="" title="カスタム投稿タイプの記事一覧画面" width="620" height="228" class="alignnone size-large wp-image-285" /></a>おぉぉ、イカしてますね。この一覧表示の各カラムも自由にデザインできますので色々夢が膨らみます。なお「ヘアスタイルの分類」はこの「ヘアスタイル（Hair Style）」専用のタクソノミーです。<a href="http://wpxtreme.jp/how-to-use-cusom-taxonomy-with-wordpress-versions-lower-than-3">カスタムタクソノミーの記事で言ってたカスタム投稿タイプとの絡み</a> がこれなんですねー。では次に「ヘアスタイル（Hair Style）」の編集画面。<a href="http://wpxtreme.jp/cms/wp-content/uploads/2010/04/cpt30b1-21.jpg"><img src="http://wpxtreme.jp/cms/wp-content/uploads/2010/04/cpt30b1-21-620x373.jpg" alt="" title="カスタム投稿タイプの記事編集画面" width="620" height="373" class="alignnone size-large wp-image-290" /></a>すばらしい。通常の「投稿の編集」で表示されるメカメカしたメタボックス群もありませんね。これなら使い方をイチイチえびちゃんに説明しなくてもわかってくれます。グダグダ言わずにこのようにあっさり鮮やかに対応するのが男なのさ。<br />
カスタム投稿タイプのおかげでより自由度が高くなっているのに、使う人にも作る人にも優しくなっているのは流石です。3.0 以前の中途半端な実装については不問といたしましょう。やっててよかった WordPress。やはりオレの目に狂いは無いのだぜ。</p>
<h4>コード</h4>
<p>以下を functions.php に追加すれば OK。もちろん WordPress 3.0 beta1 以降でお試しください。テーマは Twenty Ten 0.7 をご使用です。見ればわかる内容なので説明は割愛するぜ。わかんねーよ、という方はその旨コメントにてお知らせいただければそこそこ丁寧にご回答いたします。</p>
<pre><code>add_action('init', 'my_custom_stuff'); 
function my_custom_stuff(){
  register_post_type(
    'hairstyle', 
    array(
      'label' =&gt; __('Hair Styles'),
      'singular_label' =&gt; __('Hair Style'),
      'public' =&gt; true,
      'show_ui' =&gt; true,
      'capability_type' =&gt; 'post',
      'hierarchical' =&gt; false,
      'rewrite' =&gt; false, 
      'query_var' =&gt; false, 
      'supports' =&gt; array(
	'title', 
	'editor', 
	'thumbnail'
      ),
      'register_meta_box_cb' =&gt; 'my_hairstyle_meta_box'
    )
  );
  
  register_taxonomy(
    'hairstyletag', /* もうちょっとマシなタクソノミー名を考えよう */
    'hairstyle', /* どの post type で使うかを指定 */
    array(
      'hierarchical' =&gt; false,
      'update_count_callback' =&gt; '_update_post_term_count',
      'label' =&gt; 'ヘアスタイルの分類',
      'singular_label' =&gt; 'ヘアスタイルの分類',
      'public' =&gt; true,
      'show_ui' =&gt; true
    )
  );
}
//
function my_hairstyle_meta_box($post){
  add_meta_box('my_hairstyle_meta', 'お気に入り度よ！', 'my_hairstyle_meta_html', 'hairstyle', 'normal', 'high');
}
function my_hairstyle_meta_html($post, $box){
  $rating = get_post_meta($post-&gt;ID, 'rating', true);
  echo wp_nonce_field('my_hairstyle_meta', 'my_meta_nonce');
  echo 'このヘアスタイルは... ';
  echo '&lt;input type="radio" name="rating" value="めっちゃ好き"' .('めっちゃ好き' == $rating ? ' checked="checked"' : ''). '&gt;めっちゃ好き　';
  echo '&lt;input type="radio" name="rating" value="嫌い！"' .('嫌い！' == $rating ? ' checked="checked"' : ''). '&gt;嫌い！　';
  echo '&lt;input type="radio" name="rating" value="フツー"' .('フツー' == $rating ? ' checked="checked"' : ''). '&gt;フツー';
}
add_action('save_post', 'my_hairstyle_meta_update');
function my_hairstyle_meta_update($post_id){
  if(!wp_verify_nonce( $_POST['my_meta_nonce'], 'my_hairstyle_meta'))
    return $post_id;

  if(defined('DOING_AUTOSAVE') &#038;& DOING_AUTOSAVE) 
    return $post_id;

  if('hairstyle' == $_POST['post_type']){
    if(!current_user_can('edit_post', $post_id))
      return $post_id;
  }else{
    return $post_id;
  }

  $rating = $_POST['rating'];
  if($rating == '') 
    delete_post_meta($post_id, 'rating');
  else
    update_post_meta($post_id, 'rating', $rating);
}
//
add_filter('manage_edit-hairstyle_columns', 'my_hairstyle_columns');
function my_hairstyle_columns($columns){
  $columns = array(
    'cb' =&gt; '&lt;input type="checkbox"/&gt;',
    'title' =&gt; 'スタイル名',
    'image' =&gt; '画像',
    'tag' =&gt; '分類',
    'rating' =&gt; 'お気に入り度',
    'date' =&gt; '日付'
  );	
  return $columns;
}
//
add_action('manage_posts_custom_column', 'my_hairstyle_column');
function my_hairstyle_column($column){
  global $post;
  if('image' == $column) the_post_thumbnail(array(64, 64), 'class=featured-image');
  elseif ("tag" == $column) the_terms(0, 'hairstyletag');
  elseif ("rating" == $column) echo get_post_meta($post-&gt;ID, 'rating', true);
}</code></pre>
<h4>register_post_type：カスタム投稿タイプの登録</h4>
<p>えびちゃん好みのカスタム投稿タイプを追加するのがこのファンクションです。詳細は <a href="http://wpdocs.sourceforge.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/register_post_type">Codex：関数リファレンス/register post type</a> をご覧ください。とは言ってもやっぱりめんどくさがって見ない人がいらっしゃるに違いないので、ご丁寧に説明いたします。Codex と 3.0beta1 のソースで食い違いがある部分はソースの内容を書いておきます。</p>
<pre><code>書き方：

&lt;?php register_post_type($post_type, $args) ?&gt;

$post_type：文字列，必須　
　カスタム投稿タイプの名前を指定します。
$args：配列，任意　
　以下のパラメータを指定します。


パラメータ：

label：文字列，任意，デフォルト＝ $post_type 値
　カスタム投稿タイプの管理メニュー表示名として使用されます。
　英語なら複数形で。i18n を考慮して __('my-types') のように指定すると良い。

singular_label：文字列，任意，デフォルト＝ $label 値
　新規追加、編集のページで表示されるカスタム投稿タイプ名。i18n を考慮のこと。

description：文字列，任意，デフォルト無し
　カスタム投稿タイプの概要。使わないはず。

public：bool，任意，デフォルト＝false
　カスタム投稿タイプが管理画面で表示される（ユーザに使ってもらう用）か否（裏で使う用）か。

publicly_queryable：bool，任意，デフォルト＝public 値
　通常のクエリに含むか否か。とは言うものの true でも index.php で出てこないぞ。

exclude_from_search：bool，重要，デフォルト＝！public 値
　検索結果から除くか否か。

show_ui：bool，任意，デフォルト＝public 値
　管理メニュー＆画面を自動で表示するか否か。

capability_type：文字列，任意，デフォルト＝'post'
　読み書き削除に適用される権限
　以降、権限パラメータは通常の投稿と同じで良いなら未指定（デフォルト）で OK。
　カスタム投稿タイプ独自の権限を作るなら、これに例えばカスタム投稿タイプ名を指定して、
　各種 Role に edit_hairstyle とかなんとかを追加していけば良い。
　詳しくは <a href="http://wpdocs.sourceforge.jp/ユーザーの種類と権限">Codex：ユーザーの種類と権限</a>

edit_cap：文字列，任意，デフォルト＝"edit_$capability_type"＝'edit_post'
　このカスタム投稿タイプに属する記事の編集権限名。

edit_type_cap：文字列，任意，デフォルト＝ 'edit_' . $capability_type . 's'＝'edit_posts'
 　このカスタム投稿タイプの一覧画面での編集権限名。

edit_others_cap：文字列，任意，デフォルト＝ 'edit_others_' . $capability_type . 's'＝'edit_others_posts'
　他のユーザの作成した記事の編集権限名。

publish_others_cap：文字列，任意，デフォルト＝ 'publish_' . $capability_type . 's'＝'publish_posts'
　記事の公開権限名。

read_cap：文字列，任意，デフォルト＝ 'read_' . $capability_type . 's'＝'readt_post'
　記事を読む権限名。

delete_cap：文字列，任意，デフォルト＝ 'delete_' . $capability_type . 's'＝'delete_posts'
　記事の削除権限名。

hierarchical：bool，任意，デフォルト＝false
　ページのように階層有り（true）とするか、投稿のように階層無し（false）とするか。

supports：配列，任意，デフォルト＝なし
　カスタム投稿タイプの編集画面で表示するメタボックスを 
　add_post_type_support() を使う代わりに、登録時に指定する。
　'title'　＝　タイトル欄
　'editor'　＝　本文欄
　'author'　＝　作成者欄
　'thumbnail'　＝　投稿サムネイル／Featured Image 欄
　'excerpts'　＝　抜粋欄
　'trackbacks'　＝　トラックバック／ピンバック欄
　'custom-fields'　＝　カスタムフィールド欄
　'comments'　＝　コメント欄
　'revisions'　＝　リビジョン
　'page-attributes' (parent, template, and menu order)　＝　ページの属性欄
　※デフォルト／未指定の場合は title ＆ editor が自動で設定される。
　　何かを指定さえすれば、title や editor 無しにもできる。

register_meta_box_cb：文字列（関数名），任意，デフォルト無し
　編集画面のメタボックス設定時コールバック。
　remove_meta_box() とか add_meta_box() はこのコールバックで行いましょう。

taxonomies：タクソノミー名（文字列）の配列，任意，デフォルト無し
　カスタム投稿タイプに関連づけたタクソノミーは別途 
　register_taxonomy() や register_taxonomy_for_object_type() で登録する方が良い。
　これは、すでに登録済のタクソノミーをこのカスタム投稿タイプで使う場合に指定。

menu_postition：文字列，任意，デフォルト＝null＝一番下
　管理メニュー上での表示順位。3.0beta1 では未実装。

menu_icon：文字列，任意，デフォルト＝null＝投稿のアイコン
　管理メニュー画面で使用されるアイコンのURL。3.0beta1 では未実装。

permalink_epmask：文字列，任意，デフォルト＝EP_NONE
　パーマリンクの何かマスク。気にしなくて OK。

rewrite：配列，任意：デフォルト＝true
　※パーマリンク設定がデフォルトでない場合に有効。
　パーマリンク設定に従ってリンクを書き換えるか否か。
　false＝http://example.com/?post_type=hairstyle&#038;p=123
　true＝http://example.com/hairstyle/わんこ風
　array('slug' => 'hair-styles')＝スラッグを変更＝http://example.com/hair-styles/わんこ風
　'with_front' - defaults to true　よくわからん。

query_var：bool，任意，デフォルト＝true
　※パーマリンク設定がデフォルトの場合に URL が以下のように変わります。
　false＝http://example.com/?post_type=hairstyle&#038;p=123
　true＝http://example.com/?hairstyle=わんこ風

_builtin：bool，使わないこと，デフォルト＝false
　コア組み込みの投稿タイプ（true）かカスタム投稿タイプ（false）か。

__edit_link：bool，使わないこと，デフォルト＝'post.php?post=%d'
　記事を編集する際のリンク。</code></pre>
<p>最低限指定すべきパラメータは public。あとは label, supports, register_meta_box_cb, taxonomies くらいですね。publicly_queryable=true （public=true）なら通常のブログ記事一覧表示に出てくるはずなんですが、カスタム投稿タイプの記事は出てきませんでした（Twenty Ten 0.7）。眠いからか？とりあえず以下のようにすると、カスタム投稿タイプの記事一覧を表示することはできます。</p>
<pre><code>query_posts('post_type=hairstyle');</code></pre>
<p>今回のタイトルは「使う」でしたが、実際は「作る」まででしたね。早朝なので眠いです。もう寝ます。</p></p>
<h4>カスタム投稿タイプだからできるこんなこと</h4>
<ul>
<li>「臨時休業」カスタム投稿タイプで本文と休日だけを入力してもらうと、information の記事として表示しつつ営業日カレンダーに反映。</li>
<li>飲食店で「スタッフブログ」の他に「お知らせ」「メニュー」「スタッフ」「クーポン」をカスタム投稿タイプとして追加。カテゴリから解放される！タグ的タクソノミーがカスタム投稿タイプ別に作れる！</li>
</ul>
<p>他にもえぇっと、あのホラいっぱいあるよカスタム投稿タイプで幸せになれることが。wpxtreme ではアナタのアイデアを募集しています。コメントにてドシドシご応募ください。ドシドシって擬態語？</p><h5>動作確認バージョン</h5><ul class="tested-vers"><li>WordPress 3.0 beta1</li></ul>]]></content:encoded>
			<wfw:commentRss>http://wpxtreme.jp/how-to-use-custom-post-types-in-wordpress-3-0-beta1/feed</wfw:commentRss>
		<slash:comments>14</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://wpxtreme.jp/how-to-use-custom-post-types-in-wordpress-3-0-beta1" />
	</item>
		<item>
		<title>コンタクトメッセージの正しい書き方</title>
		<link>http://wpxtreme.jp/how-to-write-a-message</link>
		<comments>http://wpxtreme.jp/how-to-write-a-message#comments</comments>
		<pubDate>Mon, 05 Apr 2010 19:46:34 +0000</pubDate>
		<dc:creator>kz</dc:creator>
				<category><![CDATA[HOW-TO]]></category>
		<category><![CDATA[text]]></category>

		<guid isPermaLink="false">http://wpxtreme.jp/?p=257</guid>
		<description><![CDATA[欧米のブログなどを見ると、よく知らん人相手でも「Excellent!」「Genius!」的なコメントがワンサカある。欧米の方々は良く知らん日本人のサイトでもコンタクトフォームから「looks cool」的なそんだけかい！ってゆーメッセージを気軽に送ってくる。<br />
一方日本では芸能人的有名人のサイトならコメントはスリスリと多く寄せられるが、例えば技術系ブログにおいては今まさにそのネタを必要としていた人からの質問的なコメントのみがあったりなかったりの有様だ。<br />
少々意地悪なコメントは欧米でも日本でも見られるがその違いは大きい。欧米では程よいツッコミ加減で書く人も書かれた人もそして読む人もニヤニヤ（幸せ版）な感じになるのに対し、日本の場合はコメントがマイナスオーラを帯びていることが多い。書かれた人も読む人も残念だわネーとなる。書いた人はニヤニヤ（非幸せ版）かもだが、発したマイナスオーラは自身の人生に残念なカゲを落としてしまうことに早く気づいて欲しい。<br />
そう、そんなことだから日本はどんどん衰退していくということに皆気づくべきなのだ。意味がワカランかね？んでは、ちょうど良いメッセージをいただいたので、ケーススタディとしてどうすれば日本が元気になるか添削してみよう！<a class="excerpt-more" href="http://wpxtreme.jp/how-to-write-a-message">Continue Reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<blockquote>
おなまえ：匿名<br />
メールアドレス：google@yahoo.com<br />
メッセージ本文：<br />
つぶやきを見て感想を述べます。失礼な表現はお許しください。<br />
Safari, Chrome, Firefox に Opera から "upgrade" は出来ません。それは downgrade です。<br />
http://www.html5.jp/blog/2010/04/04/html5-api/<br />
http://www.miketaylr.com/code/input-type-attr.html<br />
CSS3 に対応したブラウザを使わないと十分デザイン意図が再現出来ないのは、プロとしてどうでしょうか。<br />
http://en.wikipedia.org/wiki/Progressive_enhancement<br />
<br />
また冒頭で lang="ja" と宣言されていますが、メインコンテンツが全て英語ですね。content description や keyword は日本語しかありませんね。対象は日本人ですよね。この辺の意図が今一分かりかねます。英語のコンテンツはファッションでしょうか。
</blockquote>
<p>ホラ、残念な気持ちになったでしょー。これは kz のポートフォリオサイト <a href="kzxtreme.com">kzxtreme.com</a> のコンタクトフォームからいただいたメッセージである。こういう感じのメッセージを書いちゃうようだとまずえびちゃんは振り向いてはくれない。「ウザい」と言われて終わりだ。もしキミが wpist ならどんな内容だろうと誰が読んでも常に幸せになれるようにメッセージを書くことを心がけよう。そうすればえびちゃんの方からガンガンメールが来ることになる。逆にこっちから「ウゼー」と言ってやれば良い。えびちゃんはもうキミにメロメロだ。不思議に思うだろうがえびちゃんとはそういうものなのだ。<br />
このように、幸せを発すると自分も幸せになる。同様にマイナスオーラを発するとマイナスな諸々が自分に返ってくる。因果応報って知ってるよね？ん、さっぱり意味がワカランかね？</p>
<h4>経緯</h4>
<ol>
<li>WordBench 名古屋でしこたま飲む。</li>
<li>翌朝全裸で目覚める。寒い。</li>
<li>大事な用事があるのに一日酒臭い息で外出。</li>
<li>帰宅すると欧米の Opera ユーザーから「Opera is good... also !」なメッセージがいくつか届いている。</li>
<li><a href="http://twitter.com/kzxtreme/status/11635924828">kzxtreme.comをご覧のOperaユーザ達からOperaもモダンブラウザじゃ！メールがいっぱい来るよーわーん</a> とつぶやく。</li>
<li>すかさず冒頭のメッセージをいただく。</li>
<li><a href="http://twitter.com/kzxtreme/status/11637438113">ファッションですよ☆</a> 他、つぶやく。</li>
<li>投稿サムネイルネタは保留にして本投稿を執筆。</li>
</ol>
<p>とりあえず今日は酒が残ってるので kz がそういう状態の時はめんどくさいメッセージは日を改めていただくとありがたい。まずはそういう 他人に対する配慮、粋な心配り といったところから意識して始めてみよう。</p>
<h4>添削</h4>
<pre><code>おなまえ：匿名</code></pre>
<p>匿名はダメです。なんで匿名にするのかというと、それは自分に自信が無いからです。自信のない人にえびちゃんはナビきません。根拠が無くても胸を張って背筋を伸ばして、目を見てはっきり話せば自信に満ちあふれた人物を演出できるのでお試しください。ただし、自信は不遜とは違います。己を信じているということです。新年を明けまして、ちゃうわ、信念を持って恥じること無く自分の人生を生きているという意味です。</p>
<pre><code>メールアドレス：google@yahoo.com</code></pre>
ウソアドレスはダメです。これがコメントだったらせっかくの <a href="http://ja.gravatar.com/">Gravatar</a> が正しく表示されません。また、テキトウに書いたものが誰かのアドレスと同じになるとご迷惑なことになります。幸いこのアドレスは取得されていません（多分取得できません）が、例示する場合は me@example.com などとしましょう。<br />
うっかり匿名と入力するのはいたしかたない。人間だもの。でも、そこからさらにウソアドレスを入力してまで送信すべき価値ある内容なのかどうか、そしてそれを「今からコレ送信するよー」と親や子供やかわいい嫁に見せられるか、そういった事を判断基準にすると良いです。
<pre><code>つぶやきを見て感想を述べます</code></pre>
<p>つぶやき見てならつぶやき返しましょう。いったい何のためにフォローしているんだい？回りくどいことは最もえびちゃんが嫌います。立ち振る舞いはいつもスマート＆シンプルに。</p>
<pre><code>失礼な表現はお許しください</code></pre>
<p>こういった日本人的な一文は不要です。「もし失礼な表現がありましたら」だと「そんなつもりは無いのですが」といったエクスキュースが入って柔らかくなりますが、いずれにしても不要です。まして失礼な表現をしてやるぞという意気込みがあるなら、失礼に徹底した方が潔い。えびちゃんは卑屈な文面にはイラつきます。「今夜空いてるかな？もし空いてて、イヤじゃなかったら食事でもどう？」なんてメール送ったらアドレス消去されますよ。「今夜飯行こうぜ」で OK なんです。まだ彼女じゃなくてもね。信じられない？いいからやってみなって。それでうまく行かなかったらそのコはそれほど大した女性じゃないのでハナから相手にせんでよろしい。</p>
<pre><code>Safari, Chrome, Firefox に Opera から "upgrade" は出来ません。それは downgrade です。

http://www.html5.jp/blog/2010/04/04/html5-api/


http://www.miketaylr.com/code/input-type-attr.html</code></pre>

<p><a href="kzxtreme.com">kzxtreme.com</a> では IE な方にはもっと良いブラウザの提案を、Firefox の方には Webkit 系のご提案をしています。Opera のことはすっかり忘れてたので IE 用の処理を通って「Safari, Chrome, Firefox 辺りに upgrade しなよ」と表示されておりました。現在は WebKit 系と同じ処理に修正しましたけども、忘れててすまんかった。でも、どのサイトでも Opera は 2%未満なので今後もよく忘れると思います。<br />
あとなんかリンクが張られていますが、ただのうっかりなのでわざわざクリックしてまで見ないぜ！<br />
こういう場合は、前述の欧米の方のように「Opera もモダンですYO☆」とサラリと反応するのが吉です。「Opera から "upgrade" は出来ません」言われてもそりゃできないですよね、ですし「それは downgrade です」とかどんどん不要なフレーズを追加するたびにえびちゃんは「めんどくさいなこの人」って気持ちになります。めんどくさがられるのってイヤでしょ？<br />
なんかしくってる？と思ったら「ミスってね？」とか親切につぶやきましょう。Opera からじゃアップグレードにならねぇだろうが、と思った方はすぐ切れてムカつくことが何も幸せにつながらないこと、そういうマイナスオーラをまとっている時間がもったいないこと、に気づくと色んなことが良い方向に動き出します。<br />
kz ほどまったりされてない方相手にこのような接し方をすると Opera ユーザ＆Opera そのものに良くないイメージを持たれてしまうかもしれません。Opera を愛しているからこそ発言する場合は、そういったことも考慮した文面にしましょう。</p>
<pre><code>CSS3 に対応したブラウザを使わないと十分デザイン意図が再現出来ないのは、プロとしてどうでしょうか。

http://en.wikipedia.org/wiki/Progressive_enhancement</code></pre>

<p>CSS3 で transition すげーとかって遊んでる、の、ね。自分のサイトくらい好き勝手にノビノビやろうぜ！「できない」のか「してないのか」など、明確でない部分はまずそこんとこを尋ねましょう。そして A ならこうですね、B ならこうですねと予め書いておくと無駄なやり取りが減って親切です。何ごとも相手の真意を確かめずにこうだ！と思い込んで反応するのは多くの場合、アナタにとって良くない結果を招きます。わかりやすく言うとちょっと恥ずかしい思いをします。</p>
<pre><code>また冒頭で lang="ja" と宣言されていますが、メインコンテンツが全て英語ですね。
content description や keyword は日本語しかありませんね。対象は日本人ですよね。
この辺の意図が今一分かりかねます。英語のコンテンツはファッションでしょうか。</code></pre>
<p>何も意図などな、い、よ　。description や keyword はめんどくさくなってテキトウに書いただけだと思うぜ。人の言動のヒトツヒトツに意味などそうそう無いことを知ると、生きて行くのが楽になります。えびちゃんがあの時言ったヒトコトをずっと引きずって悶々とせんで良い。何故ならえびちゃんはそんな事は忘れているし、そもそも始めからその言葉に意味など無いのだ。キミもすっかり忘れて「飯行くぞ」って軽くメールすればよろしい。「あのときのことだけどさ、」とかネチネチするのはヤメなさい。そこをクリアにしたいっていうのはキミのエゴだ。ネチネチグルグルするほどえびちゃんは離れて行くし、そんなことしてる時間がもったいないぞー！<br />
さらに kz は対象とか考えてないです。WordPress でなんか作りたいスイッチが入った時に、ポートフォリオの話題を目にしたり CSSMania などのギャラリー？を知ったので submit したろって思ってテキトウに作っただけなのだ。英字フォントのが好きなのでファッションなのは正解◎よくできました。</p>
<h4>正しい記述例</h4>
<pre><code>おなまえ：kz
メールアドレス：me アット wpxtreme どっと jp
メッセージ本文：
Opera で見たら Safari とか使え言われたけど CSS3 動くんだぜ Opera☆
あと全部英語だとわかんねーw　このカッコつけ！ウリウリ
</code></pre>
<p>微笑ましいですね。コンタクトを取るというのはこういうことを言います。<br />
攻撃してやるぞー！という気持ちでわざわざコンタクトするのはものすごく非生産的です。家族と楽しく過ごしているときの穏やかな自分で、そのときの自分を見つめ直していただくとバカバカしくなるのでオススメです。<br />
何十億といる人々の中から、特定の相手と何らかの接点を持つということはすごく素敵なことですよね。ならばお互いが幸せになるような、これからの人生の幅を広げるような、そんな接し方をしたいものです。<br />
例えば kz ってヤツが調子こいてやがる、一発ガツンとイったらなあかんな、っていうのはヤンキー中学生の発想です。ちょっと恥ずかしいですよね。<br />
なんかこいつイラつく、というのはアナタの心に余裕が無いからです。イラついていいのはえびちゃんだけなんですよ。例えば子供達が大声をあげて遊んでいるとしましょう。「うるせーガキンチョだな」と思うか「元気な子供達だね（音符」と思うかはアナタの心の健康度によって変わります。心が不健康だと思考も言動も不健康になり周りにマイナスオーラをまき散らして幸せを遠ざけてしまいます。<br />
どうしても天狗っパナをへし折りたい場合は、圧倒的な力の差を目の当たりにさせると良いです。ドヤ顔無しで紳士的に。そうすると天狗はアナタを尊敬します。そして交流が始まって、意外とイイやつだな kz となって、コラボしたりしてそのうち大金持ちになってウハウハかもしれません。でも、ウソアドレスで発展しにくい内容だと、そういった可能性も無くなります。もったいない。<br />
また、知らん人は敵、な考え方も改めましょう。自分の属するユニットと同規模のユニットとは敵対しがちですよね。だから世界が一致団結するには宇宙人が攻めて来ないといけない。んなアホな。仲良くするためには敵が必要とかめんどくさい。これからはよく知らん人のブログでも気軽に「いいね！」とか「勉強になったぜ」とかコメントしましょう。その積み重ねが日本のダメなところを改善し、世界平和にもつながっていくのです。物事の良い面を見つけるようにしてると、お肌がキレイになります。悪い面ばかりを追いかけてムキーッとなってると脳にダメージを与えてしまいます。気をつけてくださいね。</p>
<h4>以上を踏まえて</h4>
<p>粋なコメントやメッセージをお待ちするよ。<br />
以下ダメな例。もう一回 wpxtreme.jp を隅々まで読み直しなさい。</p>
<ul>
<li>なげー</li>
<li>ウゼー</li>
<li>メールをさらすのはいかがなものでしょう</li>
<li>意味がワカラン</li>
<li>IE をけなさないでください！</li>
<li>どっちもどっち</li>
<li>えびちゃんかわゆす</li>
</ul>
<h4>フォーラムにて</h4>
<p>勉強熱心で努力家な方々からすると、質問者に対して色々思うところがあったりするかもしれません。そんなときは、おじいちゃんおばあちゃんや子供に接する時の優しい気持ちを思い出してください。ちったぁ自分でなんとかかんとかと思わないように。ましてそんな事を書いてしまわないように。そのうえ twitter でつぶやいたりしないように。そうしてしまう自分が荒れているのだと考えて心を鎮めましょう。質問者は誰も攻撃していません。なので攻撃してはいけません。<br />
フォーラムに書き込むのは敷居が高いことなんです。わらにもすがる思いで書き込んだら怒られるわ解決せんわでは WordPress ＆コミュニティーにイヤなイメージを持ってしまいます。困っていることがズバッと解決すれば、嬉しい → WordPress ますます大好き → 貢献したい となってシメシメなんです。<br />
例えば投稿ルールを守って欲しい時などは、冷たい書き方じゃなくて愛情を持って温かく書いてあげてください。例えがアレですが「トイレを汚すな！」って貼り紙だとウリャー！って汚されます。「いつもキレイに使っていただいてありがとうございます」だとちゃんとキレイになります。善意で接すれば善意が返ってきて発展する。マイナスオーラをブチまけたらコミュニティがマイナスオーラに包まれて衰退するし、人はアナタから遠ざかります。コミュニケーションの基本ですね。<br />
もちろん世の中には色んな人がいるので善意が返ってこないこともありますが、自分が善意で接することが大事です。他人を変えることはできません。変えられるのは自分だけです。で、自分が変わると他人も変わってきます。それに気づけばイライラギスギスムカムカとは無縁の平和な毎日を過ごせます。お布施を希望される方は <a href="http://wpxtreme.jp/contact" title="Go to お問い合わせ.">お問い合わせ</a> からお気軽に。<br />
あと、質問者があまり感心できないサイトを構築されているようなら、そっとしておくのもひとつの回答ですね。</p>]]></content:encoded>
			<wfw:commentRss>http://wpxtreme.jp/how-to-write-a-message/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://wpxtreme.jp/how-to-write-a-message" />
	</item>
		<item>
		<title>ボツデザインシリーズ #4</title>
		<link>http://wpxtreme.jp/unreleased-webdesign</link>
		<comments>http://wpxtreme.jp/unreleased-webdesign#comments</comments>
		<pubDate>Sun, 21 Mar 2010 21:55:58 +0000</pubDate>
		<dc:creator>kz</dc:creator>
				<category><![CDATA[PORTFOLIO]]></category>
		<category><![CDATA[photoshop]]></category>
		<category><![CDATA[rejected]]></category>
		<category><![CDATA[webdesign]]></category>

		<guid isPermaLink="false">http://wpxtreme.jp/?p=250</guid>
		<description><![CDATA[えぇぇ、そうなの？！という理由により公開までたどりつけなかったデザインを紹介するこのコーナー。今回もまた2週間ぶりの更新でお届けします。ネタが無いわけではありません。WordPress 2.9.2 でカスタム投稿タイプを試したろと思ったらドえらいことになって頓挫しております。投稿サムネイルでお茶を濁そうかと画策中です。さらにプライベート＆クライアントワークのローンチ（<a href="http://kzxtreme.com">kzxtreme</a> 参照）が立て続けでろくにえびちゃんをかまってあげる時間もないのです。年度末めー。<br />
それはそうと Google で「ボツ」と検索すると <a href="http://wpxtreme.jp/unreleased-webdesign-3">ボツデザインシリーズ #3</a> が1ページ目に出てくるのは一体どういうことなんでしょうか。しっかりしろ Google。<br />
今回は、某串料理店の新規サイトです。ロゴや文言はそのままです。初回ご提案のデザインはボツになりましたが、テイストを変更して鋭意制作中です。ボツにならないことを祈ってくれ皆。<a class="excerpt-more" href="http://wpxtreme.jp/unreleased-webdesign">Continue Reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<a href="http://wpxtreme.jp/cms/wp-content/uploads/2010/03/pincho-1.jpg"><img src="http://wpxtreme.jp/cms/wp-content/uploads/2010/03/pincho-1-620x674.jpg" alt="" title="pincho" width="620" height="674" class="alignnone size-large wp-image-252" /></a>
<h4>制作の様子</h4>
<p>店舗オープン前からブランディング一切をお任せいただければ、それはもうドえらいクオリティのご提案ができるのですが、当方 WEB 業界のはじっちょでひっそり息を潜めてプルプル震えておるような状態ですので、なかなかそういったコネクション的なものは構築できておりません。営業もしませんので基本、既存クライアント様からのご紹介のみです。ホームページは欲しいけど何十万もするんではなぁ、変な業者にひっかかるとイヤだなぁ、などとあぐねていらっしゃる方々にとってはまさに救世主的存在ですのでお気軽に <a href="http://wpxtreme.jp/contact" title="Go to お問い合わせください.">お問い合わせください</a>。ただし、こちらもクライアントを選びますのでそこはヒトツよろしくお願いします。料理関連なら「マジ旨い」、サービス関係なら「マジありがとう」そう思えるクオリティがあり、かつお客様を大切にしているクライアントのみお受けいたします。お客様がお金に見えてたり、二度と来ねぇょ！なところとはお付き合いしません。お互いホレる仲が理想です。<br />
<br />
制作の様子なんですが、そういった事情により ロゴ，チラシ，店舗がある状態から WEB サイトをデザインすることがほとんどです。ちなみに名古屋では Copperplate に代表される Engraved なフォントがお気に入りのデザイン屋さんが大活躍されているようで、アチコチで「またこのフォントか」という出会いがあって微笑ましいです。<br />
まず、初回訪問で店舗の空気からクライアントが何を目指しているか五感でガッチリ感じ取ります。これ8割。で、ヒアリングと簡単な撮影を行います。ヒアリング言うてもノープランなクライアントがほとんどなので五感のインプットをまぜまぜした結果を「こんな感じで作ってみますねー」と伝えておきます。で、使えそうな資料をお借りして帰路につきます。チラシなどは既に OK が出ているデザイン的なモノのアウトプットですからインスパイアされても間違いは無いでしょう。帰ったら神様が降りてくるのを静かに待って、ダーッと Photoshop で8割方描き上げます。あとは一日掛けて細部を調整してご提案。多分ベストな提案なんです。コレ以外には無いな、って毎回思うもの。</p>
<h4>ボツの理由</h4>
<p>極上の料理とテキトウな器、テキトウなカベだけど天然木のテーブル＆チェア、などギャップを楽しんでもらうお店です。店舗名が某有名女優のモジりだったりと遊び心もたっぷりです。そしてポスティングカードのデザインはポップでかわいらしい。よし、間違いない。自信満々でドヤ！とご提案したところ「パッと見、かわいいですよね。」「ぁー、そうですね。かわいさを取り入れましたハイ。」「もっとパッと見クールな感じが良いんです。気になるサイトがありまして—」と見せていただいたのは、出た全面フラッシュサイト！イメージ写真ドーンでわけわからんナビゲーション。「ホームに何も情報がないサイトはアレやコレやでオススメしないんですけどもー」「せやけどなぁ、ウチこんなんがええねん」「どうしてもか？」「うん、そやねん」「こういうのんがええんか？」「クールなんが好きやねん」「しゃぁないやっちゃな、今回だけやで？」<br />
というやり取りの末、ソッチ方向で仕切り直ししました。料理がおいしくてクライアント様が素敵なので今回だけ特別です。生ビール6杯いただいたからかもしれません。<br />
<br />
今回皆にもぜひ学んでおいて欲しい教訓は「クライアントは印刷物はテキトウでも良いがサイトにはめっちゃこだわる」ということだ。他のクライアントでもそういう傾向がある。気のせいではない、統計的に有意なのだ。ヨソの人が作った印刷物にインスパイアされてはならん。ブランディング無視のこれでいいんですかな印刷物で OK なのにホームページとなると「ここもうちょっと大きく」とかどうでもええことさえもドえらい細かく気になるのだ。印刷物は印刷するまでよくわからんしバーッと印刷されちゃってやり直しも効かんから「まぁええか」となるんだろうか。<br />
いや、ホームページというのはやはりクライアントの夢であり、お店を作る時と同じくらいの思い入れができる楽しみなモノなんだろう。そのお手伝いができるのはとても嬉しいことであり、ありがたいことでもある。エンドユーザーから遠く離れたところで Windows のボケナスをいじくり倒していたままでは味わえなかった幸せだ。そのうえ「ホームページ見たっていうお客さんが増えたよ」なんて聞くと世界人類が平和でありますようにと祈らずにはいられない。えびちゃんにもいつも以上に優しくなれる。
<br />はじっちょではあるが WEB 業界に関われて本当に良かったと思う。いや WEB 業界に関わろうと自ら動いた自分こそが本当に素敵だと思う。ただ、ひとつだけ贅沢を言わせてもらえるならば、デザインはまるっと任せてくれ。マジで。</p>
]]></content:encoded>
			<wfw:commentRss>http://wpxtreme.jp/unreleased-webdesign/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://wpxtreme.jp/unreleased-webdesign" />
	</item>
		<item>
		<title>WordPress3.0未満でのカスタムタクソノミーの使い方</title>
		<link>http://wpxtreme.jp/how-to-use-cusom-taxonomy-with-wordpress-versions-lower-than-3</link>
		<comments>http://wpxtreme.jp/how-to-use-cusom-taxonomy-with-wordpress-versions-lower-than-3#comments</comments>
		<pubDate>Mon, 08 Mar 2010 04:25:59 +0000</pubDate>
		<dc:creator>kz</dc:creator>
				<category><![CDATA[HOW-TO]]></category>
		<category><![CDATA[admin]]></category>
		<category><![CDATA[category]]></category>
		<category><![CDATA[tag]]></category>
		<category><![CDATA[taxonomy]]></category>

		<guid isPermaLink="false">http://wpxtreme.jp/?p=241</guid>
		<description><![CDATA[WordPress の3大使われない機能のひとつにカスタムタクソノミーがあります。タクソノミーという言葉に馴染みが無くハマる日本語も見当たらないため長らくマイナーな立場に甘んじてきましたが、WordPress 3 で UI が充実しカスタム投稿タイプと絡んでようやく陽の当たる場所へ出てきそうなので予習しておきましょう。<br />
タクソノミーは分類ってことです。カテゴリーもタグもタクソノミーなんですよ。カテゴリーは階層（親子関係）有りのタクソノミー、タグは階層無しのタクソノミー。混乱してきましたね。そんなキミのためにタクソノミーとは何なのか、どうやって使うのか。ココだけ読んどけばオール OK、にしてやるぜ。<a class="excerpt-more" href="http://wpxtreme.jp/how-to-use-cusom-taxonomy-with-wordpress-versions-lower-than-3">Continue Reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<h4>ことばのせつめい</h4>
<p>生涯 WordPress のカスタマイズ1本と謳っている wpxtreme でも、ブログの記事は「TUTORIALS」「PORTFOLIO」などのカテゴリーに分類されています。「メイク」「グルメ」「わんこ」と記事のカテゴリーを分けているえびちゃんもいることでしょう。<br />
ちょっと待って。「カテゴリー」と何気なく言ってますけど、デヴェロッパー的にはこれは「カテゴリーのターム」です。「TUTORIALS」「メイク」など、これらはカテゴリーじゃなくてカテゴリーのタームなんです。共学の私立ですね。通ってみたいです。<br />
同じく「投稿のタグ」も［新規タグの追加］で追加した「ADMIN」「プラグイン」などが「タグのターム」です。どちらも今まで通り「わんこカテゴリー」「ADMIN タグ」と言ってて OK ですが、タームであることを知ってて言うのと知らないで言うのとではやはり他人に気づかれない程度の差があると思います。<br />
そしてタームをグルーピングしている「カテゴリー」や「タグ」をタクソノミーと言います。なので「カテゴリーというタクソノミーで TUTORIALS，PORTFOLIO などのタームに分類する」が正確。女性相手なら「わんこカテゴリーだね☆」が正解。<br />
以上、ネチネチな言葉狩りではなく、AT がオートマなら MT はミッションじゃなくてマニュアルだろうが、っていうどうでもいい話でもなくて、誤解による混乱防止のため正しい理解の下に話を進めるのでよろしくお願いするぜ。<br />
なお、MT は MovableType では？っていうコメントは不要だ。AT って AUTOMATTIC ですよね！っていうコメントは歓迎する。</p>
<h4>具体的な分類を考えよう</h4>
<p>そもそもカテゴリー，タグなんてので説明するからわかり難いのだ。ケーススタディとして「グルメーイタリアン｜フレンチ｜和食」「動物ー犬｜猫」とブログ記事を分けたいえびちゃんを例に説明する。一般的な wper なら以下のようにカテゴリーを作るだろう。</p>
<ul>
  <li>カテゴリー
    <ul>
      <li>グルメ
        <ul>
          <li>イタリアン</li>
          <li>フレンチ</li>
          <li>和食</li>
        </ul>
      </li>    
      <li>動物
        <ul>
          <li>犬</li>
          <li>猫</li>
        </ul>
      </li> 
    </ul>
  </li>
</ul>
<p>だが、えびちゃんの反応はこうだ。「何？！カテゴリー？意味わかんない！グルメと動物がなんで一緒になってんのよ！」一方、wpist ならタクソノミーでスマートに解決するはずだ。</p>
<ul>
  <li>グルメ
    <ul>
      <li>イタリアン</li>
      <li>フレンチ</li>
      <li>和食</li>
    </ul>
  </li>    
  <li>動物
    <ul>
      <li>犬</li>
      <li>猫</li>
    </ul>
  </li> 
</ul>
<p>そして、えびちゃんの反応はこうだ。「あなたってステキね。私なんだか酔っちゃったみたい。」
説明するとは言ったが説明するまでもないだろう。なりたい自分になれるかどうかは自分次第だ。<br />
<br />
では、次にそれぞれの記事に「おいしさーまた食べたい｜二度とイラねぇ」「かわいさーゲキカワ｜ブサイク」のようなラベル付けをしたいとえびちゃんにお願いされたらどうする？一般的な wper なら以下のようにタグを作ってしまうだろう。</p>
<ul>
  <li>タグ
    <ul>
      <li>また食べたい</li>
      <li>二度とイラねぇ</li>
      <li>ゲキカワ</li>
      <li>ブサイク</li>
    </ul>
  </li>
</ul>
<p>さらに「グルメカテゴリーのときは また食べたい｜二度とイラねぇ のどちらかを選んでください。」とかメンドクサイこと言ってまたドヤされるわけだ。そして wpist はまたしてもタクソノミーで鮮やかに解決する。</p>
<ul>
  <li>おいしさ
    <ul>
      <li>また食べたい</li>
      <li>二度とイラねぇ</li>
   </ul>
  </li>
  <li>かわいさ
    <ul>
      <li>ゲキカワ</li>
      <li>ブサイク</li>
    </ul>
  </li>
</ul>
<p>えびちゃんの頬は紅潮し瞳はウルウルしている。そう、タクソノミーを制する者は人生の勝利者となるのだ。</p>
<h4>現実に戻ろう</h4>
<p>では早速タクソノミーを使ってみよう。使い方は簡単、以下を functions.php に追加すればよろしい。</p>
<pre><code>function my_init(){
  register_taxonomy('animal', 'post', array('hierarchical' =&gt; true, 'label' =&gt; '動物',
    'update_count_callback' => '_update_post_term_count'));
  register_taxonomy('taste', 'post', array('hierarchical' =&gt; false, 'label' =&gt; 'おいしさ',
    'update_count_callback' => '_update_post_term_count'));
}
add_action('init', 'my_init', 0);</code></pre>
<p class="append">各タクソノミーの管理画面でターム一覧に表示される投稿数を正しい値にするには 'update_count_callback' => '_update_post_term_count' が必要です。<br />
<br />
また、投稿数の値は下書きを含みませんがビルトインの「カテゴリー」タクソノミー，「タグ」タクソノミーのみ、投稿数のリンクをクリックして表示される投稿編集画面での投稿一覧に下書きが含まれており、ここでの表示件数と先の投稿数は一致しません。不具合なのかまだ作り中だからなのかは不明。</p>
<p>タクソノミーの追加は何よりも優先しろってことなので <code>add_action('init', 'my_init', 0);</code> のアクションで実行します。'動物' などの表示名は .mo ファイルを作成して <code>__('Animal')</code> のように指定するとデキルヤツを演出できますね。register_taxonomy() の詳細は Codex を参照のこと — <a href="http://codex.wordpress.org/Function_Reference/register_taxonomy">Function Reference/register taxonomy</a> とは言ってもメンドクサがって見ない人のために未検証のままテキトウに解説します。必要になったら各自検証すること。</p>
<pre><code>使い方：
&lt;?php register_taxonomy($taxonomy, $object_type, $args); ?&gt;</code></pre>
<ul>
<li>$taxonomy<br />
(文字列) (必須) タクソノミー名。スラッグ的なもの。<br />
デフォルト：なし</li>
<li>$object_type　というより $post_type(s) のがシックリくる<br />
(配列／文字列) (必須) 投稿／ページ／メディアなど、どの投稿タイプで使うかの指定。複数なら配列でね。<br />
デフォルト：なし<br />
例：'post',  array('post', 'page')<br />
カスタム投稿タイプが使えるようになったら、さらに夢が広がりますね。
</li>
<li>$args<br />
(配列／文字列) (任意) 各種引数の指定。<br />
デフォルト：なし<br />
引数：
<ul>
<li>label<br />
(文字列) 管理画面のメニューなどに表示されるタクソノミーの名前。<br />
例：'おいしさ'
<li>hierarchical<br />
(boolean) タクソノミーが階層を持つかどうかを指定。<br />
例：<br />
　false：階層無し＝タグ形式<br />
　true：階層有り＝カテゴリー形式</li>
<li>update_count_callback<br />
(文字列) このタクソノミーに属するタームが増減したときに呼ばれる関数名。</li>
<li>rewrite<br /> 
(配列｜false) タクソノミーアーカイブとかのパーマリンク名（スラッグ部分）の指定。指定するならキーが 'slug' の配列でね。<br />
デフォルト：$taxonomy を使う。<br />
例：<br />
　デフォルト：http://example.com/taste/matatabetai<br />
　false：rewrite 無し（意味不明）<br />
　array('slug' =&gt; "my-tax-$taxonomy") ：http://example.com/my-tax-taste/matatabetai</li>
<li>query_var<br /> 
(文字列｜false) ?query_var=term 形式のクエリ変数名の指定。<br />
デフォルト：$taxonomy を使う。<br />
例：<br />
　デフォルト： ?taste=matatabetai<br />
　false：クエリ無し（意味不明）<br />
　"my-tax-$taxonomy"： ?my-tax-taste=matatabetai
</li>
</ul>
ま、hierarchical と label <del>だけ</del>を指定すれば OK です。
 <p class="append">うそでしたごめん。<br />
'update_count_callback' => '_update_post_term_count' が無いと
ターム一覧で表示される「投稿」の数が正しく更新されないのでこれも必要。</p>
</li>
</ul>
<p>参考：「カテゴリー」タクソノミーと「タグ」タクソノミーの定義（wp-includes/taxonomy.php 17行目〜）</p>
<pre><code>register_taxonomy( 'category', 'post', array('hierarchical' =&gt; true, 'update_count_callback' =&gt; '_update_post_term_count', 
  'label' =&gt; __('Categories'), 'query_var' =&gt; false, 'rewrite' =&gt; false) ) ;
register_taxonomy( 'post_tag', 'post', array('hierarchical' =&gt; false, 'update_count_callback' =&gt; '_update_post_term_count',
  'label' =&gt; __('Post Tags'), 'query_var' =&gt; false, 'rewrite' =&gt; false) ) ;</code></pre>
<p>Codex に</p>
<blockquote>WordPress 2.8 will automatically build an admin interface for custom taxonomies. Allowing end users to add terms and associate posts with the taxonomy terms.</blockquote>
と書いてあるとおり、管理画面で「おいしさ」タクソノミーを満喫できます。
<a href="http://wpxtreme.jp/cms/wp-content/uploads/2010/03/taxonomy-1.jpg"><img src="http://wpxtreme.jp/cms/wp-content/uploads/2010/03/taxonomy-1-620x271.jpg" alt="「おいしさ」タクソノミー管理画面" title="taxonomy-1" width="620" height="271" class="alignnone size-large wp-image-243" /></a><a href="http://wpxtreme.jp/cms/wp-content/uploads/2010/03/taxonomy-2.jpg"><img src="http://wpxtreme.jp/cms/wp-content/uploads/2010/03/taxonomy-2-620x316.jpg" alt="新規投稿の「おいしさ」タクソノミー" title="taxonomy-2" width="620" height="316" class="alignnone size-large wp-image-244" /></a>行頭に　ー　が来てるのはワザとなのでコメントは不要だ。これだけで「おいしさ」タクソノミーを利用できるんだから、今後の案件に積極的に取り入れていこうぜ。ちなみに「おいしさ」タクソノミーのタグクラウドを表示させたい場合は以下のようにすれば OK。</p>
<pre><code>wp_tag_cloud(array('taxonomy' => 'taste'))</code></pre>
<p><a href="http://ja.forums.wordpress.org/topic/3432" title="Codex">指定したカテゴリーに含まれるタグのみ表示したい</a>的なことはこれでスマートに解決するわけです yeah!</p>
<h4>階層有りのタクソノミーの管理画面 UI を作る</h4>
<p>前述の Codex ではカスタムタクソノミーの管理画面は自動で出てくるよ、と言ってますが実は UI が対応済みなのはタグ形式＝階層無しのタクソノミーだけなので気をつけましょう。カテゴリー形式＝階層有りのタクソノミーは バージョン 2.9.2 の時点では UI はサポートされていません。3.0 ではサポートされると思います（知らんけど）ので開発版をダウンロードしてお試しいただくと良いかもです。どこでダウンロードするのかは自分で調べるのだ。<br />
<br />
もの好きな方は引き続きついてきていただいて、階層有りのタクソノミーの UI を作りましょう。コア開発してる気になるのできっと楽しいですよ。<br />
まずは管理画面の［投稿］トップメニューのサブメニューとして［ 動物］メニューを追加します。functions.php に以下を追加。</p>
<pre id="admin-menu"><code>function my_admin_menu() {
  global $submenu;
  $i = 55;
  $submenu['edit.php'][$i++] = array( esc_attr('動物'), 'manage_categories', 'my-edit-categories.php?taxonomy=' . 'animal' );
}
add_action('admin_menu', 'my_admin_menu');
</code></pre>
<p>普通なら［投稿］トップメニューにサブメニューを追加する場合は add_posts_page（<a href="http://codex.wordpress.org/Adding_Administration_Menus#Sub-Menus">Codex：Adding Administration Menus</a>）を使います。</p>
<pre><code>add_posts_page('動物', '動物', 'manage_categories', 'animal', 'my_animal_page');</code></pre>
<p>これはメニューのリンク先が http://example.com/wp-admin/edit.php?page=animal となり、実際に画面を出力する際にコールバック関数として指定した 'my_animal_page' が呼ばれます。んが、WordPress のタグ，カテゴリーの編集の実装では redirect を多用しているので、コールバック関数内で同じことをしてもうまく動作しません。そんな時はお隣のサブメニューがどうやっているかを調べましょう。<br />
<pre><code>［投稿のタグ］サブメニューの URL：http://example.com/wp-admin/edit-tags.php?taxonomy=post_tag
［カテゴリー］サブメニューの URL：http://example.com/wp-admin/categories.php</code></pre>
タグはタクソノミー対応してるけどカテゴリーはまだよ、てのが良くわかります。ちゅうことはですよ、<br />
<pre><code>［動物］サブメニューの URL：http://example.com/wp-admin/my-edit-categories.php?taxonomy=animal</code></pre>
<p>とすれば良さそうですね。categories.php をコピって edit-tags.php を真似れば OK な気がします。できたファイルは my-edit-categories.php と名付けて wp-admin フォルダに放り込みましょう。おぉ、コア開発な気分。<br />
で、このようなオリジナルなリンクを持つサブメニューを作る方法が<a href="#admin-menu">先のコード</a>です。［カテゴリー］サブメニューは <code>$submenu['edit.php'][50]</code> に入ってるのでそれより下に表示させるために 55 番とかに入れちゃいます。詳細は、wp-admin/menu.php 46行目辺りをご覧いただくときっとなるほど納得です。</p>
<h4>my-edit-categories.php を作る</h4>
<p>今回は異様に長い内容になるので頑張ってついてくるように。ちなみにこのような不毛な作業を<a href="http://ja.wikipedia.org/wiki/%E8%BB%8A%E8%BC%AA%E3%81%AE%E5%86%8D%E7%99%BA%E6%98%8E" title="Wikipedia">車輪の再発明</a>と言いますが、コア開発気分を味わうのが目的なので心配無用です。俺にもできそう、と思った方は WordPress の発展に深いところで貢献していきましょう。キミ達がコア開発メンバーとして名を連ねるのが先生の夢です。私にもできそうだわ！と思った方は kz にコンタクトしましょう。キミ達をはべらせるのが俺様の夢なのさ。</p>
<p>wp-admin/my-edit-categories.php　（categories.php との差分のみ）</p>
<pre><code>タクソノミー対応
- wp_reset_vars( array('action', 'cat') );
+ global $action, $cat, $cat_ID, $taxonomy; 
+ wp_reset_vars( array('action', 'cat', 'cat_ID', 'taxonomy', 'page') );
+
+ if ( empty($taxonomy) ){
+  if(isset($_POST['taxonomy']))
+    $taxonomy = $_POST['taxonomy'];
+  else
+    $taxonomy = 'category';
+ }
+
+ if ( !is_taxonomy($taxonomy) )
+   wp_die(__('Invalid taxonomy'));

タクソノミー対応のカテゴリー追加
- if ( wp_insert_category($_POST) )
-   wp_safe_redirect( add_query_arg( 'message', 1, wp_get_referer() ) . '#addcat' );
- else
-   wp_safe_redirect( add_query_arg( 'message', 4, wp_get_referer() ) . '#addcat' );
+ $ret = my_insert_category($_POST);
+ if ( $ret &#038;& !is_wp_error( $ret ) ) {
+   wp_redirect("my-edit-categories.php?taxonomy=$taxonomy&#038;message=1#addcat");
+ } else {
+   wp_redirect("my-edit-categories.php?taxonomy=$taxonomy&#038;message=4#addcat");
+ }

- wp_redirect('categories.php');
+ wp_redirect("my-edit-categories.php?taxonomy=$taxonomy");

タクソノミー対応のカテゴリー削除
- wp_delete_category($cat_ID);
- wp_safe_redirect( add_query_arg( 'message', 2, wp_get_referer() ) );
+ wp_delete_term($cat_ID, $taxonomy);
+	
+ $location = 'my-edit-categories.php';
+ if ( $referer = wp_get_referer() ) {
+   if ( false !== strpos($referer, 'my-edit-categories.php'))
+     $location = $referer;
+ }
+
+ $location = add_query_arg('message', 2, $location);
+ wp_redirect($location);

タクソノミー対応のカテゴリー削除
- wp_delete_category($cat_ID);
+ wp_delete_term($cat_ID, $taxonomy);
	
- wp_safe_redirect( wp_get_referer() );
+ $location = 'my-edit-categories.php';
+ if ( $referer = wp_get_referer() ) {
+   if ( false !== strpos($referer, 'my-edit-categories.php') )
+     	$location = $referer;
+ }
+
+ $location = add_query_arg('message', 6, $location);
+ wp_redirect($location);

タクソノミー対応の「カテゴリーの編集」フォーム
- $category = get_category_to_edit($cat_ID);
- include('edit-category-form.php');
+ $category = get_term( $cat_ID, $taxonomy, OBJECT, 'edit' );
+ if (! is_wp_error( $category ) )
+    _make_cat_compat( $category );
+ include('my-edit-category-form.php');
 
タクソノミー対応のカテゴリー更新
- if ( wp_update_category($_POST) )
+ $ret = my_update_category($_POST);
+ if ( $ret &#038;& !is_wp_error( $ret ) )

ajax 関連スクリプト無し
- wp_enqueue_script('admin-categories');
- if ( current_user_can('manage_categories') )
-   wp_enqueue_script('inline-edit-tax');

メッセージ追加
+ $messages[6] = __('Categories deleted.');

フォームに追加
+ &lt;input type="hidden" name="taxonomy" value="&lt;?php echo esc_attr($taxonomy); ?&gt;" /&gt;

- $num_cats = wp_count_terms('category');
+ $num_cats = wp_count_terms($taxonomy);

タクソノミー対応のカテゴリー一覧表示
- cat_rows(0, 0, 0, $pagenum, $cats_per_page);
+ my_cat_rows(0, 0, 0, $pagenum, $cats_per_page, $taxonomy);

タクソノミー対応のフォーム
- &lt;form name="addcat" id="addcat" method="post" action="categories.php" class="add:the-list: validate"&gt;
+ &lt;form name="addcat" id="addcat" method="post" action="my-edit-categories.php" class="add:the-list: validate"&gt;

タクソノミー対応の「親カテゴリー」ドロップダウン
- wp_dropdown_categories(array('hide_empty' =&gt; 0, 'name' =&gt; 'category_parent', 'orderby' =&gt; 'name', 
  'selected' =&gt; $category-&gt;parent, 'hierarchical' =&gt; true, 'show_option_none' =&gt; __('None'))); 
+ wp_dropdown_categories(array('taxonomy' =&gt; $taxonomy, 'hide_empty' =&gt; 0, 'name' =&gt; 'category_parent', 
  'orderby' =&gt; 'name', 'selected' =&gt; $category-&gt;parent, 'hierarchical' =&gt; true, 'show_option_none' =&gt; __('None'))); 

ajax 編集は無し
- inline_edit_term_row('categories');</code></pre>
<p>見難い。なお、ajax 関連処理はヤリ始めるとさらにオオゴトになるので今回は未対応です。</p>
<p>
<br />
<br />
あ、途中で公開してしもた。続きは明朝！
<br />
<br />
</p>
<p class="append">ここ以降はうっかり公開した後に追記されたものです。見るなって言ったのにここまで見ちゃってしまってた人は改めて始めから読み直しましょう。新たな気づきがあるかもしれません。隠れキャラとか。</p>
<h4 id="tuduki">各種カテゴリー関連ファンクションをタクソノミー対応にする</h4>
<p>続きは明朝（ミンチョウ）ってなんだよフォントかよ serif なのかよ。うっかり公開は気にせずガンガン行くぜ！では管理画面の完成イメージをどうぞ。<a href="http://wpxtreme.jp/cms/wp-content/uploads/2010/03/taxonomy-31.jpg"><img src="http://wpxtreme.jp/cms/wp-content/uploads/2010/03/taxonomy-31-620x316.jpg" alt="階層有りタクソノミーの管理画面" title="taxonomy-3" width="620" height="316" class="alignnone size-large wp-image-249" /></a>
タームの一覧表示は cat_rows() / wp-admin/includes/template.php で処理されてるので下請けファンクションと共にタクソノミー対応します。赤丸部分のデカイ方はアイコンを CSS で指定します。ちっさい方は当該の li 要素に class="current" を付加するとメニューの左側が ＞ って凹みます。これは皆の宿題にしておくぜ。<br />
<br />
まずはフィルタで OK なものから。<br />
get_categories() / wp-includes/category.php </p>
<pre><code>function &#038;get_categories( $args = '' ) {
  $defaults = array( 'type' =&gt; 'category' );
  $args = wp_parse_args( $args, $defaults );

  $taxonomy = apply_filters( 'get_categories_taxonomy', 'category', $args );</code></pre>
<p>get_categories_taxonomy フィルタには何も add されてないので <code>$taxonomy = ''</code> になります。$taxonomy が設定されていないと、これ以降各種ファンクションはタクソノミーを 'category' として処理します。なので functions.php で get_categories_taxonomy にフィルタを与えてやりましょう。</p>
<pre><code>function my_get_categories_taxonomy($taxonomy, $args){
  return isset($args['taxonomy']) ? $args['taxonomy'] : $taxonomy;
}
add_filter( 'get_categories_taxonomy', 'my_get_categories_taxonomy', 10, 2 );</code></pre>
<p><code>get_categories(array('taxonomy' => 'taste'))</code> と呼べば OK です。<br />
<br />
はい、次。cat_rows() 達をタクソノミー対応にします。functions.php に書くんだけどもマイブームの差分コードでお楽しみください。見難い。</p>
<pre><code>cat_rows(), _cat_rows(), _cat_row() / wp-admin/includes/template.php

- function cat_rows( $parent = 0, $level = 0, $categories = 0, $page = 1, $per_page = 20 ) {
+ function my_cat_rows( $parent = 0, $level = 0, $categories = 0, $page = 1, $per_page = 20, $taxonomy = 'category' ) {

- $args = array('hide_empty' =&gt; 0);
+ $args = array('hide_empty' =$gt; 0, 'taxonomy' =$gt; $taxonomy);

- $children = _get_term_hierarchy('category');
+ $children = _get_term_hierarchy($taxonomy);

- _cat_rows( $parent, $level, $categories, $children, $page, $per_page, $count );
+ _my_cat_rows( $parent, $level, $categories, $children, $page, $per_page, $count, $taxonomy );


- function _cat_rows( $parent = 0, $level = 0, $categories, &#038;$children, $page = 1, $per_page = 20, &#038;$count ) {
+ function _my_cat_rows( $parent = 0, $level = 0, $categories, &#038;$children, $page = 1, $per_page = 20, &#038;$count, $taxonomy ) {

- echo "\t" . _cat_row( $my_parent, $level - $num_parents );
+ echo "\t" . _my_cat_row( $my_parent, $level - $num_parents, $taxonomy );

- echo "\t" . _cat_row( $category, $level );
+ echo "\t" . _my_cat_row( $category, $level, $taxonomy );

- _cat_rows( $category-&gt;term_id, $level + 1, $categories, $children, $page, $per_page, $count );
+ _my_cat_rows( $category-&gt;term_id, $level + 1, $categories, $children, $page, $per_page, $count, $taxonomy );


- function _cat_row( $category, $level, $name_override = false ) {
+ function _my_cat_row( $category, $level, $taxonomy, $name_override = false ) {

- $category = get_category( $category, OBJECT, 'display' );
+ $category = get_term( $category, $taxonomy, OBJECT, 'display' );
+ if (! is_wp_error( $category ) )
+   _make_cat_compat( $category );

- $edit_link = "categories.php?action=edit&amp;cat_ID=$category-&gt;term_id";
+ $edit_link = "my-edit-categories.php?action=edit&amp;cat_ID=$category-&gt;term_id&amp;taxonomy=$taxonomy";

- $actions['inline hide-if-no-js'] = '&lt;a href="#" class="editinline"&gt;' . __('Quick&nbsp;Edit') . '&lt;a&gt;';

- $actions['delete'] = "&lt;a class='delete:the-list:cat-$category-&gt;term_id submitdelete' href='" . 
   wp_nonce_url("categories.php?action=delete&amp;cat_ID=$category-&gt;term_id", 'delete-category_' . $category-&gt;term_id) . "'&gt;" . __('Delete') . "&lt;/a&gt;";
+ $actions['delete'] = "&lt;a class='delete:the-list:cat-$category-&gt;term_id submitdelete' href='" . 
  wp_nonce_url("my-edit-categories.php?action=delete&amp;cat_ID=$category-&gt;term_id&amp;taxonomy=$taxonomy", 'delete-category_' .
  $category-&gt;term_id) . "'&gt;" . __('Delete') . "</a>";

- $posts_count = ( $category-&gt;count &gt; 0 ) ? "&lt;a href='edit.php?cat=$category-&gt;term_id'&gt;$category-&gt;count</a>" : $category-&gt;count;
+ $posts_count = ( $category-&gt;count &gt; 0 ) ? "&lt;a href='edit.php?$taxonomy=$category-&gt;slug'&gt;$category-&gt;count&lt;/a&gt;" : $category-&gt;count;</code></pre>
<p>次は、タームの追加／更新ファンクション。これもアレンジしたファンクションは functions.php に書きます。</p>
<pre><code>元ファンクション wp_insert_category() / wp-admin/includes/taxonomy.php

- function wp_insert_category($catarr, $wp_error = false) {
- $cat_defaults = array('cat_ID' =&gt; 0, 'cat_name' =&gt; '', 'category_description' =&gt; '', 'category_nicename' =&gt; '', 'category_parent' =&gt; '');
+ function my_insert_category($catarr, $wp_error = false) {
+ $cat_defaults = array('cat_ID' =&gt; 0, 'taxonomy' =&gt; 'category', 'cat_name' =&gt; '', 'category_description' =&gt; '', 'category_nicename' =&gt; '',
  'category_parent' =&gt; '');

- if ( empty($parent) || !category_exists( $parent ) || ($cat_ID &#038;& cat_is_ancestor_of($cat_ID, $parent) ) )
+ $id = is_term($parent, $taxonomy, 0);
+ if ( is_array($id) )
+   $id = $id['term_id'];
+ if ( empty($parent) || !$id || ($cat_ID &#038;& cat_is_ancestor_of($cat_ID, $parent) ) )

- $cat_ID = wp_update_term($cat_ID, 'category', $args);
+ $cat_ID = wp_update_term($cat_ID, $taxonomy, $args);

- $cat_ID = wp_insert_term($cat_name, 'category', $args);
+ $cat_ID = wp_insert_term($cat_name, $taxonomy, $args);


元ファンクション wp_update_category() / wp-admin/includes/taxonomy.php

- function wp_update_category($catarr) {
+ function my_update_category($catarr) {

- $category = get_category($cat_ID, ARRAY_A);
+ $category = get_term( $cat_ID, $catarr['taxonomy'], ARRAY_A, 'raw' );
+ if (! is_wp_error( $category ) )
+   _make_cat_compat( $category );

- return wp_insert_category($catarr);
+ return my_insert_category($catarr);</code></pre>
<p>最後にデカイ赤丸部分のアイコンを表示させましょう。</p>
<pre id="my-head"><code>function my_head(){
  echo '
&lt;style type="text/css"&gt;
#icon-my-edit-categories{background:url(/wp-admin/images/icons32.png) no-repeat -552px -5px;}
&lt;/style&gt;';
}
add_action('admin_head', 'my_head');</code></pre>
<p>はい、以上で階層有りタクソノミーの管理画面が完成です。おつかれさまでした。</p>
<h4>「階層有りタクソノミーの編集」画面</h4>
<p>ところが UI の作成はまだまだ終わらんのだよ。ヤリ始めたことをちょっと公開してないか？そう、うっかり［変更をプレビュー］と［更新］を押し間違えるアレだよ。投稿したよとつぶやいたのを無かったことにするプラグインはありませんか？<br />
<br />
ターム一覧で、ターム名または［編集］のリンクをクリックすると表示されるこの画面を作ります。<a href="http://wpxtreme.jp/cms/wp-content/uploads/2010/03/taxonomy-4.jpg"><img src="http://wpxtreme.jp/cms/wp-content/uploads/2010/03/taxonomy-4-620x241.jpg" alt="「動物」タクソノミーの編集" title="taxonomy-4" width="620" height="241" class="alignnone size-large wp-image-247" /></a>この画面は my-edit-categories.php?action=edit&amp;〜 のときにインクルードされる my-edit-category-form.php で出力します。これはもちろん edit-category-form.php をコピってタクソノミー対応したファイルです。これも wp-admin に放り込んでやります。</p>
<pre><code>+ &lt;input type="hidden" name="taxonomy" value="&lt;?php echo esc_attr($taxonomy) ?&gt;" /&gt;

タイトルの「カテゴリーの編集」をタクソノミー名に変更するなら
- &lt;h2&gt;&lt;?php _e('Edit Category'); ?&gt;&lt;/h2&gt;
+ &lt;h2&gt;&lt;?php echo get_taxonomy($taxonomy)-&gt;label; ?&gt;&lt;/h2&gt;
</code></pre>
<p>えええー！こんだけー？はい、こんだけです。なんという富豪プログラミング。</p>
<h4>投稿画面のメタボックス</h4>
<p>階層無しタクソノミーは何もしなくても表示されてるのがうらめしい完成イメージです。<a href="http://wpxtreme.jp/cms/wp-content/uploads/2010/03/taxonomy-5.jpg"><img src="http://wpxtreme.jp/cms/wp-content/uploads/2010/03/taxonomy-5-620x378.jpg" alt="" title="taxonomy-5" width="620" height="378" class="alignnone size-large wp-image-248" /></a>早速メタボックスを作りましょう。なお、［すべてのカテゴリー］［よく使われるもの］［＋新規カテゴリー追加］に相当する UI は省略します。javascript がらみなのでね許しておくれよ。では、先ほど追加した <a href="#admin-menu">my_admin_menu() / functions.php</a> 内に以下を追加します。</p>
<pre><code>add_meta_box('taxonomydiv-animal', '動物', 'my_animal_meta_box', 'post', 'side', 'low');</code></pre>
<p>taxonomydiv-animal はメタボックスの id です。テキトウにつけます。投稿画面の右側の下の方に '動物' というタイトルのメタボックスを my_animal_meta_box() ファンクションを使って出力するよ、という意味です。<br />
その my_animal_meta_box() と下請けファンクションなども同様に functions.php に追加します。メンドクサくなったので差分はやめるよ。</p>
<pre><code>function my_animal_meta_box($post, $box){
?&gt;
&lt;div class="tabs-panel"&gt;
  &lt;ul class="list:category categorychecklist form-no-clear"&gt;
    &lt;?php my_category_checklist($post-&gt;ID, array('taxonomy' =&gt; 'animal', 'checked_ontop' =&gt; false)); ?>
  &lt;/ul&gt;
&lt;/div&gt;
&lt;?php
}

function my_category_checklist($post_id = 0, $args = array()) {
  $defaults = array(
    'taxonomy' =&gt; 'category',
    'checked_ontop' =&gt; true
  );
  extract( wp_parse_args($args, $defaults), EXTR_SKIP );
   
  $walker = new Walker_Taxonomy_Checklist;

  $args['selected_cats'] = wp_get_object_terms($post_id, $taxonomy, array_merge($args, array('fields' =&gt; 'ids')));
  $args['popular_cats'] = get_terms( $taxonomy, array( 
    'fields' =&gt; 'ids', 'orderby' =&gt; 'count', 'order' =&gt; 'DESC', 'number' =&gt; 10, 'hierarchical' =&gt; false ) );
  $categories = (array) get_terms($taxonomy, array('get' =&gt; 'all'));
	  
  if ( $checked_ontop ) {
    $checked_categories = array();
    $keys = array_keys( $categories );
  
    foreach( $keys as $k ) {
      if ( in_array( $categories[$k]-&gt;term_id, $args['selected_cats'] ) ) {
        $checked_categories[] = $categories[$k];
        unset( $categories[$k] );
      }
    }
   
    echo call_user_func_array(array(&#038;$walker, 'walk'), array($checked_categories, 0, $args));
  }
  echo call_user_func_array(array(&#038;$walker, 'walk'), array($categories, 0, $args));
}

require_once(ABSPATH . '/wp-admin/includes/template.php');
class Walker_Taxonomy_Checklist extends Walker_Category_Checklist {
  function start_el(&#038;$output, $category, $depth, $args) {
    extract($args);

    $class = in_array( $category-&gt;term_id, $popular_cats ) ? ' class="popular-category"' : '';
    $output .= "\n&lt;li id='" . $args['taxonomy'] . "-$category-&gt;term_id'$class&gt;" . '&lt;label class="selectit"&gt;&lt;input value="' .
      $category-&gt;term_id . '" type="checkbox" name="post_' . $args['taxonomy'] . '[]" id="in-' . $args['taxonomy'] . '-' . 
      $category-&gt;term_id . '"' . (in_array( $category-&gt;term_id, $selected_cats ) ? ' checked="checked"' : "" ) . '/&gt; ' .
      esc_html( apply_filters('the_category', $category-&gt;name )) . '</label>';
  }
}

function my_save_post($post_id){
  if(defined('DOING_AUTOSAVE') &#038;& DOING_AUTOSAVE) 
    return $post_id;

  if('post' == $_POST['post_type']){
    if(!current_user_can('edit_post', $post_id))
      return $post_id;
  }else{
    return $post_id;
  }

  $post_animal = $_POST['post_animal'];
  if ( empty($post_animal) || 0 == count($post_animal) || !is_array($post_animal) )
    return $post_id;
	
  $post_animal = array_map('intval', $post_animal);
  $post_animal = array_unique($post_animal);
  wp_set_object_terms($post_id, $post_animal, 'animal');
}
add_action('save_post', 'my_save_post');</code></pre>
<p>my_category_checklist() の引数に <code>'checked_ontop' =&gt; true</code> を与えるとチェックの入っているタームが先（上）に表示されます。親子関係のタームをインデント表示するには先に作成した <a href="#my-head">my_head() / functions.php</a> で以下のスタイルを追加します。</p>
<pre><code>ul.categorychecklist ul{margin-left:18px;}</code></pre>
<p>こんだけやればカスタムタクソノミーはお腹いっぱいですね。ボクはもう今年は要らないです。皆さんは WordPress 3.0 を心待ちにしていてください。きっと edit-tags.php，edit-categories.php なんてのは作らずに edit-taxonomies.php とかに一本化していることでしょう。各種ファンクションも tag，category なんて名前はもう使わずに taxonomy で統一してますね きっと。さすが。<br />
<br />
そして！なんと今回の内容をダウンロードできるようにしましたので、皆様もぜひ車輪作りにチャレンジしてください。あなたのコードは全部持っておきたいの、というえびちゃんもご遠慮なくダウンロードしてくださいね。<br />
以上、今回の投稿は最近明朝づいている kz からでした。</p>
<h5>ダウンロード</h5>
<li><a href="http://wpxtreme.jp/cms/wp-content/plugins/download-monitor/download.php?id=3" title="">taxonomy-with-wordpress-2.9.2-or-lower&nbsp;&nbsp;version: 1.0</a> (.zip&nbsp;&nbsp;8.92 KB)</li>
<p>含まれるファイル：</p>
<ul>
<li>functions.php</li>
<li>my-edit-category.php</li>
<li>my-edit-category-form.php</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://wpxtreme.jp/how-to-use-cusom-taxonomy-with-wordpress-versions-lower-than-3/feed</wfw:commentRss>
		<slash:comments>21</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://wpxtreme.jp/how-to-use-cusom-taxonomy-with-wordpress-versions-lower-than-3" />
	</item>
		<item>
		<title>ボツデザインシリーズ #3</title>
		<link>http://wpxtreme.jp/unreleased-webdesign-3</link>
		<comments>http://wpxtreme.jp/unreleased-webdesign-3#comments</comments>
		<pubDate>Tue, 02 Mar 2010 17:24:32 +0000</pubDate>
		<dc:creator>kz</dc:creator>
				<category><![CDATA[PORTFOLIO]]></category>
		<category><![CDATA[photoshop]]></category>
		<category><![CDATA[rejected]]></category>
		<category><![CDATA[webdesign]]></category>

		<guid isPermaLink="false">http://wpxtreme.jp/?p=237</guid>
		<description><![CDATA[予想だにしない展開により、公開までたどりつけなかったデザインを紹介するこのコーナー。第3回は2週間ぶりの更新でお届けします。kz の安否を気遣うお便りの数々は一切届いておりません。未送信になっていないか今一度あなたのメールボックスのご確認をお願いいたします。ちなみに wpxtreme が更新されないと寂しくて眠れないの。というえびちゃんからのラブリーなメッセージも届いていません。きっと年度末だからすごく忙しいんでしょう。wpxtreme は働く女性を応援します。<br />
今回は、某語学学校関係のサイトリニューアルです。例によってロゴや文言はテキトウに差し替えております。意味不明なのがあっても気にしないでちょうだい。多言語対応、時間割管理など盛りだくさんな内容で公開寸前まで行きましたが、残念ながら初のボツ案件となりました。 <a class="excerpt-more" href="http://wpxtreme.jp/unreleased-webdesign-3">Continue Reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<p>「ホーム」ページ<a href="http://wpxtreme.jp/cms/wp-content/uploads/2010/03/ecn-1.jpg"><img src="http://wpxtreme.jp/cms/wp-content/uploads/2010/03/ecn-1-620x926.jpg" alt="" title="ホームページ" width="620" height="926" class="alignnone size-large wp-image-239" /></a><br />
その他ページ<a href="http://wpxtreme.jp/cms/wp-content/uploads/2010/03/ecn-2.jpg"><img src="http://wpxtreme.jp/cms/wp-content/uploads/2010/03/ecn-2-620x772.jpg" alt="" title="その他のページ" width="620" height="772" class="alignnone size-large wp-image-240" /></a></p>
<h4>制作の様子</h4>
<p>現在のホームページは気に入っているが活用されておらず、今風のテクノロジーで色々やってみたい、とのリニューアル案件。web のお仕事を始めて 2ヶ月頃でした。<a href="http://wordpress.org/extend/plugins/qtranslate/">qTranslate</a> を導入して8ヶ国語対応，メルマガ配信，リアルタイムな時間割表，講座スケジュール表，javascript による Ajax でインタラクティブな英語力チェックなどなど非常に意欲的な内容で制作しました。<br />
基本的にすべて社長の判断、な組織でしかもその社長がしょっちゅう出張のため、こちらからお願いして web 担当者を選任していただきました。</p>
<h4>ボツの理由</h4>
<p>web 担当者言うても「社長に訊かないとわからないので」で、ホームページに掲載する写真のご提供をお願いすると3週間、社長との打ち合わせをセッティングしていただくのに2週間。なにかとやたらと時間がかかって、デザイン終わって制作に入ってほぼ公開できる状態になったところでやっと聞けた言葉が「今のサイト気に入ってるんだよね」。<br />
えぇ、確かに気に入ってるとは伺っておりましたけどが。<br />
90年代的なまったりフラッシュのスプラッシュ。IE でしか動作しない javascript。ほぼ VGA（640×480）に押し込められたページごとにバラバラなレイアウト。統一感の無いボタン。画面が小さい頃は大きく見えたのかなの極小フォント。テキスト無しで全面に画像貼り。<code>&lt;head&gt;</code> には <code>&lt;title&gt;</code> と <code>&lt;meta http-equiv="Content-Type" content="text/html;"&gt;</code> と javascript とスタイルのみ。<code>&lt;body&gt;&lt;table&gt;&lt;table&gt;&lt;table&gt;&lt;/table&gt;&lt;/table&gt;&lt;/table&gt;&lt;/body&gt;</code> なマークアップ。<br />
なんだかとっても poetry。そうですかお気に入りですかー。まぁ、アレですね、今のがお気に入りならそもそもリニューアルの必要ないですよね。サヨナラ。<br />
こういう場合はこのデザインではダメだよ、と早めにお知らせいただくと助かります。「あ、うんうんこんな感じで進めて」だと OK や思うやないですか。あと「今のホームページより文字が小さい」とかはもう「ええええぇー？！」なんでご勘弁願います。マジで。</p>
<p>なんやねんこれイライラするわなスプラッシュページがあったりですとか、ボタンが小さくてクリックしにくいやんけですとか、スカスカで中身あらへんやんですとか、デザイン，コンテンツ，SEO と様々な観点から残念な20世紀サイトを見る度に、なんでこれこのままほっといてんのやろと思います。<br />
なぁ、イカしたサイトにリニューアルしようぜ。俺に任せろって。マジで。</p>]]></content:encoded>
			<wfw:commentRss>http://wpxtreme.jp/unreleased-webdesign-3/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://wpxtreme.jp/unreleased-webdesign-3" />
	</item>
	</channel>
</rss>
