<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title>45式</title>
	<link rel="alternate" type="text/html" href="http://www.45shiki.net/" />
	<link rel="self" type="application/atom+xml" href="http://www.45shiki.net/atom.xml" />
	<id>tag:www.45shiki.net,2005-01-23://1</id>
	<updated>2010-02-09T14:57:40Z</updated>
	<subtitle>45式は「無理せず頑張る」がモットーの渡辺四ん五(4n5)がお送りします。</subtitle>
	<generator uri="http://www.sixapart.com/movabletype/" version="4.261">Movable Type Pro</generator>

	<entry>
		<title>WordPressで無記名コメントの投稿者名を匿名から変更する</title>
		<link rel="alternate" type="text/html" href="http://www.45shiki.net/blog/2010/02/b000936.htm" />
		<id>tag:www.45shiki.net,2010:/blog//2.936</id>
		<published>2010-02-09T14:47:03Z</published>
		<updated>2010-02-09T14:57:40Z</updated>
		<summary>WordPressでは無記名のまま投稿されたコメントの投稿者は「匿名」と表示されます。
そのように表示される仕組みと、任意の名前に表示を変える改造の方法を紹介します。</summary>
		<author>
			<name>4n5</name>
			<uri>http://www.45shiki.net/</uri>
		</author>
	
			<category term="WordPress" scheme="http://www.sixapart.com/ns/types#category" />
	
	
		<content type="html" xml:lang="ja" xml:base="http://www.45shiki.net/blog/">
<![CDATA[
<h2>コメントの投稿者名が<em>匿名</em>になる仕組み</h2>

<p>WordPressでは無記名のまま投稿されたコメントの投稿者は<em>匿名</em>と表示されます。<br />
ただしそれはWordPressを日本語設定で使っている場合です。<br />
無記名コメントの投稿者名は/wp-includes/comment-template.phpでコントロールされています。</p>

<pre title="comment-template.phpの一部"><code>/**
 * Retrieve the author of the current comment.
 *
 * If the comment has an empty comment_author field, then 'Anonymous' person is
 * assumed.
 *
 * @since 1.5.0
 * @uses apply_filters() Calls 'get_comment_author' hook on the comment author
 *
 * @return string The comment author
 */
function get_comment_author() {
&#9;global $comment;
&#9;if ( empty($comment->comment_author) ) {
&#9;&#9;if (!empty($comment->user_id)){
&#9;&#9;&#9;$user=get_userdata($comment->user_id);
&#9;&#9;&#9;$author=$user->user_login;
&#9;&#9;} else {
&#9;&#9;&#9;$author = <strong>__('Anonymous')</strong>;
&#9;&#9;}
&#9;} else {
&#9;&#9;$author = $comment->comment_author;
&#9;}
&#9;return apply_filters('get_comment_author', $author);
}</code></pre>

<p><code>$author = __('Anonymous');</code>という一文が、無記名時の投稿者名を設定しています。<br />
<em>匿名</em>ではなく、<em>Anonymous</em>です。<br />
この<em>Anonymous</em>が言語設定に基づいて翻訳され、<em>匿名</em>と表示されているのです。</p>

<h2><em>匿名</em>から変更する方法</h2>

<p>上記のソースを書き換える事で、無記名投稿者を<em>匿名</em>から任意の名前に変更する事ができますが、それではWordPressをバージョンアップするたびに変更が必要になってしまい、管理の手間が必要で不便です。</p>

<p>そこで上記のソースを参考に、現在使用しているテーマを改造して投稿者名を変更しようと思います。<br />
以下のソースをテンプレート<em>テーマのための関数 (functions.php)</em>に追加して下さい。</p>

<pre title="無記名コメントの投稿者名を「通りすがりの御面ライダー」と表示する方法"><code>/**
 * 無記名のコメント投稿者名を変更する
 */
function rename_anonymous() {
&#9;global $comment;
&#9;if( empty( $comment->comment_author ) ) {
&#9;&#9;if( !empty( $comment->user_id ) ) {
&#9;&#9;&#9;$user = get_userdata( $comment->user_id );
&#9;&#9;&#9;$author = $user->user_login;
&#9;&#9;} else {
&#9;&#9;&#9;$author = '<strong>通りすがりの御面ライダー</strong>';
&#9;&#9;}
&#9;} else {
&#9;&#9;$author = $comment->comment_author;
&#9;}
&#9;return $author;
}
add_filter( 'get_comment_author', 'rename_anonymous' );</code></pre>

<p>例として<em>通りすがりの御面ライダー</em>に変更してみました。</p>

<p>ざっくりした方法なので、ブログの表示だけでなく、管理画面での表示も変更されます。</p>

]]>
		</content>
	</entry>

	<entry>
		<title>条件分岐タグによる真偽判定の結果一覧表</title>
		<link rel="alternate" type="text/html" href="http://www.45shiki.net/blog/2010/02/b000935.htm" />
		<id>tag:www.45shiki.net,2010:/blog//2.935</id>
		<published>2010-02-01T10:28:02Z</published>
		<updated>2010-02-01T10:31:43Z</updated>
		<summary>MovableTypeの条件分岐タグ、MTIf、MTIfNonEmpty、MTIfNonZero、MTUnlessによる値の真偽判定を一覧表にまとめて見ました。
その結果、MTIfNonZeroタグに関するある事実が判明しました。</summary>
		<author>
			<name>4n5</name>
			<uri>http://www.45shiki.net/</uri>
		</author>
	
			<category term="Movable Type" scheme="http://www.sixapart.com/ns/types#category" />
	
	
		<content type="html" xml:lang="ja" xml:base="http://www.45shiki.net/blog/">
