ページネーションを使用した複数のWP_Queryループ


10

これについては他にもいくつか質問があります(そしてWP_Queryのページ分割は多くの人にとって大きな質問のようです)、それを機能させる方法を正確に絞り込もうとしています。

次のコードをページ分割して、単一のカスタムループを作成できます。

// http://weblogtoolscollection.com/archives/2008/04/19/paging-and-custom-wordpress-loops/
$temp = $wp_query;
$wp_query= null;
$wp_query = new WP_Query();
$args = array(
    'showposts' => 2,
    'paged' => $paged
);
$wp_query->query($args);
while ($wp_query->have_posts()) : $wp_query->the_post();

// The Post
the_title();
echo '<br>';
the_category(' ');
the_excerpt();
echo '<hr>';

endwhile;
// http://codex.wordpress.org/Function_Reference/paginate_links#Examples
$big = 999999999;
$pag_args = array(
    'base' => str_replace( $big, '%#%', get_pagenum_link( $big ) ),
    'format' => '?paged=%#%',
    'current' => max( 1, get_query_var('paged') ),
    'total' => $wp_query->max_num_pages
);
echo paginate_links($pag_args);
$wp_query = null;
$wp_query = $temp;

...もちろん、このループをコピー/貼り付けすると、完全なクローンとして機能します。つまり、「ページ2」をクリックすると、両方のループでページ2に移動します。

これらを互いに分離して、それぞれに個別にページ分割する方法はありますか?

誰かが独自のローカルバージョンをセットアップして、それをいじるのに興味がある場合は、複製ループを含む完全なコードを次に示します。http://paste.pocoo.org/show/573108/


私は自分のために、複数のループページネーションの問題を解決したこの記事を見てみると、wordpress.stackexchange.com/questions/126814/...
ewroman

回答:


18

はい、できます。重要なのはformat、2つのクエリでパラメーターを異なるものにすることです。

    <!-- Cats -->
    <div class="animals">
        <?
            $paged1 = isset( $_GET['paged1'] ) ? (int) $_GET['paged1'] : 1;
            $paged2 = isset( $_GET['paged2'] ) ? (int) $_GET['paged2'] : 1;

            // Custom Loop with Pagination 1
            // http://codex.wordpress.org/Class_Reference/WP_Query#Usage
            $args1 = array(
                'paged'          => $paged1,
                'posts_per_page' => 2,
            );
            $query1 = new WP_Query( $args1 );

            while ( $query1->have_posts() ) : $query1->the_post();
                the_title();
                echo '<br>';
                the_category(' ');
                the_excerpt();
                echo '<hr>';
            endwhile;

            // http://codex.wordpress.org/Class_Reference/WP_Query#Pagination_Parameters
            $pag_args1 = array(
                'format'  => '?paged1=%#%',
                'current' => $paged1,
                'total'   => $query1->max_num_pages,
                'add_args' => array( 'paged2' => $paged2 )
            );
            echo paginate_links( $pag_args1 );
        ?>
    </div>

    <!-- Dogs -->
    <div class="animals">
        <?
            // Custom Loop with Pagination 2
            $args2 = array(
                'paged'          => $paged2,
                'posts_per_page' => 2,
            );
            $query2 = new WP_Query( $args2 );

            while ( $query2->have_posts() ) : $query2->the_post();
                the_title();
                echo '<br>';
                the_category(' ');
                the_excerpt();
                echo '<hr>';
            endwhile;

            $pag_args2 = array(
                'format'  => '?paged2=%#%',
                'current' => $paged2,
                'total'   => $query2->max_num_pages,
                'add_args' => array( 'paged1' => $paged1 )
            );
            echo paginate_links( $pag_args2 );
        ?>
    </div>

ブーンに返信していただきありがとうございます。あなたの言っていることがわかりますが、get_query_varを変更しようとすると、エラーが発生します。次に、更新されたコードを示します。paste.pocoo.org / show / 573208 エラー:27行目のC:\ wamp \ www \ wordpress_wp_query_pagination \ wp-includes \ query.phpの非オブジェクトに対するメンバー関数get()の呼び出し
Cory

2つのこと:1)$wp_queryグローバルで奇妙なことを行っています。(2)実装WP_Query自体にいくつかの奇妙な点があり、使用できなくなったりget_query_var()、他の機能が使用できなくなったりするため、通常は$_GETスーパーグローバルを直接参照し、にキャストしてサニタイズしintます。完全に機能する例で回答を更新しました。
ブーン渓谷

素晴らしいブーン!どうもありがとうございます。それを徹底的に勉強する時間です。奇妙なWP_Queryは、この2008年の記事からのものでした:weblogtoolscollection.com/archives/2008/04/19/…get_query_var が同じvarをフェッチしているのではないと思いましたが、$ _ GETで直接取得する頭脳がありませんでした。繰り返しますが、多くの人に感謝します。これと永遠に戦っています。
Cory

涼しい。幸運を!
ブーン渓谷

がらくた。これと私と戦い続けたいですか?:)バージョンをテストした後、1ページに戻らないことがわかりました。2ページでスタックします。また、別のページをクリックすると、他のループがリセットされます。これらの$ _GET変数を一緒にチェーンしてfoo.com/?paged_1=2&paged_2=3を記憶することは可能ですか?
Cory
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.