質問: 「pre_get_posts」を使って、同一ページで複数のメインループを出力できますか? ### 前提 index.phpをフロントページにしており、メインループを使わなければならない状況です。 (index.phpでサブループを使うとページネーションが機能しなくなるので。) そしてフロントページには記事一覧を出力する場所が2か所あります。 ### 実現したいこと よって「pre_get_posts」を使って、フロントページに2通りのメインループを出力したいと思っています。 イメージはこう↓です。 ![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/3fd728f3ff20f2c546e49b1883f6adae.png) なので下記のように条件ABのメインループを実現したいです。 ``` function myPreGetPosts( $query ) { // フロントページ if ( $query->is_home() ) { if ( 右側 ) { // 条件A } if ( 左側 ) { // 条件B } } } add_action('pre_get_posts','myPreGetPosts'); ``` これを実現するための書き方がございましたら是非、教えて下さい。宜しくお願い致します。 ### 補足 ご指摘を頂戴した点に関しまして、次のように補足させて頂きます。 ・右と左のページネーションは連動せず、ページ数は別々です。ちなみに別々のカスタム投稿タイプです。 ・右と左の要素の数は各ページで同じである必要はございません。(投稿者IDの指定なども動的に変更されうるため、右が15件で左が1件などもあります。) ・左または右の要素が0件というケースもありえます。
回答: 左右でページネーションが連動しないのであれば、 メインクエリ一つで処理をするのはかなり厳しいです 左と右のページのクエリを分けるのが妥当です >サブループを使うとページネーションが機能しなくなる いいえ、サブループのページネーションのパラメータをpaged以外の名前のパラメータで渡して それをサブループのクエリのpagedに利用してサブループをループさせればいいだけです paginate_linksがやってることは連番のURLパラメータのリンクを作るってことだけです 別にメインクエリのページネーションである必要はありません formatでサブループではpaged以外のパラメータに値を入れるように設定し baseパラメータとしてメインループはサブループのページのパラメータを残したURLを サブループはメインループのページのパラメータを残したURLを指定すれば メインとサブで別個にページネーション処理ができます