WordPress 4.7 で追加された投稿タイプテンプレートが便利
WordPress 4.7 では、カスタムテンプレートに投稿タイプを指定することで、固定ページ以外の投稿タイプ、たとえば「投稿」やカスタム投稿タイプなどでテンプレートを使えるようになりました。あんまフューチャーされてない気がするので備忘録的に使い方をまとめました。
WordPress 4.6 以前ではカスタムテンプレートは基本的に固定ページでしか使えませんでした。カスタムテンプレートとは、テーマディレクトリ内に /* Template Name: テンプレート名 */
のコメントで始まるファイルを置くことで、投稿画面でテンプレートを選択して利用できるようになるというものです。
4.7 以降では、このテンプレートファイルを固定ページ以外でも使えるようになりました。
やりかた
テーマディレクトリ内に新規PHPファイルを用意し、冒頭を以下のようにします。
<?php
/**
* Template Name: テンプレート名
* Template Post Type: 投稿タイプ名
*/
このように Template Post Type を記述することで、テンプレートを有効にする投稿タイプを指定することができます。Template Post Type を記述しない場合は、従来どおり固定ページテンプレートとなります。
投稿タイプ名を複数指定したい場合は、カンマで区切ります。たとえば、「投稿」と「固定ページ」と「お知らせ」カスタム投稿タイプ(投稿タイプ名: news)でこのテンプレートを利用可能にしたい場合は、以下のようにします。
Template Post Type: post, page, news
ダッシュボードの投稿画面で、テンプレートが選択可能になっているか確認します。
後方互換性
WordPress 4.6 以前では Template Post Type が無視され、どのテンプレートも固定ページで選択できるようになってしまいます。Theme Handbook にこの解決方法が載っています。
function my_exclude_page_templates( $post_templates ) {
if ( version_compare( $GLOBALS['wp_version'], '4.7', '<' ) ) {
unset( $post_templates['templates/テンプレート名.php'] );
}
return $post_templates;
}
add_filter( 'theme_page_templates', 'my_exclude_page_templates' );
page 以外の Template Post Type を指定したテンプレートファイルを WP4.6 以前の場合に unset しています。テーマ開発者は、WordPress 4.9 のリリースぐらいまではこれをやっておいた方が良いかも?
まとめ
サイトごとのテーマ開発ではこれまでもカテゴリーなどでテンプレートファイルを分けていたのでアレですが、不特定多数の人が利用するような配布テーマでは開発の幅がさらに広がってワクワクしますね。