「WordPressで学ぶPHP(4)通信編」を発売しました。
本書は、「WordPressで学ぶPHP(1)変数・制御構造編」「WordPressで学ぶPHP(2)データ構造編」「WordPressで学ぶPHP(3)関数編」の続編にあたり、Webブラウザとサーバー(PHP)との通信と、PHPから他のサーバーに通信することについて解説します。
任意のテンプレートを再構築するテンプレートタグ(その2)
昨日に続いて、任意のテンプレートを再構築するテンプレートタグを紹介します。
今日はテンプレートタグの詳細な書き方を解説します。
1.再構築対象を指定するモディファイア
再構築する対象は、以下のモディファイアを組み合わせて指定します。
モディファイア | 指定する値 |
---|---|
archive_type | アーカイブの種類 |
autdor_id | ユーザーのID(ユーザー系アーカイブテンプレートを再構築する場合) |
blog_id | 再構築対象のブログのID(通常は指定不要) |
category_id | カテゴリのID(カテゴリ系アーカイブテンプレートを再構築する場合) |
entry_id | ブログ記事/ウェブページのID(ブログ記事/ウェブページアーカイブテンプレートを再構築する場合) |
startdate | アーカイブの開始日の日付(日付系アーカイブテンプレートを再構築する場合) |
template_id | 再構築するテンプレートのID |
archive_typeモディファイアには、以下の値を指定します。
値 | アーカイブの種類 |
---|---|
index | インデックス |
Yearly | 年別 |
Monthly | 月別 |
Weekly | 週別 |
Daily | 日別 |
Category | カテゴリ |
Category-Yearly | カテゴリ年別 |
Category-Monthly | カテゴリ月別 |
Category-Weekly | カテゴリ週別 |
Category-Daily | カテゴリ日別 |
Author | ユーザー |
Author-Yearly | ユーザー年別 |
Author-Monthly | ユーザー月別 |
Author-Weekly | ユーザー週別 |
Author-Daily | ユーザー日別 |
Individual | ブログ記事 |
Page | ウェブページ |
また、startdateモディファイアは、アーカイブの開始日を年4桁/月日2桁/0を6桁の数値で表します。
例えば、2012年1月の月別アーカイブページを再構築する場合、「startdate="20120101000000"」と指定します。
各モディファイアとも、複数の値を指定したい場合は「モディファイア="値","値","値"」のように、「"値"」をコンマで区切って書きます。
例えば、IDが100と101のブログ記事を再構築する場合、「entry_id="100","101"」と書きます。
モディファイアの指定方法によっては、複数のページが再構築対象になることもあります。
その場合は、対象の全てのページが再構築されます。
2.モディファイアの指定の例
モディファイアの指定の例をいくつか挙げておきます。
2-1.IDが1のインデックステンプレートを再構築
<$mt:RebuildAnyTemplate archive_type="index" template_id="1"$>
この例では、「archive_type="index"」を省略しても動作します。
2-2.IDが2のカテゴリアーカイブテンプレートを、すべてのカテゴリに対して再構築
<$mt:RebuildAnyTemplate archive_type="Category" template_id="2"$>
2-3.IDが2のカテゴリアーカイブテンプレートで、IDが3のカテゴリのページだけを再構築
<$mt:RebuildAnyTemplate archive_type="Category" template_id="2" category_id="3"$>
2-4.IDが4の月別アーカイブテンプレートで、すべての月別アーカイブページを再構築
<$mt:RebuildAnyTemplate archive_type="Monthly" template_id="4"$>
2-5.IDが4の月別アーカイブテンプレートで、2012年9月の月別アーカイブページを再構築
<$mt:RebuildAnyTemplate archive_type="Monthly" template_id="4" startdate="20120901000000"$>
2-6.IDが5のブログ記事テンプレートで、すべてのブログ記事のページを再構築
<$mt:RebuildAnyTemplate archive_type="Individual" template_id="5"$>
2-7.IDが5のブログ記事テンプレートで、IDが6のブログ記事のページを再構築
<$mt:RebuildAnyTemplate archive_type="Individual" template_id="5" entry_id="6"$>
2-8.IDが7のウェブページテンプレートで、すべてのウェブページを再構築
<$mt:RebuildAnyTemplate archive_type="Page" template_id="7"$>
2-9.IDが7のウェブページテンプレートで、IDが8のウェブページを再構築
<$mt:RebuildAnyTemplate archive_type="Page" template_id="7" entry_id="8"$>
3.logモディファイア
logモディファイアは、再構築したページのパスをシステムログに記録したいときに使います。
「log="whole"」とすると、1回のMTRebuildAnyTemplateタグの実行で複数のページを再構築した時には、それらすべてのパスを1件のシステムログに記録します。
また、「log="each"」とすると、1回のMTRebuildAnyTemplateタグの実行で複数のページを再構築した時には、ページ1件ごとにパスをシステムログに記録します。
4.RebuildAnyTemplateプラグインの利用上の注意
RebuildAnyTemplateプラグインを使う上で、以下の点にご注意ください。
4-1.多くのページを再構築しない
RebuildAnyTemplateタグで大量のページを再構築すると、mt.cgiがタイムアウトしたり、500エラーになったりする可能性が高くなります。
モディファイアを適切に指定して、必要最小限の再構築にとどめるようにしてください。
4-2.MTRebuildAnyTemplateタグの無限ループ
あるテンプレートの中に、そのテンプレート自身を再構築するMTRebuildAnyTemplateタグを入れると、再構築の無限ループが発生してしまいます。
例えば、メインページのインデックステンプレートの中に、そのインデックステンプレートを再構築するMTRebuildAnyTemplateタグを入れると、無限ループになります。
このようなことが起こらないようにする必要があります。
4-3.一度も再構築したことがないページは再構築できない
このプラグインでは、「mt_fileinfo」というテーブルの情報を元に、再構築する対象を検索します。
ただ、これまでに一度も再構築されていないページでは、mt_fileinfoテーブルに情報が作られていません。
そのため、MTRebuildAnyTemplateタグの処理で情報を検索することができず、再構築することができません。
インポート機能でブログ記事を読み込んだ直後など、再構築をまだ一度も行っていない時には、あらかじめ再構築を行っておく必要があります。