<![CDATA[
<p><a href="http://www.koikikukan.com/archives/2009/06/18-015555.php" title="小粋空間: Movable Type テンプレートタグの簡略化まとめ" class="external">小粋空間さんの記事</a>で<q cite="http://www.koikikukan.com/archives/2009/06/18-015555.php" title="小粋空間: Movable Type テンプレートタグの簡略化まとめ">MTIfNonEmptyタグは、「MTUnlessタグ+tagモディファイア」で置き換えられます</q>という文章を見つけました。（現在は修正されています）</p>

<p>その間違いを指摘した後しばらくして、「もしも違ったらどうしよう」と不安になったので検証、ついでに一覧表を作ってみました。</p>

<h2>条件分岐タグ</h2>

<p>検証を行ったのは数ある<abbr title="Movable Type">MT</abbr>の条件分岐タグから、汎用的に使える次の四つです。</p>

<ul>
<li><a href="http://www.movabletype.jp/documentation/appendices/tags/if.html" title="MTIf | テンプレートタグリファレンス" class="external">MTIf</a></li>
<li><a href="http://www.movabletype.jp/documentation/appendices/tags/ifnonempty.html" title="MTIfNonEmpty | テンプレートタグリファレンス" class="external">MTIfNonEmpty</a></li>
<li><a href="http://www.movabletype.jp/documentation/appendices/tags/ifnonzero.html" title="MTIfNonZero | テンプレートタグリファレンス" class="external">MTIfNonZero</a></li>
<li><a href="http://www.movabletype.jp/documentation/appendices/tags/unless.html" title="MTUnless | テンプレートタグリファレンス" class="external">MTUnless</a></li>
</ul>

<p>表にまとめたのは、タグあるいは変数の値の有無を判定した場合の真偽結果です。<br />
変数のテストはMovableType4.261で次のソースを実行して行いました。<br />
<a href="http://www.movabletype.jp/" class="external">MovableType.jp</a>に載っていないだけで、<code>MTIfNonEmpty</code>と<code>MTIfNonZero</code>タグは変数に対する判定も行えます。</p>

<pre title="変数のテスト"><code>&lt;MTSetHashVar name="hoge"&gt;
&#9;&lt;$MTSetVar name="empty"  value=""$&gt;
&#9;&lt;$MTSetVar name="minus"  value="-1"$&gt;
&#9;&lt;$MTSetVar name="zero"   value="0"$&gt;
&#9;&lt;$MTSetVar name="plus"   value="1"$&gt;
&#9;&lt;$MTSetVar name="string" value="string"$&gt;
&lt;/MTSetHashVar&gt;

&lt;MTLoop name="hoge" sort_by="value"&gt;
変数の値    ：&lt;$MTGetVar    name="__value__"$&gt;
MTIf        ：&lt;MTIf         name="__value__"&gt;○&lt;MTElse&gt;×&lt;/MTIf&gt;
MTIfNonEmpty：&lt;MTIfNonEmpty name="__value__"&gt;○&lt;MTElse&gt;×&lt;/MTIfNonEmpty&gt;
MTIfNonZero ：&lt;MTIfNonZero  name="__value__"&gt;○&lt;MTElse&gt;×&lt;/MTIfNonZero&gt;
MTUnless    ：&lt;MTUnless     name="__value__"&gt;○&lt;MTElse&gt;×&lt;/MTUnless&gt;
&lt;/MTLoop&gt;</code></pre>

<p>値の有無だけを判定するので<code>eq</code>をなどの比較演算については扱いません。</p>

<p>タグのテストは色々な方法があります。<br />
ただ、負の数字を格納したタグが見つかりませんでしたので、入力欄に-1を記述する事でタグの値を用意しました。</p>

<pre title="変数のテスト"><code>タグの値    ：&lt;$MTBlogName$&gt;
MTIf        ：&lt;MTIf         tag="BlogName"&gt;○&lt;MTElse&gt;×&lt;/MTIf&gt;
MTIfNonEmpty：&lt;MTIfNonEmpty tag="BlogName"&gt;○&lt;MTElse&gt;×&lt;/MTIfNonEmpty&gt;
MTIfNonZero ：&lt;MTIfNonZero  tag="BlogName"&gt;○&lt;MTElse&gt;×&lt;/MTIfNonZero&gt;
MTUnless    ：&lt;MTUnless     tag="BlogName"&gt;○&lt;MTElse&gt;×&lt;/MTUnless&gt;</code></pre>

<h2>真偽判定の結果一覧表</h2>

<p>Trueが真判定、Falseが偽判定になります。<br />
タグの場合も変数の場合も結果が同じだった為、区別せずにまとめました。</p>

<table summary="条件分岐タグによる値ごとの真偽判定をまとめた一覧表です" id="conditional-tags">
	<caption>条件分岐タグの真偽判定</caption>
	<colgroup class="mt-tag"></colgroup>
	<colgroup class="empty"></colgroup>
	<colgroup class="minus"></colgroup>
	<colgroup class="zero"></colgroup>
	<colgroup class="plus"></colgroup>
	<colgroup class="string"></colgroup>
	<tr>
		<th rowspan="2">MTタグ</th>
		<th colspan="5">タグ/変数の値</th>
	</tr>
	<tr>
		<th>空</th>
		<th>-1</th>
		<th>0</th>
		<th>1</th>
		<th>文字列</th>
	</tr>
	<tr>
		<th><code>MTUnless</code></th>
		<td class="true">True</td>
		<td class="false">False</td>
		<td class="true">True</td>
		<td class="false">False</td>
		<td class="false">False</td>
	</tr>
	<tr>
		<th><code>MTIf</code></th>
		<td class="false">False</td>
		<td class="true">True</td>
		<td class="false">False</td>
		<td class="true">True</td>
		<td class="true">True</td>
	</tr>
	<tr>
		<th><code>MTIfNonEmpty</code></th>
		<td class="false">False</td>
		<td class="true">True</td>
		<td class="true">True</td>
		<td class="true">True</td>
		<td class="true">True</td>
	</tr>
	<tr>
		<th><code>MTIfNonZero</code></th>
		<td class="false">False</td>
		<td class="true">True</td>
		<td class="false">False</td>
		<td class="true">True</td>
		<td class="true">True</td>
	</tr>
</table>

<p>わかりやすくするため、<code>MTUnless</code>タグと<code>MTIf</code>タグを隣にしてみました。</p>

<p>注目して欲しいのは<code>MTIfNonZero</code>タグによる空判定の結果です。<br />
<code>MTIfNonEmpty</code>タグはその名の通り、空と空以外を区別します。<br />
ところが<code>MTIfNonZero</code>タグは<code>0</code>と<code>0</code>以外を区別、とはなりません。</p>

<h2><code>MTIfNonZero</code>タグは非推奨タグ</h2>

<p><code>MTIfNonZero</code>タグの判定結果についてSixApartへフィードバックを送った所、仕様だという返事を頂きました。</p>

<blockquote title="Re: MTIfNonZeroタグによる空の値に対する判定結果">

<p>ご報告いただいたMTIfNonZeroの動作は仕様となります。<br />
ご記述のようなご利用の際は、MTIfタグをご利用下さい。</p>

<p>どうぞよろしくお願いいたします。</p>

<p>-- <br />
Movable Type 品質保証チーム</p>

<blockquote title="MTIfNonZeroタグによる空の値に対する判定結果">

<p>MTIfNonZeroタグで値が空の変数を判定した場合、偽判定されます。<br />
MTIfNonEmptyタグでは値が"0"と""が区別される事ので、MTIfNonZeroタグも同様に逆の判定結果がでると思いました。</p>

<p>（中略）</p>

<p>これは不具合ではなく仕様なのでしょうか。</p>

</blockquote>
</blockquote>

<p><code>MTIfNonZero</code>タグの意義はどこに……えっ！　<a href="http://www.movabletype.jp/documentation/appendices/tags/ifnonzero.html" title="MTIfNonZero | テンプレートタグリファレンス" class="external">MovableType.jpのタグリファレンス</a>が更新されました。</p>

<blockquote cite="http://www.movabletype.jp/documentation/appendices/tags/ifnonzero.html" title="MTIfNonZero | テンプレートタグリファレンス">

<p>このタグは非推奨です。mt:If タグを利用してください。以下のように記載することで、同様の挙動となります。</p>

</blockquote>

<p>フィードバックから一日で更新とは仕事が早いですな。<br />
さらば<code>MTIfNonZero</code>タグ。<br />
<code>MTIfNonZero</code>タグから<code>MTIf</code>タグへの乗り換えはお早めに。</p>

]]>
		</content>
	</entry>

	<entry>
		<title>mixiの日記をWordPressへ移行する方法</title>
		<link rel="alternate" type="text/html" href="http://www.45shiki.net/blog/2010/01/b000934.htm" />
		<id>tag:www.45shiki.net,2010:/blog//2.934</id>
		<published>2010-01-31T14:50:10Z</published>
		<updated>2010-01-31T15:44:48Z</updated>
		<summary>mixiの日記をWordPressへ移行するにはbackup_mixiというツールでMT形式のファイルを出力する事によって、WordPressへのインポートを可能にします。</summary>
		<author>
			<name>4n5</name>
			<uri>http://www.45shiki.net/</uri>
		</author>
	
			<category term="WordPress" scheme="http://www.sixapart.com/ns/types#category" />
	
	
		<content type="html" xml:lang="ja" xml:base="http://www.45shiki.net/blog/">
<![CDATA[
<p>mixiの日記をWordPressへ移行する方法をメモしておきます。<br />
これは私が行った方法で、他の方法、もっと簡単な方法、については知りません。</p>

<h2>mixi_backupを用意</h2>

<p>まず、mixi_backupというツールを手に入れます。<br />
mixi_backupはmixiのデータをバックアップする非公式ツールで、<a href="http://u-go.to/milk/" title="＋＋Milk Cake＋＋【みるくけーき】" class="external">みるくけーき</a>から入手できます。</p>

<h2>mixi_backupでバックアップ</h2>

<p>使い方は『みるくけーき』を参照すれば分かりますが、WordPressへ移行するためにはMT形式ファイルを出力する必要があります。<br />
backup_mixi_config.txtへの設定で<code>option2</code>に<code>1</code>を設定するのを忘れないで下さい。</p>

<pre><code>mail@exmaple.com,
password,
proxy,
wait,2.1
force_dl_count,5
del,
option1,0
option2,<strong>1</strong>
option3,0
option4,0
option5,0
option6,0
option7,0</code></pre>

<p>準備ができたらbackup_mixiを使って、mixiのデータをバックアップします。<br />
for_mt.txtというファイルがMT形式のバックアップファイルです。</p>

<h2>バックアップデータを修正</h2>

<p>backup_mixiが最新版であっても、mixiの仕様変更によってバックアップが完全に行えない場合があります。<br />
私がバックアップした時では、一部の記事から絵文字の表示に使った<code>img</code>タグが抜けていました。<br />
数が少なかったので、diaryフォルダの中身と照らし合わせて修正しました。<br />
とはいえ、日記の量によっては全てをチェックする事は難しいかもしれません。</p>

<p>忘れてはいけないのが<code>br</code>タグです。<br />
<strong>WordPressの記事は改行が自動挿入される為、不要な&lt;br&gt;は取り除いておきましょう。</strong></p>

<p>移行先のWordPress環境にあわせて、<code>img</code>タグの<code>src</code>属性を先に修正しておくと後の作業が楽になるかもしれません。</p>

<p>コメント投稿者のアドレス設定などもご自由にどうぞ。</p>

<p>ファイルの形式が仕様に沿ってさええれば、修正は自在です。<br />
MovableTypeのインポートフォーマットは<a href="http://www.movabletype.jp/documentation/appendices/import-export-format.html" title="Movable Type のブログ記事インポートフォーマット | Movable Type 4 ドキュメント" class="external">MovableType.jp</a>で確認できます。</p>

<h2>WordPressでインポート</h2>

<p>ファイルのインポートはダッシュボードから<em>ツール</em>、<em>インポート</em>とメニューを進み、<em>Movable Type と TypePad</em>を選択します。</p>

<p>インポートでは記事の重複をチェックしてくれますので、失敗しても気にせず、何度でもやり直しちゃって下さい。</p>

<p>ひとまずこれで移行は終了です。<br />
日記中に画像や絵文字を挿入していた人は、その修正を行って下さい。</p>

<p>個別の修正ではなく、一括の修正を行いたい場合には<a href="http://urbangiraffe.com/plugins/search-regex/" title="Search Regex - WordPress search with regular expressions | Urban Giraffe" class="external">Search Regex</a>プラグインが有効です。</p>

]]>
		</content>
	</entry>

	<entry>
		<title>wp.Vicuna.excのコメント一覧の不具合</title>
		<link rel="alternate" type="text/html" href="http://www.45shiki.net/blog/2010/01/b000933.htm" />
		<id>tag:www.45shiki.net,2010:/blog//2.000933</id>
		<published>2010-01-23T14:36:16Z</published>
		<updated>2010-01-30T16:10:03Z</updated>
		<summary>wp.Vicuna Ext. Customのコメント周りに不具合をいくつか発見しました。
