ワードプレスのget_post_type_archive_templateフィルタの使用方法・解説

概要

get_post_type_archive_templateフィルタは、WordPressにおいて特定の投稿タイプのアーカイブテンプレートを取得する際に、デフォルトのテンプレートを変更する機能を提供します。このフィルタを使用することで、特定の投稿タイプに対して独自のアーカイブテンプレートを指定することができ、テーマやプラグインのカスタマイズが容易になります。

このフィルタが使用される場面

  1. 投稿タイプごとの専用のアーカイブページを作成する時
  2. カスタム投稿タイプのクエリを最適化する際
  3. 特定の条件に基づいてテンプレートを変更する場合
  4. テンプレート階層を活用して独自のデザインを適用する時
  5. プラグインによって新たに定義された投稿タイプのアーカイブをサポートする場合
  6. 多言語サイトにおいて言語別のアーカイブテンプレートを設定する時
  7. SEO対策のために特定の投稿タイプのデザインを変更する際
  8. ユーザーのリクエストに基づいて動的にテンプレートを変更する場合

構文

add_filter('get_post_type_archive_template', 'your_custom_template_function');

パラメータ

  • $template: 取得されたテンプレートファイルのパス。フィルタを通過することで変更可能。

戻り値

テンプレートファイルのパス(変更された場合、またはデフォルトのパス)。

関連する関数

filters

使用可能なバージョン

このフィルタは、WordPressバージョン 4.4 から使用可能です。

コアファイルのパス

wp-includes/post.php

サンプルコード

サンプル1: カスタムテンプレートの追加

このサンプルコードは、カスタム投稿タイプ「books」のアーカイブページで異なるテンプレートを指定します。

add_filter('get_post_type_archive_template', function($template) {
    if (is_post_type_archive('books')) {
        $template = locate_template('archive-books.php');
    }
    return $template;
});

サンプル2: デフォルトのテンプレートを変更する

特定の投稿タイプ「movies」のアーカイブ用テンプレートを変更するサンプルコードです。

add_filter('get_post_type_archive_template', function($template) {
    if (is_post_type_archive('movies')) {
        return get_stylesheet_directory() . '/custom-archive-movies.php';
    }
    return $template;
});

サンプル3: デフォルトテンプレートのロードをスキップ

特定の条件に基づいてロードするテンプレートを変更するサンプルです。

add_filter('get_post_type_archive_template', function($template) {
    if (is_post_type_archive('products')) {
        return ''; // デフォルトのテンプレートをロードしない
    }
    return $template;
});

サンプル4: 複数のカスタム投稿タイプに対応

複数のカスタム投稿タイプで同様のカスタムテンプレートを適用するサンプルです。

add_filter('get_post_type_archive_template', function($template) {
    if (is_post_type_archive(['services', 'portfolios'])) {
        return get_stylesheet_directory() . '/archive-services-portfolios.php';
    }
    return $template;
});

サンプル5: テンプレートを条件で切り替える

条件に応じて異なるテンプレートを適用する例です。

add_filter('get_post_type_archive_template', function($template) {
    if (is_post_type_archive('events') && is_user_logged_in()) {
        return get_stylesheet_directory() . '/archive-events-logged-in.php';
    } elseif (is_post_type_archive('events')) {
        return get_stylesheet_directory() . '/archive-events-guest.php';
    }
    return $template;
});

この関数のアクションでの使用可能性

アクション名 使用可能性
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

非推奨または削除されたバージョン

このフィルタは、特定の非推奨または削除されたバージョンはありません。

この関数について質問する


上の計算式の答えを入力してください