我在分页方面有一个非常奇怪的错误:(我试图为一个包含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)."\'>«</a>";
if($paged > 1 && $showitems < $pages) echo "<a href=\'".get_pagenum_link($paged - 1)."\'>‹</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)."\'>›</a>";
if ($paged < $pages-1 && $paged+$range-1 < $pages && $showitems < $pages) echo "<a href=\'".get_pagenum_link($pages)."\'>»</a>";
echo "</div>\\n";
}
}
最合适的回答,由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。您的模板未加载因此,您应该修改WordPress将执行的标准查询,方法是将其放置在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 );
}
}