どれも軽微な不具合なので急いで修正する必要はないと思います。</summary>
		<author>
			<name>4n5</name>
			<uri>http://www.45shiki.net/</uri>
		</author>
	
			<category term="WordPress" scheme="http://www.sixapart.com/ns/types#category" />
	
	
		<content type="html" xml:lang="ja" xml:base="http://www.45shiki.net/blog/">
<![CDATA[
<p><a href="http://fos.uzusionet.com/wordpress/vicuna" title="the Fang of Sky - wp.Vicuna Ext. Custom" class="external">wp.Vicuna Ext. Custom</a>のコメント表示に不具合を見つけました。<br />
ただ、これらの不具合は放置しておいても大丈夫かと思われます。</p>

<ul>
<li>コメントのマークアップに<code>&lt;/dd&gt;</code>が足りない</li>
<li>ゴミ箱に入れたコメントがあると<code>&lt;/dd&gt;</code>が出力される（WordPress2.9以降）</li>
<li>ゴミ箱に入れたコメントもコメント数に含まれる（WordPress2.9以降）</li>
</ul>

<p>上の二つはコーディングが、下の二つはWordPress2.9から追加されたゴミ箱機能を想定していないという事が、原因です。</p>

<p><a href="http://www.45shiki.net/blog/2010/01/b000932.htm" title="WordPress2.9以降のゴミ箱機能について">WordPressのゴミ箱機能については別の記事を参照してください。</a></p>

<p>それでは早速修正をしてみましょう。<br />
対象となるのはコメント（comments.php）ファイルです。</p>

<pre title="修正前のcomments.php"><code>   if ($comments) :
      foreach ($comments as $comment) {
         $type = get_comment_type();
         switch( $type ) {
            case 'trackback' :
            case 'pingback' :
               if ( $comment-&gt;comment_approved != 'spam') {
                  $trackpingArray[$trackpingCount++] = $comment;
               }
               break;
            default :
               <strong>if ( $comment-&gt;comment_approved != 'spam') {</strong>
                  $commentArray[$commentCount++] = $comment;
               }
         }
      }
   endif;
   if ($commentCount &gt; 0 || 'open' == $post-&gt;comment_status) : ?&gt;
         &lt;div class="section" id="comments"&gt;
            &lt;h2&gt;&lt;?php if ('open' == $post-&gt;comment_status) : _e('Comments'); else : _e('Comments (Close)', 'vicuna'); endif; ?&gt;:&lt;span class="count"&gt;&lt;?php echo $commentCount ?&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;?php      if ($commentCount &gt; 0) :
         vicuna_edit_comments_link(__('Edit this comments.', 'vicuna'), '&lt;p class="admin"&gt;', '&lt;/p&gt;'); ?&gt;
            &lt;dl class="log"&gt;
&lt;?php         foreach ($commentArray as $comment) : ?&gt;
&lt;?php
/* -- whisper add s -- */
 if('1' == $comment-&gt;comment_approved){
/* -- whisper add e -- */
?&gt;
               &lt;dt id="comment&lt;?php comment_ID() ?&gt;"&gt;&lt;span class="name"&gt;&lt;?php comment_author_link() ?&gt;&lt;/span&gt; &lt;span class="date"&gt;&lt;?php comment_date(__('y-m-d (D) G:i', 'vicuna')) ?&gt;&lt;/span&gt; &lt;?php edit_comment_link(__('Edit'), '&lt;span class="admin"&gt;', '&lt;/span&gt;'); ?&gt;&lt;/dt&gt;
               &lt;dd&gt;
&lt;?php            comment_text() ?&gt;
&lt;?php
/* -- whisper add s -- */
<strong>} else {</strong>
   <strong>if('0' == $comment-&gt;comment_approved){</strong>
?&gt;
               &lt;dt id="comment&lt;?php comment_ID() ?&gt;"&gt;&lt;span class="name"&gt;******&lt;/span&gt; &lt;span class="date"&gt;&lt;?php comment_date(__('y-m-d (D) G:i', 'vicuna')) ?&gt;&lt;/span&gt; &lt;/dt&gt;
               &lt;dd&gt;
&lt;?php
      _e('This comment is awaiting the approval of the author','vicuna');
   <strong>}</strong>
?&gt;
               &lt;/dd&gt;
&lt;?php
<strong>}</strong>
/* -- whisper add e -- */
            endforeach; ?&gt;
            &lt;/dl&gt;</code></pre>

<p>修正の量自体は少ないです。</p>

<pre title="修正後のcomments.php"><code>   if ($comments) :
      foreach ($comments as $comment) {
         $type = get_comment_type();
         switch( $type ) {
            case 'trackback' :
            case 'pingback' :
               if ( $comment-&gt;comment_approved != 'spam') {
                  $trackpingArray[$trackpingCount++] = $comment;
               }
               break;
            default :
               <strong>if ( $comment-&gt;comment_approved != 'spam'</strong>
               <strong>&amp;&amp; $comment-&gt;comment_approved != 'trash') {</strong>
                  $commentArray[$commentCount++] = $comment;
               }
         }
      }
   endif;
   if ($commentCount &gt; 0 || 'open' == $post-&gt;comment_status) : ?&gt;
         &lt;div class="section" id="comments"&gt;
            &lt;h2&gt;&lt;?php if ('open' == $post-&gt;comment_status) : _e('Comments'); else : _e('Comments (Close)', 'vicuna'); endif; ?&gt;:&lt;span class="count"&gt;&lt;?php echo $commentCount ?&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;?php      if ($commentCount &gt; 0) :
         vicuna_edit_comments_link(__('Edit this comments.', 'vicuna'), '&lt;p class="admin"&gt;', '&lt;/p&gt;'); ?&gt;
            &lt;dl class="log"&gt;
&lt;?php         foreach ($commentArray as $comment) : ?&gt;
&lt;?php
/* -- whisper add s -- */
 if('1' == $comment-&gt;comment_approved){
/* -- whisper add e -- */
?&gt;
               &lt;dt id="comment&lt;?php comment_ID() ?&gt;"&gt;&lt;span class="name"&gt;&lt;?php comment_author_link() ?&gt;&lt;/span&gt; &lt;span class="date"&gt;&lt;?php comment_date(__('y-m-d (D) G:i', 'vicuna')) ?&gt;&lt;/span&gt; &lt;?php edit_comment_link(__('Edit'), '&lt;span class="admin"&gt;', '&lt;/span&gt;'); ?&gt;&lt;/dt&gt;
               &lt;dd&gt;
&lt;?php            comment_text() ?&gt;
&lt;?php
/* -- whisper add s -- */
<strong>} elseif('0' == $comment-&gt;comment_approved){</strong>
?&gt;
               &lt;dt id="comment&lt;?php comment_ID() ?&gt;"&gt;&lt;span class="name"&gt;******&lt;/span&gt; &lt;span class="date"&gt;&lt;?php comment_date(__('y-m-d (D) G:i', 'vicuna')) ?&gt;&lt;/span&gt;&lt;/dt&gt;
               &lt;dd&gt;
&lt;?php
      _e('This comment is awaiting the approval of the author','vicuna');
<strong>}</strong>
?&gt;
               &lt;/dd&gt;
&lt;?php
/* -- whisper add e -- */
            endforeach; ?&gt;
            &lt;/dl&gt;</code></pre>

<p>トラックバックの方については未確認です。</p>

]]>
		</content>
	</entry>

	<entry>
		<title>WordPress2.9以降のゴミ箱機能について</title>
		<link rel="alternate" type="text/html" href="http://www.45shiki.net/blog/2010/01/b000932.htm" />
		<id>tag:www.45shiki.net,2010:/blog//2.932</id>
		<published>2010-01-21T14:58:37Z</published>
		<updated>2010-01-23T10:56:38Z</updated>
		<summary>WordPress2.9から追加された機能、ゴミ箱についてちょっとだけまとめて見ました。</summary>
		<author>
			<name>4n5</name>
			<uri>http://www.45shiki.net/</uri>
		</author>
	
			<category term="WordPress" scheme="http://www.sixapart.com/ns/types#category" />
	
	
		<content type="html" xml:lang="ja" xml:base="http://www.45shiki.net/blog/">
