概要
get_query_templateフィルタは、WordPressにおいてテンプレートのパス名を取得する際に使用される非常に便利なフィルタです。このフィルタを使用すると、コアやプラグインの一部においてカスタムテンプレートのロジックを実装し、テーマのデフォルトのテンプレートファイルを変更することができます。特に以下のような機能を実装する際によく使われます:
- カスタム投稿タイプのテンプレートを指定する。
- カスタムカテゴリーやタグのテンプレートを指定する。
- 特定のユーザーに基づいた条件でテンプレートを変更する。
- 条件に応じて異なるページテンプレートを適用する。
- 404エラーページ用の特別なテンプレートを提供する。
- 新しいテンプレートファイルをプラグインから作成する。
- ブロックエディター用のカスタムテンプレートを割り当てる。
- 特定の条件下で代替的なテンプレートを使用する。
構文
add_filter('get_query_template', 'my_custom_template_function', 10, 2);
パラメータ
$template: もともとのテンプレートファイルのパス。$type: テンプレートのタイプ(例:single,page,archiveなど)。
戻り値
- 修正されたテンプレートファイルのパスを返します。
関連する関数
使用可能なバージョン
このフィルタは、WordPress 3.0以降で使用可能です。
コアファイルのパス
wp-includes/query.php
この関数のアクションでの使用可能性
| アクション | 使用例 |
|---|---|
| mu_plugin_loaded | |
| registered_post_type | |
| plugins_loaded | |
| wp_roles_init | |
| setup_theme | |
| after_setup_theme | |
| set_current_user | |
| init | |
| register_sidebar | |
| wp_loaded | |
| send_headers | |
| parse_query | |
| pre_get_posts | |
| wp | |
| template_redirect | 〇 |
| get_header | |
| wp_head |
サンプルコード
サンプル1: カスタム投稿タイプのテンプレートを指定
add_filter('get_query_template', 'custom_post_type_template', 10, 2);
function custom_post_type_template($template, $type) {
if ($type === 'custom_post_type') {
$new_template = locate_template(['custom-post-type.php']);
if (!empty($new_template)) {
return $new_template;
}
}
return $template;
}
このコードは、特定のカスタム投稿タイプのテンプレートを指定しています。custom-post-type.phpが存在する場合、そのテンプレートファイルを使用します。
サンプル2: 特定の条件で404ページを変更
add_filter('get_query_template', 'custom_404_template', 10, 2);
function custom_404_template($template, $type) {
if (is_404()) {
$custom_template = locate_template(['custom-404.php']);
if (!empty($custom_template)) {
return $custom_template;
}
}
return $template;
}
このコードは、404エラーページが表示される場合にcustom-404.phpというカスタムテンプレートを使用するようにしています。
サンプル3: 投稿のテンプレートをカスタマイズ
add_filter('get_query_template', 'single_template_customization', 10, 2);
function single_template_customization($template, $type) {
if ($type === 'single') {
return get_template_directory() . '/single-custom.php';
}
return $template;
}
このコードでは、シングル投稿の場合にsingle-custom.phpを使用するようにしています。
サンプル4: タグアーカイブ用のカスタムテンプレート
add_filter('get_query_template', 'tag_template_customization', 10, 2);
function tag_template_customization($template, $type) {
if ($type === 'tag') {
return get_template_directory() . '/tag-custom.php';
}
return $template;
}
このコードは、タグアーカイブにおけるテンプレートをtag-custom.phpに変更しています。
サンプル5: 特定のユーザー用の条件付きテンプレート
add_filter('get_query_template', 'user_specific_template', 10, 2);
function user_specific_template($template, $type) {
if (is_user_logged_in() && is_single()) {
return get_template_directory() . '/user-single.php';
}
return $template;
}
このコードは、ログインしているユーザーがシングル投稿を開く場合にuser-single.phpという特別なテンプレートを使用することを示しています。