GET_THE_TERMS与wp_GET_POST_TERMS中的奇怪结果

时间:2021-05-18 作者:Eric

我正在尝试制作一个面包屑函数,但有一个小问题。。。

使用时:

$categories = get_the_terms( $post->ID, \'product_cat\' );
我得到了一个循环中使用的类别数组,等等。唯一的问题是它是按字母顺序排列的。(我希望它按层次顺序排列。)

经过一番挖掘,我发现了一种替代方法,即使用wp\\u get\\u post\\u terms(),但我肯定遗漏了一些东西,因为当我使用此方法时:

$categories = wp_get_post_terms( $post->ID, \'product_cat\', array( \'orderby\' => \'term_id\' ) );
返回一个空数组。

有什么建议吗?

谢谢

1 个回复
最合适的回答,由SO网友:Tom J Nowell 整理而成

两者的主要区别在于wp_get_post_terms 实际上,它不是缓存的,总是直接进入数据库get_the_terms 内部使用相同的API,wp_get_post_terms 是一个包裹wp_get_object_terms, get\\u the\\u terms也使用它,但具有缓存和较少的可配置选项。

然而,这是一个X Y问题。您不应该问如何使用空返回值解决您的解决方案,而是应该问如何解决您的问题,即:

我得到了一个循环中使用的类别数组,等等。唯一的问题是它是按字母顺序排列的。(我希望它按层次顺序排列。)

There is no such thing as hierarchical order in these APIs.

<要做到这一点,您需要添加一个处理步骤或循环来迭代术语列表。e、 g.对于每个术语,如果没有父项,则显示它,然后在嵌套的循环中循环所有术语,显示那些以该术语为父项的术语,等等。如果需要多个深度层,则需要递归。

出于性能原因,您应该使用get_the_terms.