NEXT_POSTS_LINK()仅适用于原始的$wp_Query

时间:2012-12-29 作者:Paul

我有一个自定义模板,我想显示分页的博客文章。这是我的文件的开头:

$wp_query = new WP_Query($args);
    if($wp_query->have_posts()){
        while($wp_query->have_posts()){ $wp_query->the_post();
            //something...
    <?php next_posts_link(\'Older Entries\'); ?>
    <?php previous_posts_link(\'Newer Entries\'); ?>
它工作得很好-它会在应该的时候显示旧的和新的链接。在第一个页面上,它将只显示到旧实体的链接。在第二页上显示新条目和旧条目等。

但我不想覆盖当前$wp_query... 我想用$wp_query2 对于此循环。如果我这样做,链接根本不会出现。

据此:http://codex.wordpress.org/Function_Reference/next_posts_link 它们打印指向当前查询中上一组/下一组帖子的链接。我想$wp_query2 不是我的“当前查询”,而是$wp_query 总是这样。我能改变一下吗?

更新:添加&paged=2 手动链接可使其正确转到下一组帖子(下一页)和第二、第三页等previous_posts_link() 即使我使用$wp_query2. 所以,我只是失踪了next_posts_link() 每个页面上的功能。

2 个回复
最合适的回答,由SO网友:s_ha_dum 整理而成

next_posts_linkprevious_posts_link 使用全局$wp_query.

function get_next_posts_link( $label = null, $max_page = 0 ) {
    global $paged, $wp_query;

http://core.trac.wordpress.org/browser/tags/3.5/wp-includes/link-template.php#L1523

这意味着你需要这样做才能让它们正常工作。

$orig_query = $wp_query;
$wp_query = new WP_Query($args);
// the rest of your code
$wp_query = $orig_query;
如果你完成了$wp_query 对于该页面加载,没有理由保留它。复制这些核心函数、修改它们以接受查询参数并创建自己的分页函数应该非常容易。

SO网友:Ed Burns

查看wordpress源代码,似乎next\\u posts\\u link使用了全局var$paged。我的猜测是,这只适用于主回路。

下面是一个很好的解决方案,可以帮助您解决二次循环分页的问题:http://weblogtoolscollection.com/archives/2008/04/19/paging-and-custom-wordpress-loops/

它涉及在查询中显式设置分页查询变量,如下所示:

<h3>Recent Articles</h3>
<ul>
<?php 
$temp = $wp_query;
$wp_query= null;
$wp_query = new WP_Query();
$wp_query->query(\'showposts=5\'.\'&paged=\'.$paged);
?>
希望这有帮助。

结束