<![CDATA[
<h2>ゴミ箱機能</h2>

<p>WordPress2.9からゴミ箱機能が新しく追加されました。<br />
まあ、WindowsやMachintoshでは当たり前の機能ですから、使い方に迷う人は少ないでしょう。<br />
要するに<strong>執行猶予のある削除</strong>という感じですね。</p>

<p>ゴミ箱に入れられたデータ（投稿・メディア・ページ・コメント・トラックバック）はデフォルト設定のままなら30日が経過すると削除されます。</p>

<h2>設定</h2>

<p>wp-config.phpへの記述で、削除までの執行猶予を延ばしたり縮めたりできます。</p>

<pre title="削除まで60日"><code>define('EMPTY_TRASH_DAYS', 60 ); // 60日</code></pre>

<p>値を0にすればゴミ箱の機能を停止させられます。</p>

<pre title="ゴミ箱の停止"><code>define('EMPTY_TRASH_DAYS', <strong>0</strong> ); // 0日</code></pre>

<p>この場合はWordPress2.8までの状態と同じく、削除の度に確認ダイアログが出ます。<br />
停止させるよりも猶予を短く設定する方が邪魔にならないかもしれません。</p>

<pre title="削除まで1日"><code>define('EMPTY_TRASH_DAYS', <strong>1</strong> ); // 1日</code></pre>

<h2>ゴミ箱中のデータ</h2>

<p>ゴミ箱に移されたデータの状態は<code>trash</code>になります。<br />
データベース中、投稿・ページ・メディアなら<code>post_status</code>フィールド、コメント・トラックバックなら<code>comment_approved</code>フィールドに格納されています。</p>

<p>WordPress2.8までの<code>comment_approved</code>は、承認待ちの<code>0</code>、承認済みの<code>1</code>、スパムの<code>spam</code>、の3種類でした。<br />
そのため次のような<code>spam</code>だけを区別する扱いができました。</p>

<pre><code>if( $comment->comment_approved != 'spam' ){
   // このコメントはスパムではありません。
}</code></pre>

<p>WordPress2.9以降ではゴミ箱中のデータもスパム以外に振り分けられるため、このようなざっくりした書き方では不都合が生じる可能性があります。</p>

]]>
		</content>
	</entry>

	<entry>
		<title>プレビュー状態かを判断する変数preview_template</title>
		<link rel="alternate" type="text/html" href="http://www.45shiki.net/blog/2010/01/b000931.htm" />
		<id>tag:www.45shiki.net,2010:/blog//2.931</id>
		<published>2010-01-19T14:49:13Z</published>
		<updated>2010-01-19T15:53:45Z</updated>
		<summary>ページやテンプレートの出力を確認する際のプレビュー状態を判断できないか、と試してみたらpreview_templateという変数を発見しました。</summary>
		<author>
			<name>4n5</name>
			<uri>http://www.45shiki.net/</uri>
		</author>
	
			<category term="Movable Type" scheme="http://www.sixapart.com/ns/types#category" />
	
	
		<content type="html" xml:lang="ja" xml:base="http://www.45shiki.net/blog/">
<![CDATA[
<h2>読み飛ばし上等の前置き</h2>

<p>サイトのアクセス解析にGoogle Analyticsを使っているのですが、いつからかその解析結果の中に妙なページが見られるようになりました。<br />
ファイル名からそれは<em>プレビュー</em>状態のページやテンプレートだとわかりました。<br />
<em>プレビュー</em>状態というのは<em>確認</em>ボタンで表示される画面の事です。</p>

<p>一時的にしか存在しないファイルへのアクセスを解析する意味はありません。<br />
そもそも自分以外がアクセスできないファイルですし。</p>

<p>そこでアクセス解析のコード出力を<em>プレビュー</em>状態かの判断によって振り分けられないか、と試しに書いたコードが……動いてしまいました。</p>

<h2>変数<code>preview_template</code></h2>

<p><code>preview_template</code>はページやテンプレートが<em>プレビュー</em>状態の時にのみセットされる変数です。<br />
<abbr title="Movable Type">MT</abbr>4.261での動作を確認しました。<br />
ご自分の環境で動作するかは以下のコードを参考にして下さい。</p>

<pre title=""><code>&lt;MTIf name="preview_template"&gt;
ページ（またはテンプレート）はプレビュー状態です
&lt;MTElse&gt;
ページ（またはテンプレート）は公開状態です
&lt;/MTIf&gt;</code></pre>

<p><em>プレビュー</em>状態でない時は<em>公開</em>状態になります。</p>

<h3>使用例</h3>

<p>状態が<em>プレビュー</em>か<em>公開</em>かで振り分けたい場合は上記のコードをカスタマイズして使えます。<br />
どちらかの状態のみを判断したい場合は<code>MTIf</code>タグか<code>MTUnless</code>タグを使います。</p>

<p>私の場合、アクセス解析のコード出力を<em>公開</em>状態に限定したいので<code>MTUnless</code>タグを使います。</p>

<pre title="公開状態に出力されるコード"><code>&lt;MTUnless name="preview_template"&gt;
アクセス解析のコード
&lt;/MTUnless&gt;</code></pre>

<p><em>プレビュー</em>状態にだけ、という使い方の具体例が思い浮かばないのですが、その場合は<code>MTUnless</code>タグを使います。</p>

<pre title="プレビュー状態に出力されるコード"><code>&lt;MTIf name="preview_template"&gt;
現在はプレビュー状態です
&lt;/MTIf&gt;</code></pre>

]]>
		</content>
	</entry>

	<entry>
		<title>wp.Vicuna.excでアイキャッチを使わない場合に0というクラス名が出力される</title>
		<link rel="alternate" type="text/html" href="http://www.45shiki.net/blog/2010/01/b000930.htm" />
		<id>tag:www.45shiki.net,2010:/blog//2.930</id>
		<published>2010-01-18T14:53:02Z</published>
		<updated>2010-01-18T16:59:13Z</updated>
		<summary>WordPressのテーマwp.Vicuna Ext. Customでアイキャッチをなし（none）に設定した場合に0というクラス名が出力されるのを確認しました。
テンプレートをちょっと修正する事でこのクラス名は出力されないようにできます。</summary>
		<author>
			<name>4n5</name>
			<uri>http://www.45shiki.net/</uri>
		</author>
	
			<category term="WordPress" scheme="http://www.sixapart.com/ns/types#category" />
	
	
		<content type="html" xml:lang="ja" xml:base="http://www.45shiki.net/blog/">
<![CDATA[
<p><a href="http://fos.uzusionet.com/wordpress/vicuna" title="the Fang of Sky - wp.Vicuna Ext. Custom" class="external">wp.Vicuna Ext. Custom</a>テーマでは<em>Vicuna Config</em>で選択したアイキャッチに応じたクラスが<code>body</code>タグに付けられます。<br />
アイキャッチを望まない場合には<em>none</em>を選択すれば良いのですが、その場合のにちと問題がある事を確認しました。<br />
この問題は<abbr title="wp.Vicuna Ext. Custom">wp.Vicuna.exc</abbr>で出力したサイトの<code>body</code>タグで確認できます。<br />
一目で問題がわかるように、<em>Header area</em>を選択した場合の正常な結果と上下で並べて見ました。</p>

<pre><code>&lt;body class="mainIndex double <strong>eye-h</strong>"&gt;
&lt;body class="mainIndex double <strong>0</strong>"&gt;</code></pre>

<p>下行が問題の出力結果です。<br />
<strong><code>0</code></strong>というクラス名が出力されていますが、これは必要ありません。<br />
他の名前ならまだしも、数字だけのクラス名では使う事もできません。</p>

<p>いや、もしかしたら使う事ができるブラウザもあるかもしれませんが。<br />
でもクラス名の命名規則からは外れてるので、多分駄目でしょう。</p>

<p>そんなわけで、使えないクラス名は出力しない弄ってしまいましょう。</p>

<h2>テンプレートの修正</h2>

<p>修正を行うのは<em><abbr title="wp.Vicuna Ext. Custom">wp.Vicuna.exc</abbr></em>テーマの<em>layout.php (layout.php)</em>テンプレートです。<br />
ファイル内から以下の記述を探して下さい。</p>

<pre title="修正前のlayout.php"><code>/** -- ex cng s -- **/
// echo $options[$key];
   $layout = $options[$key];
   //Substitute Layout(Measures to ie6)
   if(0 == strcmp($layout, 'multi')){
      $agent = $_SERVER['HTTP_USER_AGENT'];
      if(ereg("MSIE 6",$agent)){
         $layout = $options['ie6_layout'];
      }
   }
   $config = get_option('vicuna_config');
   $eye_catch = $config['eye_catch'];
   <strong>echo $layout.' '.$eye_catch;</strong>
/** -- ex cng e -- **/</code></pre>

<p>ここを以下のように修正します。</p>

<pre title="修正後のlayout.php"><code>/** -- ex cng s -- **/
// echo $options[$key];
   $layout = $options[$key];
   //Substitute Layout(Measures to ie6)
   if(0 == strcmp($layout, 'multi')){
      $agent = $_SERVER['HTTP_USER_AGENT'];
      if(ereg("MSIE 6",$agent)){
         $layout = $options['ie6_layout'];
      }
   }
   $config = get_option('vicuna_config');
   $eye_catch = $config['eye_catch'];
   <strong>echo $layout;</strong>
   <strong>if( $eye_catch ){</strong>
      <strong>echo ' '.$eye_catch;</strong>
   <strong>}</strong>
/** -- ex cng e -- **/</code></pre>

<p>別の書き方もありますけど、どちらが優れているか……。</p>

<pre title="修正後のlayout.php"><code>   <strong>if( $eye_catch ){</strong>
      <strong>echo $layout.' '.$eye_catch;</strong>
   <strong>} else {</strong>
      <strong>echo $layout;</strong>
   <strong>}</strong></code></pre>

<p>どちらにしても、これで無駄なクラス名は出力されなくなります。</p>

]]>
		</content>
	</entry>

	<entry>
		<title>wp.Vicuna Extとwp.Vicuna.excのグローバルナビゲーションでカレント表示</title>
		<link rel="alternate" type="text/html" href="http://www.45shiki.net/blog/2010/01/b000929.htm" />
		<id>tag:www.45shiki.net,2010:/blog//2.000929</id>
		<published>2010-01-17T14:36:48Z</published>
		<updated>2010-03-05T11:19:06Z</updated>
		<summary>デフォルトのwp.Vicuna Extとwp.Vicuna Ext. Customではテーマとスキンとのクラス名が異なるためグローバルナビゲーションでのカレント表示が行われません。
