目前我面临一个非常奇怪的问题,我似乎无法正常解决。我在分类页面上使用分页。我有一个“新闻”类别和一些子类别。其中一个子类是“MVO nieuws”。
当我访问“/mvo nieuws”时,分页正在工作(显示一个旧的帖子链接)。
if ($paged) : ?>
<nav class="page-nav archive">
<?php if ($prev = get_previous_posts_link()) : ?>
<div class="alignleft">
<span class="fo icons-angle-circled-left"></span>
<span><?php previous_posts_link( \'Nieuwe berichten\' ); ?></span>
</div>
<?php endif;
if ($next = next_posts($listPosts->max_num_pages, false)) : ?>
<div class="alignright">
<span>
<a href="<?= $next; ?>">Oudere berichten</a>
</span>
<span class="fo icons-angle-circled-right"></span>
</div>
<?php endif; ?>
</nav>
<?php endif; ?>
分页正在转发到
\'/mvo-nieuws/page/2\'
, 但找不到该页面。我会发现这是因为它是“新闻”的一个子类别,但我不知道为什么这似乎是一个问题。
我已经将该类别作为子类别删除,现在它正在工作。我的所有其他主要类别也都运行良好,但子类别面临着这个问题。
我的永久链接设置为:\'/%category%/%postname%/\'
.希望任何人都能帮助我,谢谢转发!
EDIT在彼得·古森发表评论后,我想如果你们能看到我的问题,这会很方便。
$cat = get_query_var(\'cat\');
$category = get_category($cat);
$paged = (get_query_var(\'paged\')) ? get_query_var(\'paged\') : 1;
$listArgs = array(
\'cat\' => $category->term_id,
\'paged\' => $paged,
\'posts_per_page\' => 11
);
$listPosts = new WP_Query($listArgs);
while ($listPosts->have_posts()) :
$row++;
$listPosts->the_post();
endwhile;
我希望这能帮助我解决问题。
我的上一次代码更新:
我的pre\\u get\\u帖子:
add_action( \'pre_get_posts\', function ( $query ) {
if (!is_admin() && $query->is_main_query() && $query->is_category())
$query->set( \'posts_per_page\', 11 );
});
最合适的回答,由SO网友:Pieter Goosen 整理而成
我想你误解了我的意思linked post. 这是一个非常庞大的信息量(,您应该多次重读),但简而言之,您不应该使用自定义查询来代替主页上的主查询或任何类型的存档页。
我不知道您为什么实际使用自定义查询,但如果您需要更改主查询以调整某些内容,则应该使用pre_get_posts
或任何posts_*
可以直接更改生成的SQL查询的过滤器。
您应该首先恢复到类别页面中的默认循环。你应该删除你电脑里的所有代码EDIT 并将其替换为
if ( have_posts() ) {
while ( have_posts() ) {
the_post();
// YOUR HTML MARKUP AND TEMPLATE TAGS
}
}
你的下一篇文章链接代码没有意义,看起来也不正确。这里有一张便条,
next_posts()
已折旧,应使用
next_posts_link()
和
get_next_posts_link()
. 查看有关确切用例的链接中的示例。请记住,默认情况下,posts链接已经设置为与主查询一起使用,因此不需要进行任何修改。
最后一点,你应该在这一点上一切都正常。如果您使用不同的模板,请记住在所有类别页面上执行此操作。如果需要调整类别页面上显示的帖子数量,可以使用
add_action( \'pre_get_posts\', function ( $q )
{
if ( !is_admin() // Run only on front end queries
&& $q->is_main_query() // Only target the main query and not custom queries
&& $q->is_category() // Run only on category archive pages
) {
// You can make use of all parameters in WP_Query
$q->set( \'posts_per_page\', 11 );
}
});
如果需要从分类页面的子分类中删除帖子,可以使用
parse_tax_query
过滤器如@ialocin在其回答中所述
here