問題描述

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