WordPressは柔軟なテンプレートシステムを提供しており、特定の条件に応じてカスタムテンプレートを読み込むことができます。この記事では、functions.phpを活用して特定のページやURLに合わせて自作テンプレートを適用する方法を解説します。
基本的な仕組み
template_includeフィルターを使うと、テンプレートファイルの読み込みをカスタマイズできます。このフィルターは、リクエストごとに読み込まれるテンプレートファイルのパスを変更するために使用します。
以下に、基本的なコード例を示します。
add_filter( 'template_include', function( $template ) {
if ( is_page() ) { // 固定ページの場合
$new_template = locate_template( ['my_page/page.php'] );
if ( $new_template !== '' ) {
$template = $new_template;
}
}
return $template;
});PHPこのコードは、固定ページがリクエストされた場合に、my_page/page.phpテンプレートを読み込みます。
特定のURLでテンプレートを変更する
特定のURLに基づいてテンプレートを切り替えたい場合、get_the_permalink()関数を使って実現できます。
add_filter( 'template_include', function( $template ) {
if ( get_the_permalink() === 'http://localhost/w3/chart/' ) {
$new_template = locate_template( ['my_page/Chart.js/chart.php'] );
if ( $new_template !== '' ) {
$template = $new_template;
}
}
return $template;
});PHPこのコードでは、URLがhttp://localhost/w3/chart/の場合にmy_page/Chart.js/chart.phpをテンプレートとして読み込みます。
コードの解説
- template_includeフィルター
このフィルターを使うことで、読み込まれるテンプレートファイルをフックして変更できます。 - 条件分岐
is_page()やget_the_permalink()を使い、条件に応じてテンプレートを切り替えます。
特定のURLの条件を増やす
複数の条件に基づいてテンプレートを切り替えたい場合、条件分岐を追加することも可能です。
add_filter( 'template_include', function( $template ) {
if ( is_category('news') ) { // カテゴリが「news」の場合
$new_template = locate_template( ['my_category/news.php'] );
if ( $new_template !== '' ) {
$template = $new_template;
}
} elseif ( is_single() && in_category('blog') ) { // 投稿タイプがブログの場合
$new_template = locate_template( ['my_single/blog.php'] );
if ( $new_template !== '' ) {
$template = $new_template;
}
}
return $template;
});PHP注意点
- ファイルの存在確認:
locate_templateを使うことで、指定したファイルが存在するか確認できます。ファイルが見つからない場合は、デフォルトテンプレートにフォールバックします。 - パフォーマンス:
条件分岐を増やしすぎるとサイトのパフォーマンスに影響する可能性があります。必要最低限の条件にとどめましょう。 - バックアップ:
テンプレートファイルやfunctions.phpを編集する前に必ずバックアップを取ってください。
固定ページのスラッグごとにテンプレートを自動判定
固定ページのスラッグに応じて page/スラッグ.php というテンプレートを自動的に読み込む方法を紹介します。親テーマ・子テーマの両方に対応しています。この方法だとコードが煩雑にならないのでスマートです。
add_filter('template_include', function($template) {
if (is_page()) {
$slug = get_post_field('post_name', get_post());
$custom = locate_template("page/{$slug}.php");
if ($custom) return $custom;
}
return $template;
});PHPこのコードは、現在表示中の固定ページのスラッグを取得し、page/スラッグ.php が存在すればそのテンプレートを適用します。locate_template() を使っているため、まず子テーマ内を検索し、なければ親テーマを参照します。
固定ページが多数ある場合は、使用中のテーマ内に page フォルダを作成して管理すると、テンプレートの整理や運用がしやすくなります。
まとめ
WordPressのtemplate_includeフィルターを使うことで、特定の条件に応じてカスタムテンプレートを読み込むことができます。この方法を活用すれば、サイトの柔軟性を高め、より高度なカスタマイズが可能になります。ぜひ、自分のサイトに合ったテンプレート切り替えを試してみてください。

コメント