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

概要

is_main_queryフィルタは、現在の投稿情報が最初に検索されたものか調べるために使用されます。このフィルタは、WordPressのメインクエリを操作し、テーマやプラグイン開発者が特定の条件に基づいてクエリの動作を変更するのに役立ちます。特に、特定のページや条件に応じて投稿のループをカスタマイズする場合に非常に便利です。

is_main_queryフィルタは以下のような機能を実装する際によく使われます:

  1. 特定のカスタム投稿タイプの表示条件を変更
  2. 特定のタクソノミーアーカイブの内容をカスタマイズ
  3. ホームページやフロントページのクエリ制御
  4. 特定のメタデータを持つ投稿だけを表示
  5. ウィジェットエリア内のクエリの変更
  6. ページネーションのカスタマイズ
  7. 投稿の並び順を変更
  8. フィルター条件に基づくクエリの追加

構文

add_filter('is_main_query', 'your_function_name');

パラメータ

  • $query (WP_Query): 現在のクエリオブジェクト

戻り値

  • bool: クエリがメインクエリである場合は true、それ以外は false。

関連する関数

このフィルタを使用可能なバージョン

is_main_query フィルタは、WordPress 4.1以降で使用可能です。

コアファイルのパス

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_action('pre_get_posts', function($query) {
    if ($query->is_main_query() && $query->is_home()) {
        $query->set('posts_per_page', 5);
    }
});

このコードは、メインクエリがホームページの場合、表示する投稿の数を5に制限します。

サンプル2: 特定のカスタム投稿タイプをフィルタリング

add_action('pre_get_posts', function($query) {
    if ($query->is_main_query() && $query->is_post_type_archive('books')) {
        $query->set('meta_key', 'publish_date');
        $query->set('orderby', 'meta_value');
        $query->set('order', 'DESC');
    }
});

このコードは、カスタム投稿タイプ「books」のアーカイブページへアクセスすると、publish_dateメタキーに基づく投稿の並び替えを行います。

サンプル3: タクソノミーアーカイブのカスタマイズ

add_action('pre_get_posts', function($query) {
    if ($query->is_main_query() && $query->is_tax('genre')) {
        $query->set('posts_per_page', 10);
    }
});

このサンプルでは、タクソノミー「genre」のアーカイブで表示する投稿数を10に設定します。

サンプル4: ページネーションのカスタマイズ

add_action('pre_get_posts', function($query) {
    if ($query->is_main_query() && $query->is_category()) {
        $query->set('paged', get_query_var('paged') ? get_query_var('paged') : 1);
    }
});

このコードは、カテゴリーアーカイブの場合にページネーションを適切に機能させるための設定です。

サンプル5: 特定の条件下での投稿の非表示

add_action('pre_get_posts', function($query) {
    if ($query->is_main_query() && $query->is_search()) {
        $query->set('post_status', 'publish');
    }
});

このサンプルでは、検索結果ページで公開されている投稿のみを表示します。これにより、下書きやトラッシュされた投稿は検索結果に表示されません。

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


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