Php 试图在wordpress中获取非对象错误

Php 试图在wordpress中获取非对象错误,php,wordpress,object,Php,Wordpress,Object,在id为239的页面上,我试图隐藏某个post格式,使其无法显示,但我在所有页面上都遇到此错误: 尝试获取C:\wamp\www\wordpress\wp includes\query.php中非对象的属性(第4337行) 这是我在functions.php文件中使用的代码: function exclude_campaigns( $query ) { if( $query->is_main_query() && $query is_page(239) ) {

在id为239的页面上,我试图隐藏某个post格式,使其无法显示,但我在所有页面上都遇到此错误:

尝试获取C:\wamp\www\wordpress\wp includes\query.php中非对象的属性(第4337行)

这是我在functions.php文件中使用的代码:

function exclude_campaigns( $query ) {
     if( $query->is_main_query() && $query is_page(239) ) {
        $tax_query = array( array(
            'taxonomy' => 'post_format',
            'field' => 'slug',
            'terms' => array( 'post-format-link' ),
            'operator' => 'NOT IN',
        ) );
        $query->set( 'tax_query', $tax_query );
    }
}
add_action( 'pre_get_posts', 'exclude_campaigns' );
在is_页面检查之前删除$query后,它适用于我的示例:

无论如何,该错误表明is_页面函数存在一些问题。您可以尝试替换该支票:

if( $query->is_main_query() && ! empty( $query->posts ) && $query->posts[0]->ID == 239 ) {
    // ...
}

您应该在$query is\u page239中删除$query。它仍然会产生相同的错误。您也应该在is\u main\u查询之前删除$query。为我尝试过的回答干杯,但它也不起作用:出现不同的错误:注意:is\u main\u查询调用不正确。在pre_get_posts中,使用相同的非对象erorr underneathAh!这会阻止显示错误,但不会隐藏post格式。$query->posts不应该是$query->page吗?要查找id为239的页面?不,不应该。页面只是一种帖子。为了解决这个问题,我建议对$query对象进行var_转储,以验证在替换tax_查询时字段值是否正确。仔细想想,您是否真的使用post格式作为该特定页面的属性?或者你在该页面的自定义查询中显示帖子?我使用wordpress ajax load more在页面上显示帖子,但奇怪的是如果我删除if语句:if$query->is_main_query&&。。。等等,它正确地从页面中隐藏了post格式,但它也在CMS posts页面中隐藏了它。也许它不被认为是主查询:如果您是通过ajax加载的,您可以尝试检查DOING_ajax常量。