自定义帖子类别名称显示为空

时间:2022-02-22 作者:Naren Verma

我有一个自定义的帖子类型和类别。我的页面上有以下功能。我得到了帖子,但我没有得到页面上的类别名称。

我正在获取空数组

array(0) { } 
下面是功能代码。

<?php 
function blogView( $atts ){
  global $post;

  if($atts[\'cat\']==\'All\'){      
    $blog_post = get_posts(array(
      \'showposts\' => 80, //add -1 if you want to show all posts
      \'post_type\' => \'blog\'
      ));
  }else{  
    $blog_post = get_posts(array(
      \'showposts\' => 10, //add -1 if you want to show all posts
      \'post_type\' => \'blog\',
      \'tax_query\' => array(
        array(
      \'taxonomy\' => \'blogs_cats\',
      \'field\' => \'slug\',
      \'terms\' => $atts[\'cat\'] //pass your term name here
        )
      ))
       );
  }
     
$data=\'<ul class="post-grid-list">\';
    foreach($blog_post as $t){
    $tid = $t->ID;

         /*Display category code here*/
          $category_detail=get_the_category(\'4\');//$post->ID
          foreach($category_detail as $cd){
          echo $cd->cat_name;
          }
        /*end here*/


         $data.=\'\';

    }
    $data.=\'</ul>\';

    return $data; 

}
add_shortcode( \'blog\', \'blogView\');

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

请注意get_the_category() 文档stated 即:

注意:此函数仅返回来自默认;“类别”;分类学对于自定义分类法,请使用get_the_terms().

如果我猜对了,你想显示blogs_cats 当前职位的术语,那么您应该使用get_the_terms() 相反

还有get_the_term_list() 如果您只想显示术语列表,如Foo Bar, Term 2 每个术语都链接到自己的存档页。

示例:

手动循环查看get_the_terms() 要输出术语名称的简单列表(仅限):

$category_detail = get_the_terms( $tid, \'blogs_cats\' );

$cats = array();
if ( is_array( $category_detail ) ) {
    foreach ( $category_detail as $cd ) {
        $cats[] = $cd->name;
    }
}

$data .= "<li>blogs_cats for $tid: " . implode( \', \', $cats ) . \'</li>\';
get_the_term_list() 要输出术语名称和链接列表,请执行以下操作:

$cat_list = get_the_term_list( $tid, \'blogs_cats\', \'<i>\', \', \', \'</i>\' );
$data .= "<li>blogs_cats for $tid: $cat_list</li>";
此外,您应该致电shortcode_atts() 确保cat 参数存在于$atts (例如,当使用[blog], i、 e.无需指定任何参数)。例如。

function blogView( $atts ){
    global $post;

    $atts = shortcode_atts( array(
        \'cat\' => \'All\',
    ), $atts );

    // ... your code.
}