你有哪些标签/术语/分类
The
the_tags( $before = null, $sep = \', \', $after = \'\' )
函数是的包装器
get_the_tag_list( $before = \'\', $sep = \'\', $after = \'\', $id = 0 )
.
此功能应用过滤器the_tags
在get_the_term_list( 0, \'post_tag\', $before = \'\', $sep = \'\', $after = \'\' )
(0
是$id
和$post_tag
这个$taxonomy
参数)的post_tag
并返回它。和get_the_term_list()
负责获取标记并构建标记。
为了获取术语,它使用get_the_terms( $id, $taxonomy )
内部。如果查看这些函数的内部结构(请参见链接),它将使用get_post()
如果否$id
已提供。
这表明您总是只能获得单个帖子的标签/术语。为了说明这一点,下面是get_the_terms( $id, $taxonomy )
功能:
function get_the_terms( $post, $taxonomy ) {
if ( ! $post = get_post( $post ) )
return false;
$terms = get_object_term_cache( $post->ID, $taxonomy );
if ( false === $terms ) {
$terms = wp_get_object_terms( $post->ID, $taxonomy );
wp_cache_add($post->ID, $terms, $taxonomy . \'_relationships\');
}
正如您所看到的,这些包装器中的第二个函数已经没有提供ID,因此它返回到ID
0
. 这使得if回到
global $post
/
\\WP_Post
对象,它是来自主查询的对象(其中
\\WP_Query->current_post
指向)。这可能是很多。首先,它是主查询循环中的第一篇帖子,按照默认值运行。然后,如果循环后查询没有重置,则是最后一篇文章,等等。如果您稍后有循环,例如由插件或主题完成,则是另一篇文章,等等。
Conclusion: 如果您退回到全局post对象,那么您正在使用全局(不可靠)提供给您的内容。
我建议使用get_terms()
相反,它的输出更容易控制,并且不依赖于使用帖子中的数据,这是您不想要的。
其他注意事项
为什么不使用
extract()
? 因为
IDE(如PHPStorm、Sublime、Aptana等)不识别来源/内容这是不可靠的,因为你永远不知道是否设置了某些内容。改为使用普通数组,依赖默认值并使用empty()
或isset()
:
public function( Array $args )
{
$foo = isset( $args[\'foo\'] )
? $args[\'foo\']
: \'my default\';
// work with `$foo`