使用WP_QUERY进行分页对某些页面是错误的,但对其他页面不起作用

时间:2011-01-25 作者:dashaluna

我在分页方面有一个非常奇怪的错误:(我试图为一个包含slug“最新新闻”的类别显示每页4篇文章)。

分页功能似乎工作正常。有33个职位。分页结构正确,共有9页,链接格式如下:/category/lastest news/page//

有趣的是,它在第1-4页(包括)正常工作(每页显示4篇文章)。然而,对于第5-9页,它根本不起作用。它甚至似乎不符合模板。。。我能发现的唯一错误是页面上写着“没有找到分类最新新闻第5页”。

如果它根本不起作用,我会理解的,但随机4页,而不是更多?

我真的非常感谢任何帮助!我花了大约4个多小时试图找出问题所在,这让我感到困扰。

感谢您的帮助:)

我正在使用以下代码进行查询:

<?php 
$page = get_query_var(\'paged\');
$posts_on_page = new WP_Query("posts_per_page=4&category_name=lastest-news&paged=".$page);

//loop to display every one of 4 posts

//pagination
pagination($posts_on_page->max_num_pages);
?>
我正在使用本文中的分页功能:http://www.kriesi.at/archives/how-to-build-a-wordpress-post-pagination-without-plugin

以下是函数(似乎工作正常):

function pagination($pages = \'\', $range = 2){  
 $showitems = ($range * 2)+1;  

 global $paged;
 if(empty($paged)) $paged = 1;

 if($pages == \'\')
 {
     global $wp_query;
     $pages = $wp_query->max_num_pages;
     if(!$pages)
     {
         $pages = 1;
     }
 }   

 if(1 != $pages)
 {
     echo "<div class=\'pagination\'>";
     if($paged > 2 && $paged > $range+1 && $showitems < $pages) echo "<a href=\'".get_pagenum_link(1)."\'>&laquo;</a>";
     if($paged > 1 && $showitems < $pages) echo "<a href=\'".get_pagenum_link($paged - 1)."\'>&lsaquo;</a>";

     for ($i=1; $i <= $pages; $i++)
     {
         if (1 != $pages &&( !($i >= $paged+$range+1 || $i <= $paged-$range-1) || $pages <= $showitems ))
         {
             echo ($paged == $i)? "<span class=\'current\'>".$i."</span>":"<a href=\'".get_pagenum_link($i)."\' class=\'inactive\' >".$i."</a>";
         }
     }

     if ($paged < $pages && $showitems < $pages) echo "<a href=\'".get_pagenum_link($paged + 1)."\'>&rsaquo;</a>";  
     if ($paged < $pages-1 &&  $paged+$range-1 < $pages && $showitems < $pages) echo "<a href=\'".get_pagenum_link($pages)."\'>&raquo;</a>";
     echo "</div>\\n";
 }
}

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

WordPress在每一页上都有自己的查询。您应该修改该查询,而不是创建新查询。现在的情况是,WordPress使用每页10篇的标准帖子进行查询,但您不需要对这些结果进行任何处理,只需要进行自己的查询。这很有效。。。直到WordPress超越第4页的第33篇。

WordPress查询1-10,您的模板查询1-4,您的模板查询11-20,您的模板查询5-8,WordPress查询21-30,您的模板查询9-12,WordPress查询31-40,您的模板查询13-16,WordPress查询41-50,但没有得到结果,因此它给出404。您的模板未加载functions.php 或在插件中:

add_action( \'pre_get_posts\', \'wpse7687_pre_get_posts\' );
function wpse7687_pre_get_posts( &$wp_query ) {
    if ( $wp_query->is_category && \'latest-news\' == $wp_query->get_queried_object()->slug ) {
        $wp_query->set( \'posts_per_page\', 4 );
    }
}

SO网友:dashaluna

基于@Jan Fabry回复,我对语法做了一些修改。它工作得很好。谢谢Jan的解释!!!

add_action( \'pre_get_posts\', \'wpse7687_pre_get_posts\' );
function wpse7687_pre_get_posts( &$wp_query ) {
  if ($wp_query->query_vars[\'category_name\'] == \'latest-news\'){
    $wp_query->query_vars[\'posts_per_page\'] = 4;
  }
}

结束

相关推荐

Paging in a sidebar mini loop

我切换到了另一个主题,并决定用其中的一些默认代码制作一个小部件,在自定义循环中显示我的美味帖子、推特帖子、su帖子和youtube视频(不包括主循环中的这些类别)。但是现在。。。分页不再工作。我制作了这个小部件:// =============================== EDL Sidebar Posts Widget ====================================== class SidebarPosts extends WP_Widget { &#x