如何处理循环内的“the_Terms”

时间:2016-02-04 作者:Arg Geo

我一直在搜索谷歌,但我真的很困惑。我正在尝试显示分配给该帖子的分类术语。我正在使用the_terms($post->ID, \'locations\');. 自定义分类是分层的。

示例:分配给职位的3个术语:USA(parent) > FL(direct child of "USA") > Miami(direct child of "FL"). 我得到的:FL, Miami, USA 这意味着术语将按字母顺序显示。我希望它们显示为:Miami, FL, USA. 这能实现吗?我还想从条款和strip_tags(the_terms($post->ID, \'locations\')) 似乎不起作用。

在搜索谷歌时,一些人使用get_terms() 其他一些get_the_terms 以及其他the_terms 这就是我使用的,并且似乎有效-输出术语。这些功能之间有什么区别?我用对了吗?

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

回答您的第一个问题

这些功能之间有什么区别

  • get_terms() 返回属于特定分类法的terms对象数组

  • get_the_terms() 返回属于帖子的术语数组

  • the_terms() 显示属于帖子的术语名称的HTML格式字符串

    我相信,因为您需要的条款不是超链接的,而是按照家长的要求订购的wp_get_object_terms() 在这里会是一个更好的选择。wp_get_object_terms() 还返回属于帖子的术语数组,但更灵活。不过,您确实为这种灵活性付出了代价,因为您在每个帖子上都会打一个额外的db电话。

    记住这一点,您可以尝试以下操作:(所有代码都未经测试)

    $args = [
        \'orderby\' => \'parent\', 
        \'order\'   => \'DESC\' 
    ];
    $terms  = wp_get_object_terms( $post->ID, \'locations\', $args );
    $names  = wp_list_pluck( $terms, \'name\' );
    $output = implode( \', \', $names );
    echo $output;
    

SO网友:Optimum Creative

您应该使用

get_the_terms(int|object $post, string $taxonomy)
https://developer.wordpress.org/reference/functions/get_the_terms/

get_terms(array|string $args = array(), array $deprecated = \'\')
https://developer.wordpress.org/reference/functions/get_terms/

因为

the_terms()
回显/打印结果

 get_the_terms() //or
 get_terms() 
仅获取值并将其保存到变量或内存中。

一个可能的例子是

foreach($posts as $post){
    $term= get_the_terms($post->ID, \'category\' );
    echo \'Category: \'.$term;
}
如果在任何情况下都有一个或多个对象,则可能需要使用另一个循环来处理$术语。