我有一个 WordPress 网站,上面有大量帖子,全部分类。我设置了一个新主题,带有分页(每页 15 个帖子),以便用户可以循环浏览每个页面。有些类别分页很好。其他人则缺少最后一页。
因此,如果一个类别有 66 个帖子……前 4 页显示 15 个不同的帖子。然而,当我点击查看第5页时,该页面显示“未找到帖子”。 最后 6 个帖子去哪儿了?它们仍然出现在我的政府中(如已发布和可见)。 然而,其他类别页面没有这个问题 - 例如,我有一个有 42 个帖子的类别,它有 3 页……最后一页有 12 个最终帖子。
因此,分页似乎工作正常(因为它清楚地显示了帖子数量的正确页数)。请看下面我的代码...这是我的模板化index.php页面的代码(我没有设置category.php页面,因为它列出的内容与主页非常相似)。
<?php
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1; // Page
$args = "posts_per_page=15&paged=".$paged; // Base query
$category = get_queried_object(); // Get Cat info
$thisCat = $category->term_id; // Get Cat ID (if exists)
$tagID = get_queried_object()->term_id; // Get Tag ID (if exists)
echo '<!-- paged: '.$paged.'-->';
echo '<!-- catID: '.$thisCat.'-->';
echo '<!-- tagID: '.$tagID.'-->';
if (is_home() || is_front_page()) { // HOMEPAGE
query_posts($args.'&orderby=rand');
echo '<!-- args: '.$args.'&orderby=rand'.'-->';
} elseif ( is_search() ) { // SEARCH RESULTS ?>
<?php
$search_query = get_search_query();
query_posts($args.'&s='.$search_query);
echo "<!-- args: ".$args.'&s='.$search_query."-->"; ?>
<h1>Search</h1>
<div class="content_labels">
<div class="content_label">SEARCH RESULTS FOR: <?php echo $s; ?></div>
</div>
<div class="clear" style="margin:0 0 10px 0;"></div>
<div class="previouspage">
<a href="javascript:history.back()"><< Previous Page</a>
</div><?php
} elseif( is_category() ) { // CATEGORY
query_posts($args.'&cat='.$thisCat);
echo '<!-- args: '.$args.'&cat='.$thisCat.'-->'; ?>
<div class="content_labels">
<div class="content_label">Category:</div>
</div>
<h1><?php single_cat_title( '', true ); ?></h1>
<div class="clear" style="margin:0 0 10px 0;"></div>
<div class="previouspage">
<a href="javascript:history.back()"><< Previous Page</a>
</div><?php
} elseif( is_tag()) { // TAGS
echo '<!-- args: '.$args.'&tag_id='.$tagID.'-->';
query_posts($args.'&tag_id='.$tagID); ?>
<div class="content_labels">
<div class="content_label">Tag:</div>
</div>
<h1><?php single_tag_title(); ?> </h1>
<div class="clear" style="margin:0 0 10px 0;"></div>
<div class="previouspage">
<a href="javascript:history.back()">Previous Page</a>
</div><?php
}
if ( have_posts() ) :
$i=1;
while ( have_posts() ) : the_post(); ?>
// PAGE CODE GOES HERE
endwhile; ?>
<?php base_pagination(); // PAGINATION CODE ?>
<?php endif; ?>
这是分页代码,来自我的functions.php ...我不认为这是问题...
function base_pagination() {
global $wp_query;
$big = 999999999; // This needs to be an unlikely integer
// For more options and info view the docs for paginate_links()
// http://codex.wordpress.org/Function_Reference/paginate_links
$paginate_links = paginate_links( array(
'base' => str_replace( $big, '%#%', get_pagenum_link($big) ),
'current' => max( 1, get_query_var('paged') ),
'total' => $wp_query->max_num_pages,
'mid_size' => 5
) );
// Display the pagination if more than one page is found
if ( $paginate_links ) {
echo '<div class="pagination">';
echo $paginate_links;
echo '</div><!--// end .pagination -->';
}
}
有人能看出出了什么问题吗?我已经玩了几个小时了,我似乎找不到解决方案......
所以,我做了一些挖掘,并尝试了一些东西......我找不到上面的代码有什么问题。查询是正确的(每页显示 15 个,每个类别存档页面等),并且分页正常工作......最后,默认的每页帖子与我自己的 posts_per_page=15 查询相冲突。 不确定这种冲突发生在哪里(这超出了我的能力) - 但我确实学会了如何阻止它。
在“设置”-“阅读”下... 我刚刚将“最多显示博客页面”更改为“15”
这不是一个理想的解决方案(因为我不知道这个问题从哪里开始,而且如果自定义的“posts_per_page”与 15 不同,我无法调整)...但我的网站现在可以按照我想要的方式工作。