如何在自定义页面上输出自定义帖子类型标题,旁边有类别?

时间:2020-07-03 作者:keg504

我有一个组织的网站,我为领导团队创建了一个新页面。我运行了一个查询,查找;“成员”-类别为“的类型”;领导力;。到目前为止,当我将此输出到页面上时,效果很好。我还有子类别;“总裁”;和;“秘书”;我想显示在每个领导的名字旁边。但是,我一打电话get_the_category(), 一切都变得一团糟,只有一个结果是输出,总统类别不知何故消失了,职位类别为;“总裁”;获取;“秘书”;显示在其旁边。这是相关代码:

<?php
    $leaderQuery = new WP_Query(array(
        \'posts_per_page\' => -1,
        \'post_type\' => \'member\',
        \'cat_slug\' => "Leadership"
    ));
    
    //var_dump($leaderQuery);
    
    while($leaderQuery->have_posts())
    {
        $postCategories = get_the_category($leaderQuery->the_post());
        //$categoryDescription = category_description($postCategories[0]);
        //var_dump($postCategories);
                $leaderQuery->the_post(); ?>
                <div class="post-item">
                    <p class="headline headline--small"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a> - <?php echo get_the_category($leaderQuery->the_post())->name; ?></p>
                </div>
            <?php
    }
    wp_reset_postdata();
    echo paginate_links();
  ?>
var_dump($leaderQuery->the_post()) 不包含类别信息,但var_dump($postCategories) 做这是var_dump($postCategories):

array (size=2)
  0 => 
    object(WP_Term)[1446]
      public \'term_id\' => int 7
      public \'name\' => string \'Joint Secretary\' (length=15)
      public \'slug\' => string \'joint-secretary\' (length=15)
      public \'term_group\' => int 0
      public \'term_taxonomy_id\' => int 7
      public \'taxonomy\' => string \'category\' (length=8)
      public \'description\' => string \'B\' (length=1)
      public \'parent\' => int 6
      public \'count\' => int 1
      public \'filter\' => string \'raw\' (length=3)
      public \'cat_ID\' => int 7
      public \'category_count\' => int 1
      public \'category_description\' => string \'B\' (length=1)
      public \'cat_name\' => string \'Joint Secretary\' (length=15)
      public \'category_nicename\' => string \'joint-secretary\' (length=15)
      public \'category_parent\' => int 6
  1 => 
    object(WP_Term)[1441]
      public \'term_id\' => int 6
      public \'name\' => string \'Leadership\' (length=10)
      public \'slug\' => string \'leadership\' (length=10)
      public \'term_group\' => int 0
      public \'term_taxonomy_id\' => int 6
      public \'taxonomy\' => string \'category\' (length=8)
      public \'description\' => string \'\' (length=0)
      public \'parent\' => int 0
      public \'count\' => int 2
      public \'filter\' => string \'raw\' (length=3)
      public \'cat_ID\' => int 6
      public \'category_count\' => int 2
      public \'category_description\' => string \'\' (length=0)
      public \'cat_name\' => string \'Leadership\' (length=10)
      public \'category_nicename\' => string \'leadership\' (length=10)
      public \'category_parent\' => int 0
这是页面上实际输出的当前帖子的错误数据,在这两个帖子中,只有一个显示出来,另一个给出了其类别信息。

如何使每个帖子正确检索类别名称并将其显示在帖子标题旁边?

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

$leaderQuery->the_post() 应仅在循环开始后调用一次:

while ( $leaderQuery->have_posts() ) {
    $leaderQuery->the_post(); // call it just once
    ...
}
我还可以看到,您没有在循环中正确检索当前帖子的ID,因此正确的方法是使用get_the_ID().

$postCategories = get_the_category( get_the_ID() );           // like this
$postCategories = get_the_category($leaderQuery->the_post()); // not this
但在一个循环中,您只需调用get_the_category() 这样,即没有任何参数。

请注意get_the_category() 返回一个术语对象数组,因此如果只想获取该数组中第一个类别的名称,则可以执行以下操作:

// Get all categories (term objects) assigned to the current post.
$postCategories = get_the_category();

// Get the first category\'s name.
$first_cat_name = ( ! empty( $postCategories ) ) ? $postCategories[0]->name : \'\';
但是如果您想显示所有类别,那么您可以简单地使用the_category().

请注意,对于自定义分类法,您将:

使用get_the_terms() 而不是get_the_category().

使用the_terms() 而不是the_category().

实际上,在WP查询的参数中cat_slug 不是有效的parameter for WP_Query. 相反,它应该是category_name, 但请记住,它期望的是一个slug,而不是类别名称,例如。my-category 而不是My Category.

此外,仅当当前帖子属于某个类别时,才可以使用类似so的方式显示该类别的名称:

if ( in_category( \'Leadership\' ) ) {
    echo \'In the Leadership category\';
}

// Or after closing the PHP tag ( ?> ):
//<?php echo in_category( \'Leadership\' ) ? \'In the Leadership category\' : \'\'; ?>

相关推荐

扩展WooCommerce小部件类-WC_Widget_Product_Categories

我正在尝试扩展woocommerce类,该类用于在我自己的插件中创建产品类别小部件,该插件为woo commerce产品添加了一个称为“部门”的新分类法。当我扩展WP\\u小部件时,一切正常,我看到一个新的小部件,可以添加到外观->小部件中。然而,当我试图扩展WC\\u Widget或WC\\u Widget\\u Product\\u类别时,我根本看不到新的Widget,即使我没有收到任何php错误。以下是我所拥有的不起作用的东西://get the base classes if(!cl