テーマかスキン、お好みの方を修正してカレント表示は行いましょう。</summary>
		<author>
			<name>4n5</name>
			<uri>http://www.45shiki.net/</uri>
		</author>
	
			<category term="WordPress" scheme="http://www.sixapart.com/ns/types#category" />
	
	
		<content type="html" xml:lang="ja" xml:base="http://www.45shiki.net/blog/">
<![CDATA[
<p><a href="http://vicuna.jp/" title="Vicuna CMS - 各種 CMS 対応の汎用テンプレート" class="external">Vicunaスキン</a>のグローバルナビゲーションは、ナビゲーション内のページ自体を表示した場合のために<code>current</code>というクラスが用意されています。</p>

<pre title="グローバルナビゲーションの例"><code>&lt;ul id="globalNavi"&gt;
   &lt;li <strong>class="current"</strong>&gt;&lt;a href="#"&gt;About&lt;/a&gt;&lt;/li&gt;
   &lt;li&gt;&lt;a href="#"&gt;Archives&lt;/a&gt;&lt;/li&gt;
   &lt;li&gt;&lt;a href="#"&gt;Guest Book&lt;/a&gt;&lt;/li&gt;
   &lt;li&gt;&lt;a href="#"&gt;Bookmarks&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</code></pre>

<p>そのクラスを使ってカレント表示を行う事ができるのですが、<a href="http://ma38su.org/projects/vicuna-ext/" title="ma38su.org - wp.Vicuna Ext" class="external">wp.Vicuna Ext.</a>と<a href="http://fos.uzusionet.com/wordpress/vicuna" title="the Fang of Sky - wp.Vicuna Ext. Custom" class="external"><abbr title="wp.Vicuna Ext. Custom">wp.Vicuna.exc</abbr></a>ではうまくいきません。<br />
その理由は実際のソースを見てもらえばわかるでしょう。</p>

<pre title="ページのカレント表示"><code>&lt;ul id="globalNavi"&gt;
   &lt;li&gt;&lt;a href="http://www.example.com/"&gt;Home&lt;/a&gt;&lt;/li&gt;
   &lt;li class="page_item page-item-1 <strong>current_page_item</strong>"&gt;&lt;a href="http://www.example.com/about/" title="About"&gt;About&lt;/a&gt;&lt;/li&gt;
   &lt;li class="cat-item cat-item-1"&gt;&lt;a href="http://www.example.com/category/未分類/"&gt;未分類&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</code></pre>

<pre title="カテゴリのカレント表示"><code>&lt;ul id="globalNavi"&gt;
   &lt;li&gt;&lt;a href="http://www.example.com/"&gt;Home&lt;/a&gt;&lt;/li&gt;
   &lt;li class="page_item page-item-1"&gt;&lt;a href="http://www.example.com/about/"&gt;About&lt;/a&gt;&lt;/li&gt;
   &lt;li class="cat-item cat-item-1 <strong>current-cat</strong>"&gt;&lt;a href="http://www.example.com/category/未分類/"&gt;未分類&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</code></pre>

<p>ページでは<code>current_page_item</code>、カテゴリでは<code>current-cat</code>と付けられるクラスの名前が異なるのです。<br />
Vicunaスキンにはこれらのクラス名に対するスタイルが用意されていないのでカレント表示が行えません。</p>

<h2><abbr title="Cascading Style Sheets">CSS</abbr>の編集</h2>

<p>手っ取り早い方法は、<abbr title="Cascading Style Sheets">CSS</abbr>ファイル内にカレントページとカレントカテゴリのクラス名も追加する事でしょう。</p>

<pre title="カテゴリのカレント表示"><code>ul#globalNavi li a:hover,
<strong>ul#globalNavi li.current_page_item a,</strong>
<strong>ul#globalNavi li.current-cat a,</strong>
ul#globalNavi li.current a {</code></pre>

<p>ただ、この方法だとスキンを変更する度に修正が必要で……面倒です。<br />
そこで、カレント表示時のクラス名が<code>current</code>になるようにテーマを編集してみました。</p>

<h2>テーマの編集</h2>

<p>以下の記述をwp.Vicuna Ext.か<abbr title="wp.Vicuna Ext. Custom">wp.Vicuna.exc</abbr>の<em>テーマのための関数 (functions.php)</em>ファイルに追加して下さい。<br />
ソースは<code>&lt;?php</code>から<code>?&gt;</code>までの間に追加するよう注意して下さい。</p>

<pre title="カレント表示の為の追加ソース"><code>function currentPage( $current ){
   $current = preg_replace( '/current(_page_item|-cat)/', 'current', $current );
   return $current;
}
add_filter( 'wp_list_pages', 'currentPage' );
add_filter( 'wp_list_categories', 'currentPage' );</code></pre>

<p>WordPressにも<abbr title="Hypertext Preprocessor">PHP</abbr>にも不慣れな素人が考えたものですが、一応自分の環境で動く事を確認しました。</p>

]]>
		</content>
	</entry>

	<entry>
		<title>グローバル・モディファイアを自由自在に使う方法</title>
		<link rel="alternate" type="text/html" href="http://www.45shiki.net/blog/2010/01/b000928.htm" />
		<id>tag:www.45shiki.net,2010:/blog//2.000928</id>
		<published>2010-01-11T14:43:45Z</published>
		<updated>2010-01-31T13:52:46Z</updated>
		<summary>MTタグで使えるグローバル・モディファイアを好きな場所で好きなだけ使う為にはMTIfタグを利用します。（現在はMTForタグを使っています）</summary>
		<author>
			<name>4n5</name>
			<uri>http://www.45shiki.net/</uri>
		</author>
	
			<category term="Movable Type" scheme="http://www.sixapart.com/ns/types#category" />
	
	
		<content type="html" xml:lang="ja" xml:base="http://www.45shiki.net/blog/">
