问题描述

由于某些需要,我正在使用我的 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()可以返回 NULLNULL 没有成员 ID,因为它不是一个对象。

404 页面上没有全局 post 对象。而且因为 $post 是一个全局变量,所以即使在单个页面上,它也可以随处可见。

所以每当你使用 get_the_ID(),你必须测试一个 post 对象。

if ( get_post() )
{
    $id = get_the_ID();
    // do something
}

这里有两个教训要学习:

  1. 不要信任 WordPress API 。阅读代码,了解其限制。

  2. 避免在你自己的代码中使用全局变量。把每一个作为一个严重的错误,立即摆脱它。

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。