get_queried_object()
退货null
发布日期存档(页面类型is_date()
) 和主博客索引页(页面类型is_home()
). 这是故意的,还是仅仅是疏忽?
我正在围绕get\\u queryed\\u object()编写一个包装器,以获取当前页面的标题,无论它是什么类型的页面,以便在主题中使用。我很快意识到get_query_object()
我应该复制wp_title()
, 但在此之前,我遇到了一个有趣的问题。
看来get_queried_object()
及其根函数WP_Query->get_queried_object()
回来null
对于一些列表类型,包括按索引输出的主要帖子列表。php(页面类型is_home()
) 并按日期发布存档(页面类型is_date()
).
我通过将以下代码片段放入多个位置的多个模板文件中进行测试,始终在之后get_header()
和之前the_post()
:
<pre><code><?php
$queried_object = get_queried_object();
var_dump( $queried_object );
?></code></pre>
这在类别归档、标记归档、自定义分类法归档和自定义post类型归档上非常有效。
get_queried_object()
返回查询对象,该对象可用于提取页面标题和其他有用信息。
但是,它在存档中失败。php用于标准发布日期存档和索引。php用于普通博客帖子主页列表视图。
深入研究the source of WP_Query->get_queried_object()
揭示了一些并不奇怪的事情:没有检查页面类型is_home()
或页面类型is_date()
, 所以在这些页面类型上$this->queried_object = null;
未更新,函数返回null
.
因此,我的问题是,这种预期功能(例如,您是否不应该在这些页面上使用get\\u queryed\\u object())、技术限制(这些页面上是否没有可以返回的有意义的对象),还是仅仅是一种实现疏忽?
内置的“blog post”帖子类型是否有一个与自定义帖子类型对象等效的对象来显示?
最合适的回答,由SO网友:Chris_O 整理而成
所以我的问题是,这是一个预期的功能(例如,您不应该在这些页面上使用get\\u queryed\\u object()),还是一个技术性的模仿(在这些分隔页上是否没有可以返回的有意义的对象),还是仅仅是一个实现疏忽?
get\\u queryed\\u object()用于获取要查询的术语、作者、单个帖子、单个自定义帖子类型或页面对象。是的,这是有意的,也是设计此函数的目的。
如果您使用的是日期存档、主页或搜索,则不会查询任何对象。
编辑:
根据下面的第一条注释,OP需要获取post\\u类型的对象。post\\u类型对象与查询的\\u对象不同。如果需要在存档页上获取post\\u类型的对象,可以从query\\u vars获取它。
global $wp_query;
$post_type_object = get_post_type_object( $wp_query->query_vars[\'post_type\'] );