$wp_Query->查询对象->ID引发警告:未定义属性

时间:2012-07-31 作者:mathiregister

<?php 
    $current_term = $wp_query->queried_object->name;
    $current_term_id = $wp_query->queried_object->ID;
?>

<hgroup class="section-heading wrapper">
    <h1><?php echo $current_term; ?></h1>
    <h3><?php echo category_description( $current_term_id ); ?></h3>
</hgroup>
这很好,但$current_term_id 变量引发警告…

Notice: Undefined property: stdClass::$ID in /Users/my/htdocs/wr/wp-content/themes/wr/taxonomy-event_type.php on line 12
你知道我在这里做错了什么吗?或者当前术语ID的不动产是什么?

4 个回复
最合适的回答,由SO网友:Rutwick Gangurde 整理而成

我几天来都面临着同样的问题,然后发现了这个!使用该功能$wp_query->get_queried_object_id(). 检查this 了解更多详细信息。

SO网友:kaiser

这个函数还有一个包装器get_queried_object_id(). 它把所有部分都称为global $wp_query 它本身。

API始终使用最低级的API,除非您被迫这样做。

(当前)维基百科文章对API的定义如下

应用程序编程接口(API)是一种规范,旨在作为软件组件相互通信的接口。

这意味着,它是为了与core internals 还有你的themeplugin.

为什么

原因很简单:包装API允许核心internals 转换,同时仍与作为参数输入的任何内容保持兼容。包装函数可以在核心类/对象可能不具备的情况下添加向后兼容性。

它还缩短了代码,使其更具可读性,并允许您专注于代码需要完成的工作。

SO网友:Giovanni Putignano

当您使用分类法归档时(is_tax()true) queried_object 以这种方式填充(来自我的网站的示例):

public \'queried_object\' =>
object(stdClass)[163]
public \'term_id\' => int 2
public \'name\' => string \'Puglia\' (length=6)
public \'slug\' => string \'puglia\' (length=6)
public \'term_group\' => int 0
public \'term_taxonomy_id\' => int 7
public \'taxonomy\' => string \'region\' (length=6)
public \'description\' => string \'Bari, Brindisi, Lecce, Taranto, Foggia\' (length=38)
public \'parent\' => int 0
public \'count\' => int 1
public \'filter\' => string \'raw\' (length=3)
public \'queried_object_id\' => int 2
因此,您可以直接获得名称和描述。您可以使用的代码是:

<?php 
    $current_term_name = $wp_query->queried_object->name;
    $current_term_description = $wp_query->queried_object->description;
?>

<hgroup class="section-heading wrapper">
    <h1><?php echo $current_term_name; ?></h1>
    <h3><?php echo $current_term_description; ?></h3>
</hgroup>

SO网友:Justin Bell

$wp_query->queried_object->ID 有几个潜在的故障点:

您的查询可能没有处理WP_Post 对象这个queried_object can also reference a taxonomy in some circumstances.queried_object 可以为null,因此您需要一个不存在的对象的属性$wp_query 在没有引用该全局的代码中。如果你确定$wp_query 本身为空,应添加

global $wp_query; 
。。。在代码上方的某个位置。

结束

相关推荐

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

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