「WordPressで学ぶPHP(4)通信編」を発売しました。
本書は、「WordPressで学ぶPHP(1)変数・制御構造編」「WordPressで学ぶPHP(2)データ構造編」「WordPressで学ぶPHP(3)関数編」の続編にあたり、Webブラウザとサーバー(PHP)との通信と、PHPから他のサーバーに通信することについて解説します。
ブログ記事がないカテゴリアーカイブが出力されない(MT5.2.2)
MTQに、「Movable Type 5.2.2にアップグレードすると、ブログ記事がないカテゴリアーカイブが出力されなくなった」という質問が上がっていました。
この件について調べてみました。
1.問題の原因
Movable Type 5.2では、ブログ記事がないカテゴリのアーカイブページも出力されていました。
しかし、fogbugzに「ある条件下でカテゴリアーカイブページが削除されない」という不具合の報告がありました。
この不具合の修正によって、ブログ記事がないカテゴリでは、アーカイブページが出力されなくなりました。
2.mt-config.cgiによる回避
mt-config.cgiに以下の行を追加すると、一応はブログ記事がないカテゴリでもアーカイブページを出力できるようになります。
DeleteFilesAtRebuild 0
ただし、このようにすると、以下の問題が起こります。
- ブログ記事を削除したときに、その記事のアーカイブページが残ったままになります。
- カテゴリ自体を削除したときに、そのカテゴリのアーカイブページが残ったままになります。
3.ソースコードの書き換えによる回避
Movable Type 5.2.2のlib/MT/ArchiveType/Category.pmで、166行目を以下のように書き換えると、記事がないカテゴリのアーカイブページは出力され、カテゴリ自体を削除したときにはそのアーカイブページが削除されるようになりました。
書き換え前
MT::ArchiveType::archive_entries_count( $obj, \%params );
書き換え後
return 1;
ただ、この書き換えを行うと、カテゴリとブログ記事に絡む他の点で、何らかの副作用が出るかもしれません。
3.カテゴリアーカイブページの出力方法を選択可能にしてほしい
fogbugzの「ある条件下でカテゴリアーカイブページが削除されない」は、「記事がないカテゴリでは、アーカイブページは存在すべきではない」との考えに基づいた修正になっています。
その仕様の方が好ましい場合も多いと思います。
しかし、MTQでご質問された方の事例にように、記事がないカテゴリでも、アーカイブページが必要な場合もあります。
記事がないカテゴリで、カテゴリアーカイブページを出力するかどうかを、設定で選べるようにしてほしいです。