GET_QUERIED_OBJECT()在发布日期存档时返回NULL

时间:2014-01-05 作者:Dakota

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”帖子类型是否有一个与自定义帖子类型对象等效的对象来显示?

1 个回复
最合适的回答,由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\'] );

结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post