「WordPressで学ぶPHP(4)通信編」を発売しました。
本書は、「WordPressで学ぶPHP(1)変数・制御構造編」「WordPressで学ぶPHP(2)データ構造編」「WordPressで学ぶPHP(3)関数編」の続編にあたり、Webブラウザとサーバー(PHP)との通信と、PHPから他のサーバーに通信することについて解説します。
MTFileTemplateタグの「%f」等の落とし穴
先日、以下のような質問をいただきました。
カテゴリアーカイブテンプレートの中で、優先ではないブログ記事アーカイブテンプレートで出力している個々の記事にリンクするために、<$mt:ArchiveTemplate format="%y%m/%-f"$>」のタグを使いました。
すると、「%f」が「index.html」に変換され、個々の記事のファイル名になりません。なぜでしょうか。
これはある種落とし穴的な話ですので、記事にしておきます。
アーカイブマッピングで使える文字として、「%f」や「%-f」があります。
これらの文字は、「アーカイブファイルの名前」を意味します。
ブログ記事アーカイブテンプレートでアーカイブマッピングを指定する際に、「%f」などを使うことができます。
この場合、アーカイブファイルは個々のブログ記事のファイルに対応しますので、「%f」がブログ記事のファイル名を表します。
ところが、カテゴリアーカイブテンプレート内で「%f」を使った場合、アーカイブファイルは、個々のカテゴリのアーカイブのファイルに対応します。
通常の設定では、カテゴリアーカイブページでは、ファイル名が「index.html」になります。
そのため、「%f」が「index.html」に変換されるという現象になります。
カテゴリアーカイブテンプレートにMTEntriesのブロックを入れて、MTFileTemplateタグで個々のブログ記事にリンクする場合、上の理由から、「%f」では正しく動作しません。
ブログ記事のファイル名を表す記号に置き換える必要があります。
ただ、1つの記号でブログ記事のファイル名を表すことはできません。
「%f」「%-f」の代わりに、「%b%x」もしくは「%-b%x」を使います。
「%-b%x」にした場合、ファイル名に含まれる「_」が「-」に変換されます。
「%b%x」では、「_」は変換されずにそのまま出力されます。