WP_QUERY的分页是货号 - 在某些页面上工作,但没有工作
-
16-10-2019 - |
题
我有一个非常奇特的错误,分页:(我试图在每个页面上显示4个帖子,其中包括“ Lastest-News”的类别。
分页函数似乎可以正常工作。有33个帖子。分页通过9页和以下格式的链接正确构建:/category/last-news/page //
有趣的是,它从第1-4页(包括每页显示4个帖子显示)正常工作(显示4个帖子)。但是,对于第5-9页,它根本不起作用。它甚至都不适用于模板...我能发现的唯一错误是页面上说“什么都没找到,即“ last tast-news”页面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-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";
}
}
解决方案
WordPress在每个页面上都可以进行查询。您应该修改该查询,而不是创建新查询。现在发生的事情是,WordPress每页10的标准帖子进行查询,但是您对这些结果无能为力并进行查询。这起作用...直到WordPress超越了第33页,该邮政编号4。
- WordPress查询1-10,您的模板查询1-4
- WordPress查询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 );
}
}
其他提示
基于@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;
}
}