Кілька циклів WP_Query з Пагінацією


11

Є кілька інших питань з цього приводу (а пагинація 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", це перенесе вас на ДОВІДКУ петлі.

Чи є спосіб розірвати їх один від одного, щоб кожен страхітнув окремо?

Ось повний код у комплекті з повторюваним циклом, якщо хтось зацікавлений у створенні власної локальної версії та пограти з нею: http://paste.pocoo.org/show/573108/


подивіться на цю посаду, яку я вирішив для себе декількома проблемами з
розширенням

Відповіді:


19

Так, це можна зробити. Ключ полягає в тому, щоб formatпараметр відрізнявся для двох запитів:

    <!-- 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>

Дуже дякую за відповідь Boone. Я бачу, що ви говорите, але коли я намагаюся змінити get_query_var, це видає помилку. Ось оновлений код: paste.pocoo.org/show/573208 Помилка: виклик функції-члена get () на не-об’єкт в C: \ wamp \ www \ wordpress_wp_query_pagination \ wp-include \ query.php у рядку 27
Cory

Дві речі: 1) Ви робите деякі дивні речі з $wp_queryглобальним. (2) Є деякі неприємності в реалізації, WP_Queryякі унеможливлюють використання get_query_var()та деякі інші функції з ним, тому я, як правило, $_GETпосилаюсь на суперглобал безпосередньо, переконуючись, що санітирується шляхом кастингу int. Я оновив свою відповідь повним робочим прикладом.
Бунські ущелини

Дивовижний Бун! Велике спасибі, чудово працює. Час її ретельно вивчити. Дивні речі WP_Query були з цієї статті 2008 року: weblogtoolscollection.com/archives/2008/04/19/… Я зрозумів, що, можливо, get_query_var отримує ту саму вару, але не мав мозку отримати це безпосередньо за допомогою $ _GET. Знову дякую, чоловіче. Білися з цим назавжди.
Кори

Класно. Удачі!
Бунські ущелини

Ах лайно. Хочете продовжувати боротися з цим зі мною? :) Після тестування вашої версії я помітив, що вона не повертається до сторінки 1. Вона застрягає на сторінці 2. Також, коли ви клацаєте на іншій сторінці, вона скидає інший цикл. Чи можливо ланцюжок цих змінних $ _GET разом, щоб вона запам'ятовувала foo.com/?paged_1=2&paged_2=3 ?
Cory
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.