ブログ
BLOG
こんにちは。
今回は、Word Pressで投稿やカスタム投稿でのsingle.phpをカテゴリー毎やターム毎に分岐する方法を紹介できればと思います。
Word Press構築の際にsingle.phpを1つで管理されている事が多いと思いますが、カテゴリー毎に見出しのタイトルを変更したりベースカラーをカテゴリー色に合わせたいとケースもまれにあったりします。
そんな時の対処方になりますので参考になればと思います。
目次
1.投稿でのsingle.php分岐方法
<?php
$post = $wp_query->post;
if ( in_category('a') ) {
include(TEMPLATEPATH.'/single-a.php');
} elseif ( in_category('b') ) {
include(TEMPLATEPATH.'/single-b.php');
} else {
include(TEMPLATEPATH.'/single-default.php');
}
?>
上記のように形でsingle.phpの中身を入れます。
カテゴリの名称や呼び出すsingle-a.php等の名前は合わせて変更下さい。
仕様としては、
■「a」というカテゴリの場合は、single-a.phpで呼び出し
■「b」というカテゴリの場合は、single-b.phpで呼び出し
■いずれにも属さない場合はsingle-default.phpで呼び出し
という形になります。
なのでカテゴリーが2つで分岐の場合は、
■分岐を指定する為の「single.php」
■カテゴリ毎に使用する「single-a.php」
■カテゴリ毎に使用する「single-b.php」
■いずれにも属さない場合の「single-default.php」
計4つのphpファイルを作成する形になります。
カテゴリが多ければその分追加していく形になります。
2.カスタム投稿でのsingle.php分岐方法
<?php
// タームがaだったら、single-a.phpというテンプレートを表示
if (is_object_in_term( $post->ID, 'タクソノミー名', 'a')) {
get_template_part('single-a');
}
// タームがbだったら、single-b.phpというテンプレートを表示
else if (is_object_in_term( $post->ID, 'タクソノミー名', 'b')) {
get_template_part('single-b');
}
// それ以外のタームだったら、single-default.phpというテンプレートを表示
else {
get_template_part('single-default');
}
?>
こちらも投稿と同じような形で呼び出すのですが、タクソノミー名とターム名で指定する形になりますので、投稿と同じソースでは分岐ができない点にご注意下さい。
投稿は投稿、カスタム投稿はカスタム投稿で分岐方法が異なります。
3.まとめ・注意点
今回ご紹介させていただいたsingle.phpの分岐は便利な方法ですが注意点が何点かあるため、それをふまえ運用していただければと思いますのでよろしくお願いいたします。
同様の分岐の紹介は色々あっても使用した際の注意点はあまりなかったため、自分も実装後に気づきました。
【注意点1】
カテゴリ・タームが複数指定されていると分岐ができません。
例えば1記事でカテゴリを「a」「b」と二つ指定されていると、single.phpで呼び出す順番に依存するため、「a」のカテゴリの方で優先して分岐されてしまいます。
【注意点2】
通常シングルページのページャー部分では、同じカテゴリー内での「前の記事」「次の記事」へリンクさせることができます。
第三引数に「true」を指定することで、記事と同じカテゴリー内で「前の記事」・「次の記事」へのリンクを指定することができるのですが、single.phpを分岐することでカテゴリー内でのリンクができず、全記事に対して「前の記事」・「次の記事」となってしまいます。
今後も自分が行った作業の中で皆様のお役に立てる情報を配信していければと思いますので、よろしくお願いいたします。
愛知 県内から 名古屋 を中心にホームページ制作を行っている会社
株式会社 WWG(ダブルダブルジー)
愛知県 名古屋市中村区名駅5-16-17 花車ビル南館5F
TEL: 052-890-7007(2021-12/16~変更)
※ ホームページ制作や活用サポートのお問い合わせはコチラから