<![CDATA[
<h2>閑話</h2>

<p>ここの所、WordPressの記事が続いた為に「4n5は<abbr title="Movable Type">MT</abbr>を捨てたのか」とご心配の方々。<br />
ご心配なく、私はこれからも<abbr title="Movable Type">MT</abbr>ユーザーです。<br />
そして今日も、紹介するのは一風変わったタグの使い方です。</p>

<p>なお、本記事の動作は<abbr title="Movable Type">MT</abbr>4.261及び<abbr title="Movable Type Open Source">MTOS</abbr>4.261で検証済みです。</p>

<h2>グローバル・モディファイア</h2>

<p>Movable Typeの<a href="http://www.movabletype.jp/documentation/appendices/modifiers/" title="グローバル・モディファイアリファレンス | MovableType.jp" class="external">グローバル・モディファイア</a>はMTタグに機能を付加できる便利な機能です。<br />
グローバル・モディファイアはタグの種類や機能に左右されずに使えて非常に便利です。</p>

<p>特に以下の四つを私は多用しています。</p>

<ul>
<li><a href="http://www.movabletype.jp/documentation/appendices/modifiers/replace.html" title="replace | グローバル・モディファイアリファレンス" class="external">replace</a></li>
<li><a href="http://www.movabletype.jp/documentation/appendices/modifiers/regex_replace.html" title="regex_replace | グローバル・モディファイアリファレンス" class="external">regex_replace</a></li>
<li><a href="http://www.movabletype.jp/documentation/appendices/modifiers/trim.html" title="trim | グローバル・モディファイアリファレンス" class="external">trim</a></li>
<li><a href="http://www.movabletype.jp/documentation/appendices/modifiers/default.html" title="_default | グローバル・モディファイアリファレンス" class="external">_default</a></li>
</ul>

<p>これらは非常に便利で、私のタグ使いには必須と言っても過言ではありません。<br />
ここまで便利だと……欲が出てきます。<br />
グローバル・モディファイアがMTタグ以外でも使えないか、という欲が。</p>

<p>流石にMTタグ以外で使う事はできませんが、それに限りなく近い方法を紹介します。<br />
その鍵となるのは<code>MTIf</code>タグです。</p>

<h2><code>MTIf</code>タグでグローバル・モディファイア</h2>

<p><code>MTIf</code>タグの説明は省略するのでまだ知らない人は<a href="http://www.movabletype.jp/documentation/appendices/tags/if.html" title="MTIf | テンプレートタグリファレンス" class="external">公式タグリファレンスの内容</a>を参照してください。</p>

<p>さて皆さん、条件分岐タグの<code>MTIf</code>でグローバル・モディファイアが使えるのか疑ってますね。<br />
もちろん使えます。<br />
例えば、こんな感じです。</p>

<pre title="MTIfタグでregex_replaceを使った例"><code><strong>&lt;MTIf tag="BlogID" upper_case="1"&gt;</strong>
http://www.example.com/
<strong>&lt;/MTIf&gt;</strong></code></pre>

<p>この場合では、<a href="http://www.movabletype.jp/documentation/appendices/modifiers/upper_case.html" title="upper_case | グローバル・モディファイアリファレンス" class="external">upper_case</a>を使っているため、<code><samp>HTTP://WWW.EXAMPLE.COM/</samp></code>と大文字で出力されます。</p>

<p><code>MTIf</code>タグでグローバル・モディファイアが使えるという事、MTタグ以外を対象にできる事が伝わったかと思います。<br />
私の最も大胆な使い方は以下になります。</p>

<pre title="MTIfタグでregex_replaceを大胆に使った例"><code><strong>&lt;MTIf tag="BlogID" regex_replace="/\s+\n/g","\n"&gt;</strong>
&lt;html&gt;
   &lt;body&gt;
      中略
   &lt;/body&gt;
&lt;/html&gt;
<strong>&lt;/MTIf&gt;</strong></code></pre>

<p>ページ全体から空白行を取り除く、という目的のために使ってみました。</p>

<h3><code>MTIf</code>タグで使う為の必須条件</h3>

<p>たった二つの例を紹介しただけですが、<code>MTIf</code>タグでグローバル・モディファイアを使う為の必須条件にお気づき頂けたでしょうか。<br />
それは<code>tag="BlogID"</code>、つまり<strong><code>MTIf</code>タグの結果が真になる条件が必須</strong>です。<br />
条件結果が真にならなければ、<code>MTIf</code>タグで囲った部分が出力されず、グローバル・モディファイアが機能する事はありません。</p>

<p>条件結果が真になるのであれば、変数でもタグでも何でも構いません。<br />
これは利用する環境に応じて変わるでしょうが、注意したいのはカウント系のタグは避けましょう。<br />
カウント系のタグはそのほとんどが出力の度にデータベースへアクセスして数を数えており、非常に高負荷です。</p>

<p>私はまず<a href="http://www.movabletype.jp/documentation/designer/archive-template-variable.html" title="アーカイブテンプレートに設定される予約変数 | Movable Type 4 ドキュメント" class="external">予約変数</a>、予約変数が使えないテンプレートでは記述量が少ない<a href="http://www.movabletype.jp/documentation/appendices/tags/blogid.html" title="MTBlogID | テンプレートタグリファレンス" class="external">MTBlogID</a>タグを条件に利用しています。</p>

<h2><code>MTIf</code>タグ以外でグローバル・モディファイア</h2>

<p>全てのタグで試したわけではありませんが、<code>MTIf</code>タグ以外のタグでもグローバル・モディファイアは使えます。<br />
<del>使えますが、<code>MTIf</code>タグより使い勝手の良いタグは見つかっていません。</del><br />
<ins>コメント欄でお教え頂きましたが、『と＿こ』さんが試された<code>MTUnless</code>タグの方が<code>MTIf</code>タグより使い勝手が良さそうです。</ins><br />
<ins datetime="2010-01-31T00:00:00+09:00">どうやら、<code>MTFor</code>タグが一番記述量が少なくなるようです。</ins></p>
<h3><code>MTUnless</code>タグでグローバル・モティファイア</h3>

<pre title="MTUnlessタグでregex_replaceを使った例"><code><strong>&lt;MTUnless regex_replace="/\s+\n/g","\n"&gt;</strong>
&lt;html&gt;
   &lt;body&gt;
      中略
   &lt;/body&gt;
&lt;/html&gt;
<strong>&lt;/MTUnless&gt;</strong></code></pre>

<p>ただ、<code>MTUnless</code>タグの場合には<strong>条件を設定しなかった場合の結果が真になる</strong>という内部処理が前提となるため、システムの仕様変更により使えなくなる可能性が考えられます。<br />
例えばタグの使用に条件が必須になるとか。<br />
<del datetime="2010-01-31T22:46:58+9:00">それでも、それまでは間違いなく一番の使い勝手だと思います。</del><br />
<ins datetime="2010-01-31T22:46:58+9:00">更に上の<code>MTFor</code>タグを見つけました。</ins><br />
『と＿こ』さん、ありがとうございます。</p>

<h3><strong><code>MTFor</code>タグでグローバル・モティファイア</strong></h3>

<p>恐らく、<code>MTFor</code>タグ以上に、グローバル・モディファイアを自在に使うための記述量が少ないタグはないでしょう。</p>

<pre title="MTForタグでregex_replaceを使った例"><code><strong>&lt;MTFor regex_replace="/\s+\n/g","\n"&gt;</strong>
&lt;html&gt;
   &lt;body&gt;
      中略
   &lt;/body&gt;
&lt;/html&gt;
<strong>&lt;/MTFor&gt;</strong></code></pre>

<p><code>MTFor</code>タグについては<a href="http://www.45shiki.net/blog/2009/09/b000913.htm" title="MovableType.jpに載っていないMTForタグの動作条件">以前の記事</a>を参照して下さい。</p>

<p>簡単に説明すると、<code>MTFor</code>タグは開始と終了が同じ値の場合には一回だけループします。<br />
さらに開始と終了の値はそのどちらも、省略すると<var>0</var>が自動設定されます。<br />
そのため上記の<code>MTFor</code>は機能するのです。</p>
]]>
		</content>
	</entry>

	<entry>
		<title>wp.Vicuna.excのグローバルナビゲーションを修正</title>
		<link rel="alternate" type="text/html" href="http://www.45shiki.net/blog/2010/01/b000927.htm" />
		<id>tag:www.45shiki.net,2010:/blog//2.927</id>
		<published>2010-01-09T14:45:55Z</published>
		<updated>2010-01-09T15:26:44Z</updated>
		<summary>W3C Markup Validatorでwp.Vicuna.excのグローバルナビゲーションがPassされない事に気付きました。
この事はconfig.phpを修正する事で解消されます。</summary>
		<author>
			<name>4n5</name>
			<uri>http://www.45shiki.net/</uri>
		</author>
	
			<category term="WordPress" scheme="http://www.sixapart.com/ns/types#category" />
	
	
		<content type="html" xml:lang="ja" xml:base="http://www.45shiki.net/blog/">
