带有分页的多个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”时,您将同时进入两个页面的循环。

有没有办法使这些彼此分开,以便每个人分页?

如果有人有兴趣设置自己的本地版本并玩弄它,那么这里有重复循环的完整代码:http : //paste.pocoo.org/show/573108/


看看这个帖子里面我已经解决了多回路分页问题为自己wordpress.stackexchange.com/questions/126814/...
ewroman

Answers:


18

是的,可以做到。关键是使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 错误:在第27行的C:\ wamp \ www \ wordpress_wp_query_pagination \ wp-includes \ query.php中的非对象上调用成员函数get()
科里2012年

两件事情:1)您正在对$wp_query全局做一些奇怪的事情。(2)WP_Query本身有一些实现上的奇特之处使其无法使用,get_query_var()以及其他一些功能,因此我通常$_GET直接引用超全局变量,并确保通过强制转换为进行清理int。我已经用一个完整的示例更新了我的答案。
Boone Gorges

棒极了的布恩!非常感谢,效果很好。是时候彻底研究它了。怪异WP_Query东西是从这个2008年的文章:weblogtoolscollection.com/archives/2008/04/19/... 我想也许是get_query_var撷取相同的变种,但没有大脑直接与$ _GET得到它。再次感谢大家。一直为此奋斗。
科里(Cory)2012年

凉。祝好运!
Boone Gorges

哎呀 愿意继续与我抗争吗?:)测试您的版本后,我注意到它没有回到第1页。它卡在了第2页上。此外,当您单击其他页面时,它会重置另一个循环。是否可以将这些$ _GET变量链接在一起,以便记住foo.com/?paged_1=2&paged_2=3
科里(Cory)2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.