在wp config中打开debug后,用WordPress的4.5 RC测试我的一个插件。php,我注意到核心WP文件中出现了一个错误
Notice: Trying to get property of non-object in /wp-includes/post-template.php on line 289
通过消除过程(关闭所有其他插件,直到再次找到消息),我认为这是由我的插件的选项页(我想它可能是主要的自定义贴子页)造成的,但没有错误消息帮助我找到位置。错误指向核心WP文件。
这个错误不会出现在管理员的任何地方,只会出现在某些页面上,如插件的主页、仪表板、用户、评论、外观、设置和“我的选项”页面本身,但奇怪的是,我的插件或帖子的任何其他编辑或帖子页面、网站的页面或媒体上都不会出现。
核心那一行的代码是
if ( false !== strpos( $post->post_content, \'<!--noteaser-->\' ) && ( ! $multipage || $page == 1 ) )
奇怪的是,我的选项页面没有帖子内容关系,只有选项,所以不知道为什么会调用这个函数(“get\\u the\\u content”的一部分)。由于没有比上面更具体的错误消息,也没有引用代码中某一行的错误消息,因此我很难找到代码的哪一部分可能会导致此问题。
有人能推荐一种更好的解决方法吗?是否有一些工具具有更好、更具体的错误报告功能,或者可以尝试查找和修复问题?我知道这只是一个通知,不是致命的,但如果可能的话,我仍然想修复它。
谢谢
最合适的回答,由SO网友:Stephen 整理而成
我找到了导致这种情况的原因,但这是反复尝试的结果,因为没有好的调试信息。错误出现在插件的主要部分(自定义后调用),而不是我之前猜测的选项中。我最终发现我需要使用
\'content\' => $p->post_content
在我的查询/foreach循环中代替
\'content\' => get_the_content($p->ID)
原始调试中的错误行(第289行)在一个名为“get\\u the\\u content”的函数(即我正在使用的函数)上失败,该函数最终在实际情况下变得清晰(尽管如果在调试中指明了代码中的那一行就好了)。无论如何,如果没有全局$post变量,这将无法工作,这将导致各种其他内容问题。但简单地直接拉取内容(而不是通过get\\u the\\u content函数)就解决了我的问题。希望这对其他人有帮助。