is_main_query()


WordPressのis_main_query()関数は、現在のクエリがメインクエリであるかを確認するために使用されます。

シンタックス

is_main_query();

is_main_query()は、メインクエリかどうかを確認し、trueまたはfalseを返します。主にpre_get_postsアクションやテンプレートファイル内で使用されます。

使用例

例1: メインクエリを判定して投稿数を変更する

pre_get_postsフックを使用して、ホームページの投稿数を変更します。

function modify_main_query( $query ) {
    if ( $query->is_main_query() && ! is_admin() && $query->is_home() ) {
        $query->set( 'posts_per_page', 5 );
    }
}
add_action( 'pre_get_posts', 'modify_main_query' );

例2: 特定のページでクエリをカスタマイズ

メインクエリがアーカイブページの場合、投稿の並び順を変更します。

function custom_archive_query( $query ) {
    if ( $query->is_main_query() && ! is_admin() && $query->is_archive() ) {
        $query->set( 'orderby', 'title' );
        $query->set( 'order', 'ASC' );
    }
}
add_action( 'pre_get_posts', 'custom_archive_query' );

例3: 管理画面を除外して条件を設定する

管理画面でない場合にのみ処理を行います。

function exclude_admin_query( $query ) {
    if ( ! is_admin() && $query->is_main_query() ) {
        // 管理画面以外のメインクエリに適用
        $query->set( 'category_name', 'news' );
    }
}
add_action( 'pre_get_posts', 'exclude_admin_query' );

例4: 特定の投稿タイプでメインクエリをカスタマイズ

投稿タイプがcustom_post_typeの場合に、カスタムフィールドを使って並び替えます。

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

例5: サイドバーウィジェットの表示条件を設定する

is_main_query()を使用して、メインクエリがアーカイブページのときに特定のウィジェットエリアを表示します。

<?php
if ( is_main_query() && is_archive() && is_registered_sidebar( 'sidebar-archive' ) ) {
    dynamic_sidebar( 'sidebar-archive' );
}
?>

注意事項

  • is_main_query()はメインクエリのみを対象とします。サブクエリやWP_Queryで作成されたカスタムクエリには適用されません。
  • 管理画面での使用には注意が必要です。条件として!is_admin()を併用することが推奨されます。

関連機能: