我有一个自定义的帖子类型,其中添加了一个标准的标记分类法,如下所示:\'taxonomies\' => array(\'post_tag\')
. 我已经在这个CPT的一些帖子中添加了一些标签,这些帖子显示在前端,带有模板标签the_tags()
它生成的链接具有以下格式http://local.mysite.dev/tag/tag1/
. 当我单击这样的链接时,将使用tag.php
模板,但如果我添加?post_type=seron_mycpt
到URL的末尾,如下所示http://local.mysite.dev/tag/tag1/?post_type=seron_mycpt
包含相关帖子的页面是使用相同的模板生成的,但这次我还将这些行添加到debug.log
:
PHP Notice: Undefined property: stdClass::$labels in /...sitepath.../wp-includes/general-template.php on line 665
PHP Notice: Trying to get property of non-object in /...sitepath.../wp-includes/general-template.php on line 665
这些通知是在wp_title()
在中调用header.php
样板根据重写规则,将请求转换为查询tag=tag1&post_type=seron_mycpt
.对于调试,我将print_r(get_queried_object());
在里面header.php
得到这个:
MYSITEstdClass Object
(
[term_id] => 27
[name] => tag1
[slug] => tag1
[term_group] => 0
[term_taxonomy_id] => 27
[taxonomy] => post_tag
[description] =>
[parent] => 0
[count] => 2
)
我认为WP期望CPT对象具有labels
属性,但获取不具有该属性的此对象。如果我标记一个普通post
使用相同的标签,相同header.php
和tag.php
使用模板时,将显示该帖子http://local.mysite.dev/tag/tag1/
URL,在这种情况下,不会在中生成PHP通知debug.log
, 虽然print_r(get_queried_object())
显示非常相似的对象。也许WP从未到达通知生产线general-template.php
.
我不明白这个对象是什么,为什么它被传递而不是CPT对象。有人能解释一下吗?