問題描述
由於某些需要,我正在使用我的 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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。