「WordPressで学ぶPHP(2)データ構造(配列・オブジェクト)編」を発売しました。
本書は「WordPressで学ぶPHP(1)変数・制御構造編」の続編にあたり、PHPの「データ構造」(配列とオブジェクト)について解説します。
配列やオブジェクトは、頭の中で考えるだけでは、イメージがつかみにくいです。本書では図を多用して、配列やオブジェクトをなるべく分かりやすく解説することを心がけました。
Kindle本で、定価250円です。
MT4でカテゴリーアーカイブに全エントリーを出力する
ゲストブックに以下のような投稿をいただきました。
MT4がリリースされ、早速新規インストールし、記事とコメントを読み込ませ、運用を開始しました。
アップグレードしなかったのは、新しいテンプレートを使ってみたかったからです。
ところが、カテゴリのリンクをクリックすると、MT4では、カテゴリ内の最新の10件しか表示されず、これまでのようなカテゴリ内の全ての記事を表示する方法が無いようなのです!
最新の10件だけではあまり意味が無いので、ぜひ以前のようにカテゴリ内の全記事を表示するようなカスタマイズ法を勉強したいのですが、記事にしていただけないでしょうか?
ということで、この件を調べてみました。
1.ブログ記事リストテンプレートを書き換える
Movable Type 4ではアーカイブの種類が増えていますが、複数のブログ記事(エントリー)が出力されるアーカイブは、すべて「ブログ記事リスト」というアーカイブテンプレートに基づいて出力されています。
このテンプレートの中に、以下のような部分があります。
<MTIf name="datebased_archive"> <MTEntries> <$MTEntryTrackbackData$> <$MTInclude module="ブログ記事の概要"$> </MTEntries> <MTElse> <MTEntries limit="auto"> <$MTEntryTrackbackData$> <$MTInclude module="ブログ記事の概要"$> </MTEntries> </MTIf>
この部分により、ブログ記事は以下のように出力されます。
- 日付関係のアーカイブの場合は、<MTEntries>タグによって、そのアーカイブのすべてのブログ記事が出力されます。
- それ以外のアーカイブの場合は、<MTEntries limit="auto">タグによって、メインページと同じく、標準では最新の10件のブログ記事が出力されます。
したがって、上記のリストにある「<MTEntries limit="auto">」を「<MTEntries>」に書き換えれば、カテゴリーアーカイブでも各カテゴリーの全ブログ記事が出力されるようになります。
2.ただしあまりお勧めしません
ここまでのように書き換えれば、これまで通りの動作になります。
しかし、書き換えることはあまりお勧めしません。
Blogを長く続けると、各カテゴリーのブログ記事の数が増えていきます。
となると、カテゴリーアーカイブに各カテゴリーの全てのブログ記事を出力するようにすると、再構築に時間がかかることになります。
この問題を避けるために、MT4ではカテゴリーアーカイブには全てのブログ記事を出力しないようになったのではないかと思われます。
また、MT4の標準設定では、カテゴリーアーカイブを月別に分割したページも出力されます。
MT4の標準テンプレートだと、カテゴリーアーカイブページのサイドバーには、月別カテゴリーアーカイブへのリンクも出力されます。
各カテゴリーの過去のブログ記事も読めるようにしたいのであれば、月別のカテゴリーアーカイブを利用することをお勧めします。
Movable Typeのプラグイン集「MT Cloud Starter Kit」をぜひご利用ください
hiro
ゲストブックに この件について投稿した者です。
なるほど、一括出力もできないことはないけれど、今後は 「カテゴリーの月別分割」 を利用した方が良いわけですね。
たしかに、うちのブログも三年続き、最多のカテゴリーは 150件を超えましたし、いつまでも一括出力を続けられるものではないですね。
わかりやすい解説を迅速に記事にしてくださって ありがとうございました。
猛暑が続いていますが、お体を壊されないよう、これからも頑張ってください!
oscar
こんにちは、壱さん。
私の勘違いかも知れないですが、MT4のデフォルトの動作(オプション指定なしの状態)が、設定画面で指定した件数になっていると思うのですが。
limit="auto"を無くしても、結果は同じになりませんか。
壱からoscarへの返信
>oscarさん
こんにちは。
デフォルトの動作は、インデックステンプレートでは設定画面で設定した件数のエントリーが出力されますが、アーカイブテンプレートでは全件出力されます。
TAEKOからoscarへの返信
初めまして。
いつも参考にさせていただいてます。
MT4からはカテゴリーアーカイブは設定画面で指定した件数になるように仕様変更されています。ベータ版で気が付いてsixapartに報告したところ、そのようにお返事いただきました。ですので、MT4では<MTEntries>のみではカテゴリーに全件表示させることはできません。<MTEntries lastn="9999">のように表示件数を指定してあげる必要があります(lastn="0"でもいけますね)。
なお、MT4で仕様変更された理由は壱さんの推測された通り、再構築時の負担を避けるためだそうです。カテゴリーアーカイブの過去ログを見るには月別カテゴリーを利用して下さいとのことでした。
壱からoscarへの返信
>TAEKOさん
こんにちは。
oscarさんにTAEKOさんとツッコミが入ったので、「これはもしやダイナミックとスタティックで動作が違うのでは?」と思って、ダイナミックでの動作を見てみました。
するとそのとおりで、スタティックだとlimitを外せば全件出力になりましたが、ダイナミックだとlimitを外しても効果なしでした。
これはMT4の不具合というところでしょうか。
oscarからoscarへの返信
なるほど、ダイナミックでの動作の違いですか。
確かに私はアーカイブはダイナミック・パブリッシングにしてますね。
インデックステンプレートでも、アーカイブインデックスは件数制限かかるみたいですよ。それともページ分割で試しているプラグインのせいかな?
TAEKOからoscarへの返信
お返事ありがとうございます。
あらら、スタティックでは<MTEntries>だけで全件表示できるのですね。
もしかしたらバグレポートした時に説明が足りなくてどこが問題なのかが正しく伝わってなかったのかも…。
もう一度sixapartに問い合わせし直してみようと思います。
TAEKOからoscarへの返信
たびたびすみません。
sixapartからお返事いただいたので報告を。
MT4では基本的にはカテゴリアーカイブは既定値分の表示しか出さないという仕様になっているが、デフォルトテンプレートで使われていないパターンのタグ(limit="auto"をなくして<MTEntries>のみで出力)を使う場合の動作の確認が不十分だったようだ、とのことだそうです。
この件に関しては他の方からも問い合わせが来ているそうなので、<MTEntries>のみで出力した場合の動作をどちらに合わせるべきか、再度仕様検討されるとのことでした。
壱からoscarへの返信
>TAEKOさん
こんにちは。情報ありがとうございます。
とりあえずは、アーカイブ内のエントリーをすべて出力するなら、<MTEntries lastn="9999">とでもしておくのが無難そうです。