CODEMemorandum

【WordPress】メインクエリを変更する

例えば特定のカスタム投稿タイプのアーカイブだけ表示件数を変更したいとか、条件を変更したいときに。
finctions.php にまとめて書けるからめっちゃ楽だね。

function custom_main_query( $query ) {
  if ( is_admin() || !$query->is_main_query() ){
    return;
  }
  //カスタム投稿タイプ「faq」のアーカイブは昇順で全件表示
  if ( is_post_type_archive( 'faq' ) ) {
    $query->set( 'posts_per_page', -1 );
    $query->set( 'order', 'ASC' );
  }
 //アーカイブページに子ページを表示しない
  if ( $query->is_archive() ) {
    $query->set( 'post_parent', 0 );
    return;
  }
}
add_action( 'pre_get_posts', 'custom_main_query' );

カスタムフィールドを条件にすることも可能。

  //カスタム投稿タイプ「event」でカスタムフィールド「event_date」が本日以降の記事を表示。
  if ( $query->is_post_type_archive( 'event' ) ) {
    $query->set( 'meta_query',
      array(
        'key' => 'event_date',
        'value' => date( 'Ymd' ),
        'compare' => '>='
      )
    );
    return;
  }