single.phpの条件分岐が効かなかった時の対応

更新2021/11/09

投稿ページの表示をするテンプレートファイル single.php。

サイトによっては投稿によって表示レイアウトやスタイルを変えたりすることもあると思います。
そんな時にはsingle-〇〇.php といったファイルを作り、single.phpにはどのページでどのファイルを読み込むか条件分岐をかけて、それぞれ別のファイルを読み込むようにしています。

この条件分岐がうまく動作してくれなかったことがあったので、その対応をメモします。

ハマってしまったこと

通常の「投稿」に対してと、それ以外の複数の「カスタム投稿」のテンプレートファイルを分けて作りたかったので、「single-post.php」と「single-other.php」というファイルを作りました。

それを single.php でそれぞれのページで使うように、条件分岐を設定。

<?php
if (is_singular()) {
  include(TEMPLATEPATH.'/single-other.php');
} else {
  include(TEMPLATEPATH.'/single-post.php');
}
?>

このようにすれば、カスタム投稿の投稿ページでは single-other.phpが表示され、通常の投稿ページの場合はsingle-post.phpが表示されると思っていました。

しかし、どの投稿ページでも single-post.php しか読み込まれません。

条件分岐がうまくいっていないのかと思って、記述を逆にしてみましたが、それでも single-post.php の内容しか表示されません。

読み込むファイル名順があった

私がハマってしまった原因は「ファイル名」でした。

single-post.php というファイル名にすると、single.php より先に読み込まれていたんです。
single.php が読み込まれなければ、そりゃ single-other.php も表示されません。

single-post.php を single-default.php というファイル名に変更したらうまく表示されました。

single.php のファイルの作り方

WordPressのthemeファイルの管理は作る人によって変わると思いますが、同じようなファイルの作り方をしている方の参考になれば幸いです。

一種類しか投稿タイプがなく、一つのテンプレートで十分スタイル変更できるならsingle.phpに直接内容を記述してもいいですし、各投稿それぞれでファイルを分けるならファイル名をURLに合わせることで、わざわざ single.php で条件分岐をかけなくても自動的に読み込まれます。

うまくいかないことがあったら、WordPressの仕様などを見直すと解決策が見つかるかもしれません。

カテゴリー : WordPress

タグ :

TOPへ