【WordPress】PHPテンプレートを特定の条件で変更する方法
WordPressで、特定のページだけPHPテンプレートを変更したい時は、カスタムテンプレートやpage-{slug}.phpのようなテンプレート階層を使用するのが一般的かと思います。
ですが、今回は固定ページ用に作ったカスタムテンプレートをタクソノミーページにも適用したいという状況がありましたので、その方法についてお伝えしたいと思います。
目次
1. タクソノミーページにカスタムテンプレートを適用する
固定ページ用に作成したカスタムテンプレートcustome-template.phpをcustom-taxonomyというタクソノミーのアーカイブページにも適用しています。
function use_custom_template_for_taxonomies($template) {
if ( is_tax('custom-taxonomy') ) {
$new_template = locate_template('custom-template.php');
if ($new_template) {
return $new_template;
}
}
return $template;
}
add_filter('template_include', 'use_custom_template_for_taxonomies');
locate_template()関数で、子テーマまたは親テーマの中にcustom-template.phpが存在するかどうかを確認し、存在する場合にはファイルパスが返されます。存在しない場合にはfalseが返ります。
固定ページ用に記述したカスタムテンプレートの宣言は変更する必要はありません。
/*
Template Name: カスタムテンプレート
*/
2. template_includeフックの概要
用途
WordPressで使用されるテンプレートファイルを動的に変更するためのアクションフック。
フックのタイミング
WordPressがどのテンプレートファイルを使用するかを決定する直前に実行される。
3. template_includeフックの活用例
3-1. 特定の言語やロケールでテンプレートを切り替える
多言語サイト等で、訪問者の言語に応じてテンプレートを切り替え。
function locale_based_template($template) {
if (get_locale() === 'ja') {
$japanese_template = locate_template('template-ja.php');
if ($japanese_template) {
return $japanese_template;
}
}
return $template;
}
add_filter('template_include', 'locale_based_template');
3-2. ログインユーザーと未ログインユーザーでテンプレートを切り替える
管理者などのログインユーザーと、一般のユーザーで異なるテンプレートを表示。
function user_role_template($template) {
if (is_user_logged_in() && current_user_can('administrator')) {
$admin_template = locate_template('admin-dashboard.php');
if ($admin_template) {
return $admin_template;
}
}
return $template;
}
add_filter('template_include', 'user_role_template');
3-3. プラグインにあるテンプレートを特定のページに適用する
特定のプラグインの中にあるテンプレートを、custom-pageというページに適用したい場合。
function plugin_template_override($template) {
if (is_page('custom-page')) {
$plugin_template = plugin_dir_path(__FILE__) . 'templates/plugin-page.php';
if (file_exists($plugin_template)) {
return $plugin_template;
}
}
return $template;
}
add_filter('template_include', 'plugin_template_override');
参考)
・WordPress Developer Resources
・Chat GPT 4o