通常投稿とカスタム投稿タイプ、また複数の投稿タイプ別にテーマファイルを分離する方法

WordPressの場合、テーマファイル内で「カテゴリ」や「固定ページ」、「カスタム投稿タイプ」で条件分岐してデザインレイアウトを変更することも可能ですが、カスタム投稿タイプが複数有って、しかもそれぞれ全く異なったデザインが必要になる時は、1つのテーマファイル内で振分処理を行うのは非常に辛い場合がありますす。

WordPressでは、通常の投稿記事とカスタム投稿タイプの記事とでそれぞれデザインレイアウトを分けたい場合はもちろん、カスタム投稿タイプの中でも投稿タイプごとにデザインレイアウトが異なる場合であっても、テーマファイルを個々に持つことが可能です。

archive.php を分離する

カスタム投稿タイプ用にarchive.php を用意する場合は archive.php をコピーして、以下のようにテーマファイル名を変更します。
[php] archive-{カスタム投稿タイプ名}.php
[/php]
カスタム投稿タイプ毎にarchive.php を分離できます。
[php] archive-{カスタム投稿タイプA名}.php
archive-{カスタム投稿タイプB名}.php
archive-{カスタム投稿タイプC名}.php
archive-{カスタム投稿タイプD名}.php
archive-{カスタム投稿タイプE名}.php
[/php]

single.php を分離する

カスタム投稿タイプ用にsingle.php を用意する場合は(1)同様に記事詳細ページに当たる single.php をコピーして、以下のようにテーマファイル名を変更します。
[php] single-{カスタム投稿タイプ名}.php
[/php]
これまた(1)同様、カスタム投稿タイプ毎にsingle.php を分離できます。
[php] single-{カスタム投稿タイプA名}.php
single-{カスタム投稿タイプB名}.php
single-{カスタム投稿タイプC名}.php
single-{カスタム投稿タイプD名}.php
single-{カスタム投稿タイプE名}.php
[/php]

ヘッダー、サイドバー、フッターファイルを分離する

header.php やsidebar.php、footer.php などのテンプレートファイルも分離可能です。

通常、index.phpなどのテーマファイルであれば、ヘッダーファイルであれば <?php get_header();?>、フッターファイルであれば <?php get_footer();?> を利用しますが、get_template_part() を利用することで別のヘッダーファイルやフッターファイルを引っ張ってくることができます。

header-{カスタム投稿タイプ名}.phpfooter-{カスタム投稿タイプ名}.php という名前のファイルをあらかじめ用意し、archive-{カスタム投稿タイプ名}.php やsingle-{カスタム投稿タイプ名}.php のテーマファイル内で以下のように記述します。
[php] <?php
//header
get_template_part(‘header-{カスタム投稿タイプ名}’);

//sidebar
get_template_part(‘sidebar-{カスタム投稿タイプ名}’);

//footer
get_template_part(‘footer-{カスタム投稿タイプ名}’);
?>
[/php]

search.php を分離する

通常の記事とカスタム投稿タイプの記事でデザインレイアウトが異なる場合、同じsearch.php ファイルで検索結果を出力するとデザインが崩れて困ってしまうことがあります。

そのような場合にsearch.php とsearch-{カスタム投稿タイプ名}.php とで検索結果ページのレイアウトを変更することが可能です。

まずは funtions.php に以下のコードを追記します。
[php] <?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’);
?>
[/php]
あとは投稿タイプ別に search-{カスタム投稿タイプ名}.php の名前で用意し、サーバにアップします。

これは、通常の投稿記事とカスタム投稿タイプの検索結果を変えられるだけでなく、カスタム投稿タイプの中でも {カスタム投稿タイプA} と {カスタム投稿タイプB} とで検索結果のレイアウトを変更できるというメリットもあります。

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください