「WordPressで学ぶPHP(1)変数・制御構造編」が発売されました。
「WordPressで学ぶPHP」シリーズの第1巻で、WordPressを通してPHPを学んでいく本です。
この本では、PHPの基本となる変数と制御構造について解説します。
Kindle本で、定価500円です。
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」では、「_」は変換されずにそのまま出力されます。