<![CDATA[
<p><a href="http://validator.w3.org/" title="The W3C Markup Validation Service" class="external">W3C Markup Validator</a>を使った所、<a href="http://fos.uzusionet.com/wordpress/vicuna" title="the Fang of Sky - wp.Vicuna Ext. Custom" class="external">wp.Vicuna.exc</a>のグローバルナビゲーションがPassされない事に気付きました。<br />
問題の箇所は以下のように出力されていた。</p>

<pre title="Passされなかった箇所"><code>
   &lt;ul id="globalNavi"&gt;
      &lt;li <strong>class=home_page_item &gt;</strong>&lt;a href="http://example.com" title="Home"&gt;Home&lt;/a&gt;&lt;/li&gt;
</code></pre>

<p>大した事ではないですが、そのままにしておくには気になるので修正しました。<br />
修正の対象はテーマのconfig.phpファイルです。<br />
問題があるのは以下の箇所です。</p>

<pre title="修正前"><code>   &lt;ul id="globalNavi"&gt;
&lt;?php
   if ( $options['g_navi_home'] ) { ?&gt;
      &lt;li&lt;?php if ( is_front_page() ) { echo ' <strong>class=home_page_item</strong>'; } ?<strong>&gt; &gt;</strong>&lt;a href="&lt;?php bloginfo('home'); ?&gt;" title="Home"&gt;Home&lt;/a&gt;&lt;/li&gt;</code></pre>

<p>ここを以下のように修正すれば、ValidatorでPassされるようになります。</p>

<pre title="修正後"><code>   &lt;ul id="globalNavi"&gt;
&lt;?php
   if ( $options['g_navi_home'] ) { ?&gt;
      &lt;li&lt;?php if ( is_front_page() ) { echo ' <strong>class="home_page_item"</strong>'; } ?<strong>&gt;&gt;</strong>&lt;a href="&lt;?php bloginfo('home'); ?&gt;" title="Home"&gt;Home&lt;/a&gt;&lt;/li&gt;</code></pre>

<p><code>home_page_item</code>をダブルクォートで括るだけで問題は解消されるのですが、<code>class</code>属性の後の空白を消す為には&gt;と&gt;の間を詰める必要があります。</p>

]]>
		</content>
	</entry>

	<entry>
		<title>ウィジェットがないサイドバーを外側ごと表示させない方法</title>
		<link rel="alternate" type="text/html" href="http://www.45shiki.net/blog/2010/01/b000926.htm" />
		<id>tag:www.45shiki.net,2010:/blog//2.926</id>
		<published>2010-01-04T13:22:21Z</published>
		<updated>2010-01-23T19:07:57Z</updated>
		<summary>WordPressでウィジェットがない空のサイドバー周りの出力が美しくない、と感じたのでキレイに出力されるようにコーディングをがんばってみました。</summary>
		<author>
			<name>4n5</name>
			<uri>http://www.45shiki.net/</uri>
		</author>
	
			<category term="WordPress" scheme="http://www.sixapart.com/ns/types#category" />
	
	
		<content type="html" xml:lang="ja" xml:base="http://www.45shiki.net/blog/">
<![CDATA[
<p>WordPressのサイドバーは出力する事を前提としたコーディングが推奨されている、らしいです。<br />
少なくとも<a href="http://wpdocs.sourceforge.jp/WordPress_%E3%82%A6%E3%82%A3%E3%82%B8%E3%82%A7%E3%83%83%E3%83%88_API" title="WordPress ウィジェット API - WordPress Codex 日本語版" class="external">WordPress Codex 日本語版</a>にはそう書かれています。</p>

<blockquote cite="http://wpdocs.sourceforge.jp/WordPress_%E3%82%A6%E3%82%A3%E3%82%B8%E3%82%A7%E3%83%83%E3%83%88_API" title="WordPress ウィジェット API - WordPress Codex 日本語版">

<p>静的なサイドバーを表示するかどうかを決定するのに、返り値を使用すべきです。こうすることで、ウィジェットプラグインがアクティブでない場合にも、テーマがきちんと表示されるようにできます。致命的なエラーを防ぐために、以下のように使用することをお勧めします。</p>

<pre><code>&lt;ul id=&quot;sidebar&quot;&gt;
   &lt;?php if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar() ) : ?&gt;
      &lt;li&gt;{static sidebar item 1}&lt;/li&gt;
      &lt;li&gt;{static sidebar item 2}&lt;/li&gt;
   &lt;?php endif; ?&gt;
&lt;/ul&gt;</code></pre>
</blockquote>

<p>この書き方が、私は好きではないのです。<br />
例えば<a href="http://fos.uzusionet.com/wordpress/vicuna" title="the Fang of Sky - wp.Vicuna Ext. Custom" class="external"><abbr title="wp.Vicuna Ext. Custom">wp.Vicuna.exc</abbr></a>にはheaderとfooterというサイドバーがありますが、それらは以下のような記述で出力を行っています。</p>

<pre title="wp.Vicuna.excのテンプレート"><code>&lt;div id="header_bar" align="center"&gt;
&lt;?php if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar('header') ) : ?&gt;
&lt;?php endif; ?&gt;
&lt;/div&gt;</code></pre>

<p>この記述、サイドバーにウィジェットがない場合はこんな出力になります。</p>

<pre title="wp.Vicuna.excの出力結果"><code>&lt;div id="header_bar" align="center"&gt;
&lt;/div&gt;</code></pre>

<p><strong>う、美しくない。<br />
必要がない時には何一つ出力しない</strong>、そんな記述を私はしたいのです。</p>

<p>というわけで、素人ながら何とかやってみました。</p>

<pre title="改造テンプレート"><code>&lt;?php if ( function_exists('dynamic_sidebar') &amp;&amp; is_active_sidebar('header') ) : ?&gt;
   &lt;div id="header_bar" align="center"&gt;
      &lt;?php dynamic_sidebar('header') ?&gt;
   &lt;/div&gt;
&lt;?php endif; ?&gt;</code></pre>

<p>これで出力結果は望み通りになりました。<br />
<del><code>is_active_sidebar</code>は数字でしか指定できないので注意です。</del><br />
<ins><code>is_active_sidebar</code>はサイドバー名、ID、番号での指定が可能です。</ins></p>

<p><code>align="center"</code>が美しくない、という安いツッコミはスルーです。</p>

<h2>追伸</h2>

<p>記事を書いている途中に寝落ちしてました。<br />
見苦しい状態のまま記事を公開して申し訳ありませんでした。<br />
さらに、寝落ちする前にコピペ対象を間違って、改造例の失敗作が公開されてました。</p>

<p>ちなみに、失敗作では<code>is_dynamic_sidebar</code>を使おうとしていましたが、動作結果がどうも希望通りにならなかったので<code>is_active_sidebar</code>を使う事にしました。</p>

]]>
		</content>
	</entry>

	<entry>
		<title>wp.Vicuna Ext.Customから｢作成者:｣を消すカスタマイズ</title>
		<link rel="alternate" type="text/html" href="http://www.45shiki.net/blog/2009/12/b000925.htm" />
		<id>tag:www.45shiki.net,2009:/blog//2.925</id>
		<published>2009-12-13T14:47:35Z</published>
		<updated>2009-12-13T15:21:44Z</updated>
		<summary>wp.Vicuna Ext.Customで記事の作成者名を表示した際に加えられる「作成者:」という記述を消すためのカスタマイズの方法です。</summary>
		<author>
			<name>4n5</name>
			<uri>http://www.45shiki.net/</uri>
		</author>
	
			<category term="WordPress" scheme="http://www.sixapart.com/ns/types#category" />
	
	
		<content type="html" xml:lang="ja" xml:base="http://www.45shiki.net/blog/">
<![CDATA[
<p><a href="http://fos.uzusionet.com/wordpress/vicuna" title="the Fang of Sky - wp.Vicuna Ext. Custom" class="external">wp.Vicuna Ext.Custom</a>はVicuna Configの設定次第で記事の作成者名を表示できます。</p>

<p>設定の選択だけで表示できるのは便利なのですが、その出力ソースに不満があります。<br />
それは<q>作成者:</q>という表示です。</p>

<pre title="出力例"><code>&lt;li class="author"&gt;<strong>作成者:</strong>4n5&lt;/li&gt;</code></pre>

<p>マークアップもないので<abbr title="Cascading Style Sheets">CSS</abbr>で非表示化する事もできません。</p>

<p>というわけで、テーマを編集して出力させないようにしました。</p>

<p>編集の対象はconfig.phpになります。</p>

<pre title="カスタマイズ前のソース"><code>function vicuna_author_displays() {
	$options = get_option('vicuna_config');
	if ($options['author_displays'] == 1) {
		echo '&lt;li class="author"&gt;'<strong>.__("Author").':'</strong>.get_the_author().'&lt;/li&gt;';
	}
}</code></pre>

<p>上記のブロックを書き換えます。</p>

<pre title="カスタマイズ前のソース"><code>function vicuna_author_displays() {
	$options = get_option('vicuna_config');
	if ($options['author_displays'] == 1) {
		echo '&lt;li class="author"&gt;'.get_the_author().'&lt;/li&gt;';
	}
}</code></pre>

<p>これで作成者の名前のみが出力されるようになります。</p>

<pre title="カスタマイズ後の出力例"><code>&lt;li class="author"&gt;4n5&lt;/li&gt;</code></pre>

]]>
		</content>
	</entry>

	<entry>
		<title>robots.txtにおけるAllowとDisallowとSitemapの優先順位</title>
		<link rel="alternate" type="text/html" href="http://www.45shiki.net/blog/2009/12/b000924.htm" />
		<id>tag:www.45shiki.net,2009:/blog//2.000924</id>
		<published>2009-12-11T14:19:28Z</published>
		<updated>2009-12-12T10:05:36Z</updated>
		<summary>検索エンジンなどのクローラを良き導くためのrobots.txtファイルにおけるAllowとDisallowとSitemapの優先順位についてです。</summary>
		<author>
			<name>4n5</name>
			<uri>http://www.45shiki.net/</uri>
		</author>
	
			<category term="Web" scheme="http://www.sixapart.com/ns/types#category" />
	
	
		<content type="html" xml:lang="ja" xml:base="http://www.45shiki.net/blog/">
