概要
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
という特別なテンプレートを使用することを示しています。