问题描述
由于某些需要,我正在使用我的 wp_enqueue_scripts 操作中的 get_the_ID(),但是由于我收到以下通知 (wp-debug 已打开):
Notice: Trying to get property of non-object in C:wampwwwWordPresswp-includespost-template.php on line 29
我知道为什么会发生这种情况,我的问题是为什么会发生这种情况?不是 WordPress 应该知道没有 $ post 分配给 404 并返回一个空的结果?
我必须使用:
if( !is_object($post) ) return;
无处不在我用 get_the_ID() 去摆脱这个通知?
最佳解决方案
get_the_ID()
已损坏。
function get_the_ID() {
return get_post()->ID;
}
它尝试使用成员 ID
在有时返回 post
对象的函数:
/*
* @return WP_Post|null WP_Post on success or null on failure
*/
function get_post( $post = null, $output = OBJECT, $filter = 'raw' ) {
get_posts()
可以返回 NULL
,NULL
没有成员 ID
,因为它不是一个对象。
404 页面上没有全局 post
对象。而且因为 $post
是一个全局变量,所以即使在单个页面上,它也可以随处可见。
所以每当你使用 get_the_ID()
,你必须测试一个 post
对象。
if ( get_post() )
{
$id = get_the_ID();
// do something
}
这里有两个教训要学习:
-
不要信任 WordPress API 。阅读代码,了解其限制。
-
避免在你自己的代码中使用全局变量。把每一个作为一个严重的错误,立即摆脱它。
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。