説明
is_main_query() は、現在のクエリがメインクエリかどうかを判定する関数です。
基本構文
is_main_query(): bool
引数
引数はありません。
戻り値
条件に当てはまれば true、そうでなければ false。
使い方(サンプル)
function my_pre_get_posts( $query ) {
if ( ! is_admin() && $query->is_main_query() ) {
$query->set( 'posts_per_page', 5 );
}
}
add_action( 'pre_get_posts', 'my_pre_get_posts' );
注意点
pre_get_postsでメインクエリだけを書き換えるときの定番の条件です。- グローバル関数
is_main_query()のほか、$query->is_main_query()の形でもよく使います。
実務での使いどころ
pre_get_postsの中で、メインクエリだけを書き換えるとき。- サブクエリ(ウィジェットなど)に、影響させたくないとき。
よくあるミスと対処
pre_get_postsの中で、グローバルのis_main_query()ではなく、$query->is_main_query()を使う。- メインクエリの判定だけで、管理画面を除外していない。
is_admin()も確認する。
NG例
add_action( 'pre_get_posts', function ( $query ) {
$query->set( 'posts_per_page', 3 ); // すべてのクエリが対象になる
} );
OK例
add_action( 'pre_get_posts', function ( $query ) {
if ( is_admin() || ! $query->is_main_query() ) {
return;
}
$query->set( 'posts_per_page', 3 );
} );
使い分け早見表
| 場面 | 使うもの |
|---|---|
| フックの中で判定 | $query->is_main_query() |
テンプレート内で、メインクエリかを判定(副クエリのループ中でも、true になる点に注意) |
is_main_query() |
| 管理画面を除外 | is_admin() |
関連項目
公式リファレンス:is_main_query() | Function | WordPress Developer Resources

コメント