あまり理解できていなかった点がやっと掴めたと思うので、メモとして記事に。
WordPressの基本的な知識であり、テーマをカスタムしたりする方には今更な話だと思いますので、特に身になる内容ではありません。
個人的には未熟さの証明に過ぎませんが、どなたかの役に立つのであればとブログにメモする次第です。
home.phpの中身
home.phpの中身、つまり、home.phpはそもそもどういうデータを持っているのでしょうか?
結論から言えば、index.phpと同じ模様です。
つまり、最新の投稿が$postの中に格納された状態になっています。先頭に固定表示設定した投稿がある場合はその投稿が格納されます。
home.phpだからといって、index.phpと中身が変わる訳ではない、ということです。
条件分岐タグへの影響
$postの中に既に格納されているため、呼び出して表示しているかどうかが問題にはなりません。ループを作っていなくても、the_contentがなくても、最新の投稿があるものとして動作します。
そのため、is_categoryなどの条件分岐タグにも影響を与えます。
最新記事のカテゴリーが変わればhome.phpのカテゴリーも変わる
例えば、最新記事カテゴリーIDが「1」であれば、home.php(トップページ)のカテゴリーも「1」に属する形になります。更新によって最新記事カテゴリーが「2」に変われば、home.phpも「2」に変わります。
heder.phpやfooter.phpなどの共通部分に、is_categoryで「1」と「2」で分岐している部分があった場合、分岐が動作してしまいます。
is_archiveでは分岐できない
is_categoryは「カテゴリーアーカイブが表示されているかどうかをチェックする」分岐条件タグです。これが動くということは、home.phpもアーカイブページでis_archiveので分岐できるのでしょうか?
結論としては、分岐できません。home.phpを目指して分岐させるには、is_home(やis_front_page)が必要です。
これは、テンプレート階層の構造が影響していて、最初に以下のどのページかが判断されるためだと思います。
- 404ページ
- 検索結果ページ
- アーカイブページ
- 個別ページ
- サイトフロントページ(front-page.phpやhome.php)
- ブログ投稿インデックスページ(home.php)
- コメントポップアップページ
同階層に「アーカイブページ」と「ブログ投稿インデックスページ」があるため、home.phpはまず「ブログ投稿インデックスページ」と判断されて「アーカイブページ」とは判断されないのでしょう。
結び
「分かっていたつもりが分かっていなかった」というありふれた間違いですが、基本的な部分であるだけに深刻なので胃が痛い思いです…。
この記事の内容自体もまだ間違っている可能性もありますので、その際はご指摘いただけますと幸いです。
使ってはいるけれど中身を分かっていないものも多いので、適宜調べて納得して進みたいです。
共通部分での分岐
home.phpやindex.phpに影響を受けない形で、header.phpなどの共通部分にis_categoryなどの分岐をどのように書けば良いのか?
最初に!is_homeや!is_front_pageで括って分岐させるだけですね。動作がわかれば対応も簡単です。
home.phpとfront-page.php
home.phpとfront-page.phpは違うものですが、今回の主題に関して言えば違いはないと思います。この記事のhome.phpをfornt-page.phpに読み替えていただいても問題ないはずです。
ちなみに、home.phpとfront-page.phpに関してはWordPress Codexなどをご覧下さい。
0人がこの記事を評価
役に立ったよという方は上の「記事を評価する」ボタンをクリックしてもらえると嬉しいです。
連投防止のためにCookie使用。SNSへの投稿など他サービスとの連動は一切ありません。