归档.php不是对单个类别的帖子进行排序



我添加了数字分页的存档页面不会对正确的类别进行排序,而是显示所有类别的帖子。假设类别是香蕉(http://localhost/tkeblog/category/bananas/)我收到了香蕉、桔子和苹果类的帖子。此外,分页系统不显示带有图钉的帖子,但它可以在我的index.php页面上工作。我在分类筛选帖子时做了什么不正确?

<?php
if ( get_query_var('paged') ) { $paged = get_query_var('paged'); }
elseif ( get_query_var('page') ) { $paged = get_query_var('page'); }
else { $paged = 1; }
query_posts(array(
'post_type'      => 'post', // You can add a custom post type if you like
'paged'          => $paged,
'posts_per_page' => 5
));
if ( have_posts() ) : the_post(); ?>
<div class="blogitem a">

<?php while ( have_posts() ) : the_post(); ?>
<?php get_template_part('catalog',get_post_format()); ?>
<?php endwhile; ?>
<div class="pagination">
<?php my_pagination(); ?>
</div>
</div>
<?php else: ?>
<p>Sorry, no posts matched your criteria.</p>

<?php wp_reset_query(); ?>
<?php endif; ?>

如果我们查看默认的Twenty2TwentyOne Wordpress主题archive.php,我们可以看到存档模板只是使用默认循环来显示所有类别的所有帖子,而不是自定义查询。

我相信这回答了你的问题。

<?php
if( have_posts() ):
while( have_posts() ): the_post();
// ... template
endwhile;
else:
// ... fallback
endif; ?>

如果要自定义archive.php页面的默认查询输出,最佳做法是从function.php页面进行自定义。您可以使用动作挂钩过滤器pre_get_posts

  • 来源@https://developer.wordpress.org/reference/hooks/pre_get_posts/

在创建查询变量对象之后,但在运行实际查询之前激发。使用pre_get_posts操作时,请注意您正在更改的查询。使用条件标记来定位正确的查询。

<?php
add_action( 'pre_get_posts', function ( $query ) {
if ( ! is_admin() && $query->is_archive() && $query->is_main_query() ) {
if ( get_query_var( 'post_type' ) == 'post' ) {
$query->set( 'post_type', array( 'post' ) );
$query->set( 'posts_per_page', 12 );
$query->set( 'orderby', array( 'date' ) );
$query->set( 'order', array( 'ASC' ) );
} else {
$query->set( 'posts_per_page', 6 );
$query->set( 'orderby', array( 'date' ) );
$query->set( 'order', array( 'ASC' ) );
};
};
}; ?>

最新更新