仅在类别页面上列出特定类别的帖子

时间:2015-04-22 作者:Bjarni

我想通过每次检查帖子是否来自某个特定类别,来询问是否有一种更短的方法。

正如你所看到的,这些类别包括字母表、A B C等,每次我用自定义循环等进行检查时,是否有一种更简短的方法来写这篇文章,或者我已经走上正轨了。

目前我是如何设置的。

<?php  if ( is_category( \'a\' )  ) { ?> 
<?php $THEresults = array( \'post_type\' => \'plants\', \'orderby\'=> \'title\', \'order\' => \'ASC\', \'category_name\' => \'a\',);
    $loop = new WP_Query( $THEresults );
?>
<?php while ( $loop->have_posts() ) : $loop->the_post();?>
<?php get_template_part( \'content\' ); ?>
<?php endwhile; ?>

<?php wp_reset_postdata(); ?>

 <?php  } elseif ( is_category( \'b\' ) ) { ?>
<?php
    $THEresults = array( \'post_type\' => \'plants\', \'orderby\'=> \'title\', \'order\' => \'ASC\', \'category_name\' => \'b\',);
    $loop = new WP_Query( $THEresults );
?>
<?php while ( $loop->have_posts() ) : $loop->the_post();?>
<?php get_template_part( \'content\' ); ?>
<?php endwhile; ?>

<?php wp_reset_postdata(); ?>

根据评论编辑

我有一个自定义的帖子类型“plants”,创建的帖子按字母顺序排列为类别,如类别a、B、C等。当你单击类别a时,上面的代码将只显示类别a中的那些帖子,用于B、C等。上述代码有效,但不知道是否有更短的方法来检查帖子是否属于类别a、B、C等

1 个回复
最合适的回答,由SO网友:Pieter Goosen 整理而成

使用自定义查询会使一切变得复杂。永远不要在主页或任何类型的存档页上用自定义查询替换主查询,这会破坏页面功能,正如您所看到的那样。你应该慢慢来读this post 我在这个问题上做了很多

您只需要类别中的默认循环。php,没有其他内容

if ( have_posts() ) {
    while ( have_posts() ) {
    the_post();

        //Your html and template tags

    }
}
编辑一些额外的信息

您不需要所有这些语句来检查类别。您只需访问查询的对象并从中获取所需的任何信息。get_queried_object() 返回完整的查询对象,get_queried_object_id() 返回当前对象id。因此您可以将以下内容传递给查询参数

\'cat\' => get_queried_object_id(),
而不是做那么多if/else 报表

编辑2看起来你最头疼的其实是你的自定义帖子类型。默认情况下,它们将从类别页面的主查询中排除。根据我过去的推荐,您所做的更改将不会显示自定义帖子类型的帖子,只会显示来自默认帖子类型的帖子post

正如我在链接帖子中所描述的,您应该使用pre_get_posts 更改主查询以满足您的需要。这也是你在这里应该做的。

在您的功能中。php,您需要添加以下代码,这将把您的自定义帖子类型添加到您的分类页面

add_action( \'pre_get_posts\', function ( $q ) 
{
    if ( !is_admin() && $q->is_main_query() && $q->is_category() ) {
        $q->set( \'post_type\', array( \'post\', \'plants\' ) ); //This will show normal posts and plants
    }
});
以上内容现在将显示正常立柱和立柱式工厂的立柱。如果不需要显示正常帖子,只需删除post 从阵列中

结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post