Get_the_ID()在第404页发出通知

时间:2013-12-11 作者:metalzade

由于某些需要,我在wp\\u enqueue\\u scripts操作中使用了get\\u the\\u ID(),但因此我收到了以下通知(wp debug已启用):

注意:正在尝试获取C:\\wamp\\www\\WordPress\\wp includes\\post模板中非对象的属性。php第29行

我知道为什么会这样,我的问题是为什么会这样?WordPress难道不应该知道没有分配给404的$post并返回一个空结果吗?

我必须使用:

if( !is_object($post) ) return;
我在任何地方都使用get\\u the\\u ID()来删除该通知?

2 个回复
最合适的回答,由SO网友:fuxia 整理而成

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, 因为它不是一个对象。

没有全局post 404页上的对象。因为$post 是一个全局变量,可以在任何地方删除,甚至可以在单个页面上删除。

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

if ( get_post() )
{
    $id = get_the_ID();
    // do something
}
这里有两个教训可以学习:

千万不要相信WordPress API。阅读代码,了解其局限性

SO网友:Pat J

您可以查看是否在404页面中:

if( is_404() ) {
    return;
}
get_the_ID();
// ...
参考

is_404()

结束

相关推荐

重定向期间忽略自定义ADMIN_NOTICES消息

我在中设置了错误处理机制one of my plugins 向管理区域添加通知和错误,就像核心一样。它在大多数情况下都能正常工作,但在某些情况下(如保存自定义帖子类型)却不能正常工作。我猜重定向是在幕后发生的,消息是在重定向发生之前打印的,因此它们似乎永远不会出现。所以,我猜这就是发生的事情用户编辑自定义帖子类型并点击Publish(发布)调用My post\\u updated(我的帖子更新)回调,该回调验证并保存自定义字段。回调添加错误消息。Wordpress重定向到某个页面以进行某些处理。调用My