WordPressの場合、テーマファイル内で「カテゴリ」や「固定ページ」、「カスタム投稿タイプ」で条件分岐してデザインレイアウトを変更することも可能ですが、カスタム投稿タイプが複数有って、しかもそれぞれ全く異なったデザインが必要になる時は、1つのテーマファイル内で振分処理を行うのは非常に辛い場合がありますす。
WordPressでは、通常の投稿記事とカスタム投稿タイプの記事とでそれぞれデザインレイアウトを分けたい場合はもちろん、カスタム投稿タイプの中でも投稿タイプごとにデザインレイアウトが異なる場合であっても、テーマファイルを個々に持つことが可能です。
archive.php を分離する
カスタム投稿タイプ用にarchive.phpを用意する場合は、archive.phpをコピーして、以下のようにテーマファイル名を変更します。
1 |
archive-{カスタム投稿タイプ名}.php |
カスタム投稿タイプ毎にarchive.phpを分離できます。
1 2 3 4 5 |
archive-{カスタム投稿タイプA名}.php archive-{カスタム投稿タイプB名}.php archive-{カスタム投稿タイプC名}.php archive-{カスタム投稿タイプD名}.php archive-{カスタム投稿タイプE名}.php |
single.php を分離する
カスタム投稿タイプ用にsingle.phpを用意する場合は、(1)同様に記事詳細ページに当たる single.phpをコピーして、以下のようにテーマファイル名を変更します。
1 |
single-{カスタム投稿タイプ名}.php |
(1)同様、カスタム投稿タイプ毎にsingle.phpを分離できます。
1 2 3 4 5 |
single-{カスタム投稿タイプA名}.php single-{カスタム投稿タイプB名}.php single-{カスタム投稿タイプC名}.php single-{カスタム投稿タイプD名}.php single-{カスタム投稿タイプE名}.php |
ヘッダー、サイドバー、フッターファイルを分離する
header.phpやsidebar.php、footer.phpなどのテンプレートファイルも分離可能です。通常、index.phpなどのテーマファイルであれば、ヘッダーファイルであれば <?php get_header();?>、フッターファイルであれば<?php get_footer();?>を利用しますが、get_template_part()を利用することで別のヘッダーファイルやフッターファイルを引っ張ってくることができます。
header-{カスタム投稿タイプ名}.phpやfooter-{カスタム投稿タイプ名}.phpという名前のファイルをあらかじめ用意し、archive-{カスタム投稿タイプ名}.phpやsingle-{カスタム投稿タイプ名}.phpのテーマファイル内で以下のように記述します。
1 2 3 4 5 6 7 8 9 10 |
<?php //header get_template_part('header-{カスタム投稿タイプ名}'); //sidebar get_template_part('sidebar-{カスタム投稿タイプ名}'); //footer get_template_part('footer-{カスタム投稿タイプ名}'); ?> |
search.php を分離する
通常の記事とカスタム投稿タイプの記事でデザインレイアウトが異なる場合、同じsearch.phpファイルで検索結果を出力するとデザインが崩れて困ってしまうことがあります。そのような場合にsearch.phpとsearch-{カスタム投稿タイプ名}.phpとで検索結果ページのレイアウトを変更することが可能です。
まずはfuntions.phpに以下のコードを追記します。
[p
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<?php function enable_post_type_search_template($template){ if ( is_search() ) { $post_types = get_query_var('post_type'); foreach ( (array) $post_types as $post_type ) $templates[] = "search-{$post_type}.php"; $templates[] = 'search.php'; $template = get_query_template('search',$templates); } return $template; } add_filter('template_include','enable_post_type_search_template'); ?> |
あとは投稿タイプ別にsearch-{カスタム投稿タイプ名}.phpの名前で用意し、サーバにアップします。
これは、通常の投稿記事とカスタム投稿タイプの検索結果を変えられるだけでなく、カスタム投稿タイプの中でも {カスタム投稿タイプA} と {カスタム投稿タイプB} とで検索結果のレイアウトを変更できるというメリットもあります。
参考サイト
WordPressの検索結果で投稿タイプごとに違うテンプレートファイルを使う
コメント