PHP正在尝试获取非对象的属性‘ID’

时间:2020-04-09 作者:JoaMika

我在页面模板中使用此代码来确定自定义帖子类型,并为每个自定义帖子类型显示不同的模板。

if ( $query->have_posts() )
 {
    ?>
 <ul id="floros">
    <?php
    while ($query->have_posts())
    {
        $query->the_post();

        ?>

<?php
    $curtype = get_post_type( $post->ID );
    switch ($curtype) {
        case "events":
        ?>

        <?php
        break;
        case "brands":
        ?>
..etc
但是,我对这一行有一个问题:$curtype = get_post_type( $post->ID );

Trying to get property \'ID\' of non-object in search-filter/results.php on line 37
PHP Notice:  Undefined variable: post in search-filter/results.php on line 37
页面按预期显示结果,但调试日志中填充了上述内容的重复行。我想我需要以某种方式只检查第一个对象的类型来避免这个错误?

1 个回复
最合适的回答,由SO网友:cybmeta 整理而成

错误说明了一切。您正在尝试获取财产ID 非对象的。这意味着$post var不是对象。

您可以在WordPress循环中使用get_the_ID(), 但实际上,在这种情况下,您并不需要它(请参见下面的解释)。

if ( $query->have_posts() ) {

    while ( $query->have_posts() ) {

        $query->the_post();

        $current_post_type = get_post_type( get_the_ID() );

        // Use $query->post if you want to get
        // current post object in full
        // ex: $query->post->ID

    }

    // Do not forget to reset post data after a custom wp_query loop
    // to restore global $post to main wp_query data
    wp_reset_postdata();

}
PD:实际上,$query->the_post() 设置全局$post 到循环中的当前post,以及get_post_type() 检查全局$post 如果它没有收到不同的post数据或ID,这就是为什么尽管出现错误,您的代码仍能正常工作的原因。

相关推荐

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

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