<![CDATA[
<p>検索エンジンなどのクローラを良き導くための指針ファイル、それがrobots.txtです。<br />
その書き方の詳細は検索するなり<a href="http://www.robotstxt.org/" title="The Web Robots Pages">robotstxt.org</a>を見てください。<br />
数あるrobots.txtの説明で気になったのは、AllowとDisallowの優先順位です。<br />
どうやら当たり前すぎて説明されていないようです。</p>

<p>記述例の効果は、Googleウェブマスターツールでテストしました。<br />
なのでこれから説明する動作はGooglebotだけにしか通用しない可能性があります。</p>

<p>優先順位を説明する前に、記述順序について説明します。</p>

<h2>記述順序による効果の違いはなし</h2>

<p>User-agentが一行目であれば、それ以降の記述順序による効果の違いはありません。<br />
なので以下はどちらも同じ効果になります。</p>

<pre title="Disallowが先"><code>User-agent: *
Sitemap: http://www.example.com/sitemap.xml
Disallow: /bakemono
Allow: /bakemono/gatari</code></pre>

<pre title="Allowが先"><code>User-agent: *
Sitemap: http://www.example.com/sitemap.xml
Allow: /bakemono/gatari
Disallow: /bakemono</code></pre>

<p>そして、ここからが本題です。</p>

<h2>Sitemapの優先順位</h2>

<p>サイトマップファイルの場所を記述する<code>Sitemap:</code>ですが、これは<code>Allow:</code>と<code>Disallow:</code>より優先度は低いです。<br />
例えば、以下の場合ではクローラはサイトマップファイルへアクセスできません。</p>

<pre title="全体をアクセス拒否"><code>User-agent: *
Sitemap: http://www.example.com/sitemap.xml
Disallow: /</code></pre>

<pre title="xmlファイルのみアクセス拒否"><code>User-agent: *
Sitemap: http://www.example.com/sitemap.xml
Disallow: *.xml$</code></pre>

<p>全体をアクセス拒否する場合は少ないでしょうが、拡張子のみでアクセス拒否する場合はご注意ください。</p>

<p>これは<strong>実体験</strong>によるものです。<br />
この記述で、Googlebotは見事にアクセスできなくなってました。</p>

<h2>AllowとDisallowの記述が同じ場合</h2>

<p><code>Allow:</code>と<code>DIsallow:</code>の記述が異なる場合では、長い記述の方が優先されます。<br />
これは<code>Allow:</code>と<code>DIsallow:</code>が前方一致で機能するからです。<br />
では、記述が同じ場合はどうでしょうか。</p>

<p><code>Allow:</code>と<code>DIsallow:</code>の記述が同じ場合では<code>Allow:</code>が優先されます。</p>

<pre><code>User-agent: *
Disallow: /
Allow: /</code></pre>

<h3>解説</h3>

<p>当たり前の事ですが、機能しないのなら書く必要はありません。<br />
上記の例なら<code>Disallow: /</code>は必要ありません。</p>

<pre><code>User-agent: *
Allow: /</code></pre>

<p>アクセスを制限していない状況では<code>Allow:</code>も必要ありません。</p>

<pre><code>User-agent: *</code></pre>

<p>アクセスの不可避もないのに<code>User-agent:</code>を記述する必要はありませんね。</p>

<pre></pre>

<p>そして何もなくなった。</p>

]]>
		</content>
	</entry>

	<entry>
		<title>システムテンプレートが｢時々｣見つからない場合の対処法</title>
		<link rel="alternate" type="text/html" href="http://www.45shiki.net/blog/2009/11/b000923.htm" />
		<id>tag:www.45shiki.net,2009:/blog//2.923</id>
		<published>2009-11-28T14:55:37Z</published>
		<updated>2009-11-29T10:12:59Z</updated>
		<summary>システムテンプレートが見つからなくなる現象にMovable Type4.32で時々見舞われた。
この現象はテンプレートセットの初期化失敗とは違い、テンプレート自体は存在しているものの一覧画面では表示できなくなる。
とりえあずの対処法は見つけました。</summary>
		<author>
			<name>4n5</name>
			<uri>http://www.45shiki.net/</uri>
		</author>
	
			<category term="Movable Type" scheme="http://www.sixapart.com/ns/types#category" />
	
	
		<content type="html" xml:lang="ja" xml:base="http://www.45shiki.net/blog/">
<![CDATA[
<h2>現象</h2>

<p><abbr title="Movable Type">MT</abbr>4.32で<strong>時々</strong>、テンプレートの一覧から<strong>システムテンプレートが見つからなくなる</strong>という現象に見舞われた。<br />
（現象が発生するタイミングも解消するタイミングも全くわからないのでSix Apartへフィードバックはしていない）</p>

<blockquote title="管理画面の表示メッセージ">

<p>システムテンプレートが見つかりません。</p>

</blockquote>

<p>このようなメッセージが表示されるだけで、アクションメニューすら表示されなくなる。</p>

<p>テンプレートセットの初期化が失敗したためにテンプレートの一部が見つからない状況とは違うらしく、私がこの現象を確認したのもテンプレートセットの初期化からかなり経っている。</p>

<p>しかも、この現象、ブログではコメントのプレビューも検索画面も問題なく表示できた。<br />
どうやら<strong>一覧画面で見つからないだけでシステムテンプレート自体はちゃんと存在している</strong>らしい。</p>

<h2>対処法</h2>

<p>突然にこの現象が発生した場合、焦ってテンプートセットを初期化しない方が良いと思う。</p>

<p>私の場合、ある時は管理画面にログインし直したらシステムテンプレートの表示は復活した。<br />
また別の時はブラウザを再起動したら、復活した。</p>

<p>けれど、同じ事を試してもシステムテンプートの表示が復活しない事もあった。<br />
そんな時、システムテンプレートを編集するには<strong>検索機能</strong>を使う。<br />
先に書いたようにシステムテンプート自体が存在するこの現象では、検索結果に抽出できた。</p>

<p>検索する単語は対象としてシステムテンプレートに含まれていないといけない。<br />
<strong>システムテンプレート全て</strong>を結果に含めようと思うなら<strong><abbr title="(Extensible) HyperText Markup Language">(X)HTML</abbr>タグで検索</strong>する事になると思う。<br />
しかし、<strong>個々のシステムテンプレート</strong>を対象とするなら<strong>テンプレート名で検索</strong>すれば見つかると思う。<br />
システムテンプレート名をシステムテンプレート内に使っている人は多いと思う、titleタグなどで。</p>

]]>
		</content>
	</entry>

	<entry>
		<title>MT4.261&amp;MT4.32でMTIncludeBlockタグが正常動作しない不具合</title>
		<link rel="alternate" type="text/html" href="http://www.45shiki.net/blog/2009/11/b000922.htm" />
		<id>tag:www.45shiki.net,2009:/blog//2.922</id>
		<published>2009-11-18T14:41:30Z</published>
		<updated>2009-11-18T16:55:31Z</updated>
		<summary><![CDATA[MT4.261&amp;MT4.32でMTIncludeBlockタグが正常動作しない不具合を発見しましたのでその詳細と対処法を紹介します。]]></summary>
		<author>
			<name>4n5</name>
			<uri>http://www.45shiki.net/</uri>
		</author>
	
			<category term="Movable Type" scheme="http://www.sixapart.com/ns/types#category" />
	
	
		<content type="html" xml:lang="ja" xml:base="http://www.45shiki.net/blog/">
<![CDATA[
<p><a href="http://www.movabletype.jp/documentation/appendices/tags/includeblock.html" title="MTIncludeBlock | テンプレートタグリファレンス" class="external"><code>MTIncludeBlock</code></a>タグとは呼び出すテンプレートモジュールにブロックの内側に格納した変数を渡す事ができるタグです。</p>

<p>その<code>MTIncludeBlock</code>タグが動作しない不具合を<abbr title="Movable Type">MT</abbr>4.261で確認しました。<br />
また、<abbr title="Movable Type">MT</abbr>4.32でも不具合を確認しました。<br />
既にSix Apartへフィードバック済みですので、次バージョン以降の修正待ちです。</p>

<h2>不具合の詳細</h2>

<p>私が発見したのは<code>MTIncludeBlock</code>タグの内側で設定された変数がテンプレートモジュールで参照できないという不具合です。</p>

<p>次のようなテンプレートモジュールbannerがあったとします。</p>

<pre title="テンプレートモジュールbannerの内容"><code>&lt;a href="&lt;$MTGetVar name="banner_link"$&gt;"&gt;&lt;img alt="&lt;$MTGetVar name="banner_alt"$&gt;" src="images/&lt;$MTGetVar name="banner_name"$&gt;.jpg" width="&lt;$MTGetVar name="banner_width"$&gt;" height="&lt;$MTGetVar name="banner_height"$&gt;" /&gt;&lt;/a&gt;</code></pre>

<p>これを以下のようなコードで呼び出したとします。</p>

<pre title="呼び出し元の内容"><code>&lt;MTIncludeBlock module="banner"&gt;
&lt;$MTSetVar name="banner_link" value="http://example.com/"$&gt;
&lt;$MTSetVar name="banner_name" value="advertisement_a"$&gt;
&lt;$MTSetVar name="banner_width" value="728"$&gt;
&lt;$MTSetVar name="banner_height" value="90"$&gt;
&lt;/MTIncludeBlock&gt;</code></pre>

<p>この場合の出力結果を並べてみました。<br />
一行目が本来の、二行目が不具合の、出力結果です。</p>

<pre title="テンプレートモジュールbannerの内容"><code>&lt;a href="http://example.com/"&gt;&lt;img alt="" src="images/advertisement_a.jpg" width="728" height="90" /&gt;&lt;/a&gt;
&lt;a href=""&gt;&lt;img alt="" src="images/.jpg" width="" height="" /&gt;&lt;/a&gt;</code></pre>

<p>不具合によって変数が参照できていません。</p>

<h2>不具合への対処</h2>

<p>この不具合では<code>MTIncludeBlock</code>タグの内側で設定された変数だけが参照できません。<br />
なので<code>MTIncludeBlock</code>の開始タグと一緒に設定した変数は通常どおりに参照できます。<br />
例えば、上の例で使ったものを不具合が発生しないように書き換えると次のようになります。</p>

<pre title="呼び出し元の内容"><code>&lt;MTIncludeBlock module="banner" banner_link="http://example.com/" banner_name="advertisement_a" banner_width="728" banner_height="90"&gt;
&lt;/MTIncludeBlock&gt;</code></pre>

<p>これは、あくまで変数に設定する値がプレーンな場合にのみに有効な方法です。<br />
ただ、この書き方なら<code>MTIncludeBlock</code>タグを使わずとも<code>MTInclude</code>タグで事足ります。</p>

<p><code>MTIncludeBlock</code>タグの真骨頂である変数の値にMTタグを設定したい場合には、<code>MTSetVar</code>タグや<code>MTSetVarBlock</code>タグを使って設定するしかありません。</p>

]]>
		</content>
	</entry>

</feed>