is_main_query() の使い方|説明・引数・注意点

説明

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_admin()、get_posts()

公式リファレンス:is_main_query() | Function | WordPress Developer Resources

コメント

タイトルとURLをコピーしました