概要
is_main_query
フィルタは、現在の投稿情報が最初に検索されたものか調べるために使用されます。このフィルタは、WordPressのメインクエリを操作し、テーマやプラグイン開発者が特定の条件に基づいてクエリの動作を変更するのに役立ちます。特に、特定のページや条件に応じて投稿のループをカスタマイズする場合に非常に便利です。
is_main_query
フィルタは以下のような機能を実装する際によく使われます:
- 特定のカスタム投稿タイプの表示条件を変更
- 特定のタクソノミーアーカイブの内容をカスタマイズ
- ホームページやフロントページのクエリ制御
- 特定のメタデータを持つ投稿だけを表示
- ウィジェットエリア内のクエリの変更
- ページネーションのカスタマイズ
- 投稿の並び順を変更
- フィルター条件に基づくクエリの追加
構文
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');
}
});
このサンプルでは、検索結果ページで公開されている投稿のみを表示します。これにより、下書きやトラッシュされた投稿は検索結果に表示されません。