我有一个非常奇特的错误,分页:(我试图在每个页面上显示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)."'>&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";
 }
}
有帮助吗?

解决方案

WordPress在每个页面上都可以进行查询。您应该修改该查询,而不是创建新查询。现在发生的事情是,WordPress每页10的标准帖子进行查询,但是您对这些结果无能为力并进行查询。这起作用...直到WordPress超越了第33页,该邮政编号4。

  1. WordPress查询1-10,您的模板查询1-4
  2. WordPress查询11-20,您的模板查询5-8
  3. WordPress查询21-30,您的模板查询9-12
  4. WordPress查询31-40,您的模板查询13-16
  5. 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;
  }
}
许可以下: CC-BY-SA归因
scroll top