正在尝试获取wp-includes/capabilities.php中非对象的属性

时间:2012-10-23 作者:ivavid

在调试中,我每分钟都会收到以下通知序列。日志:

[23-Oct-2012 13:27:33 UTC] PHP Notice:  Trying to get property of non-object in mysite/wp-includes/capabilities.php on line 1022
[23-Oct-2012 13:27:33 UTC] PHP Notice:  Trying to get property of non-object in mysite/wp-includes/capabilities.php on line 1023
[23-Oct-2012 13:27:33 UTC] PHP Notice:  Trying to get property of non-object in mysite/wp-includes/capabilities.php on line 1023
[23-Oct-2012 13:27:33 UTC] PHP Notice:  Trying to get property of non-object in mysite/wp-includes/capabilities.php on line 1026
[23-Oct-2012 13:27:33 UTC] PHP Notice:  Trying to get property of non-object in mysite/wp-includes/capabilities.php on line 1026
[23-Oct-2012 13:27:35 UTC] PHP Notice:  Trying to get property of non-object in mysite/wp-includes/capabilities.php on line 1022
[23-Oct-2012 13:27:35 UTC] PHP Notice:  Trying to get property of non-object in mysite/wp-includes/capabilities.php on line 1023
[23-Oct-2012 13:27:35 UTC] PHP Notice:  Trying to get property of non-object in mysite/wp-includes/capabilities.php on line 1023
[23-Oct-2012 13:27:35 UTC] PHP Notice:  Trying to get property of non-object in mysite/wp-includes/capabilities.php on line 1026
[23-Oct-2012 13:27:35 UTC] PHP Notice:  Trying to get property of non-object in mysite/wp-includes/capabilities.php on line 1026
我禁用了所有插件并选择了默认的211主题,但仍然得到了它。如何对此进行故障排除?我正在使用WordPress 3.4.2。

5 个回复
SO网友:Seth Alling

你可能已经解决了这个问题,但我刚刚解决了这个问题。希望,如果有人遇到这个问题,这可能会有所帮助。

我的问题来自Discus评论系统插件。因为我使用了我的disqs用户名在开发网站上做了一些测试评论,当我将我的生产网站链接到开发网站时,它在不存在的测试博客帖子上创建了评论。

我必须进入数据库并删除附加到不存在的帖子ID的注释行,这为我解决了问题。

SO网友:Johannes Pille

通知的实际“顺序”是您在上面发布的内容的一半(请参见其中一条的2秒偏移量,另一条的重复行号)。

此通知来自map_meta_cap() 将自定义post类型功能映射到常规或基本post相关功能的函数。

这里是lines 1020 through 1028 of /wp-includes/capabilities.php (as in 3.4.2):

$post_type = get_post_type_object( $post->post_type );

if ( ! $post_type->map_meta_cap ) {
    $caps[] = $post_type->cap->$cap;
    // Prior to 3.1 we would re-call map_meta_cap here.
    if ( \'edit_post\' == $cap )
        $cap = $post_type->cap->$cap;
    break;
}
所以从技术上讲,在上面的第一行中$post global确实有$post_type 财产,但当它被提供给get_post_type_object() 函数失败,不返回post类型对象
因此您收到1022的一份通知($post_type->map_meta_cap), 1023中的两个($post_type->cap->$cap) 1026的两个($post_type->cap->$cap).

现在我不得不让你失望。到底是什么map_meta_cap(), 无论是从核心还是非核心,以及为什么所讨论的职位类型slug似乎不是有效的注册职位类型——我不知道也没有建议。

SO网友:Marco Gonzaga

我知道这是一个老问题,但我得到了这个问题并解决了它。

我只是清理数据库临时选项。

我使用了插件WP-Optmize 这样做。只需记住在安装和运行插件之前进行备份。我已经使用这个插件一段时间了,非常有效。

SO网友:T.Todua

您可以尝试在ACTION中执行命令(因为wordpress当时已经正常加载)。像这样:

ADD_ACTION(\'init\',\'your_function\');

function your_function(){
    YOUR CODES HEREEEEEEEEEEE............
}

SO网友:N Zhang

警告是因为数据库中wp\\U posts表中的数据不一致。

在我的例子中,我使用了一个电子商务插件,该插件在wp\\u posts表上生成了一些记录,然后该插件被禁用,但记录仍在表中。

要找出哪个记录,可以在功能上添加临时var\\u转储。php(不要忘记在测试后删除它,因为它是一个核心文件)。

例如,要知道是哪条记录导致了第1165行$post\\U type->map\\U meta\\U cap的警告,请插入以下代码:if(!isset($post\\U type->map\\U meta\\U cap))var\\u dump($post);

正如前面所指出的,这只是一个警告。

希望有帮助。

结束

相关推荐

Displaying oEmbed errors?

有时,通过oEmbed嵌入项目是不可能的,例如,当YouTube视频已禁用嵌入时。The oEmbed service will return a 401 Unauthorized, 并且不会转换代码。有没有办法通知用户这一点?当前的工作流是非直观的(至少对我来说),我更喜欢在WordPress页面上,或者更好的是,在编辑器中显示一条消息,说明对象无法嵌入。