WordPress 調試:基本指南

已發表: 2021-02-11

無論您是什麼級別的 WordPress 開發人員,您都會經常面臨一個問題:錯誤。 即使是最有經驗的開發人員也無法始終如一地以不會產生錯誤的方式進行編碼。 事實上,調試WordPress實際上可以幫助您更多地了解該平台!

如果您以前有過編程經驗,那麼您很可能在編譯或運行時遇到過錯誤。 除非你認輸並放棄項目,否則你很可能會花一些時間來運行代碼並跟踪問題。 WordPress 的動態是一樣的。

與使用通用編程語言進行編程不同,WordPress 錯誤不會簡單地打印在頁面上。 這是因為調試日誌通常包含敏感信息,例如數據庫憑據。 相反,WordPress 會將這些日誌放入您服務器上公眾無法訪問的文件中。

幸運的是,與美國陸軍開發的重達 30 噸的計算機不同,您無需從機器上清除死蟲即可完成此任務! 現在我們有了一些上下文,讓我們從技術角度來看看 WordPress 調試過程中的內容。

WordPress調試說明

您可能知道,WordPress 是使用 PHP 開發的。 這意味著官方 WordPress 調試指南以及官方 PHP 調試指南將是很好的資源,可以在此過程中為您提供幫助。

為了進行調試,WordPress 要求您定義一個全局 PHP 變量。 我們將在下一節詳細介紹如何做到這一點。

區分 PHP 調試過程與 WordPress 調試過程的不同很重要。 使用 vanilla PHP,默認情況下只顯示兩種類型的錯誤。 一個是“致命錯誤”,意思是嚴重到頁面甚至無法加載。 另一個只是在出現“敏感的致命錯誤”時向用戶顯示一個空白頁面。 換句話說,PHP 知道打印出完整的錯誤消息可能會帶來安全風險。 這些設置可以在 PHP 本身中輕鬆修改。

另一方面,WordPress 在調試方面有點囉嗦。 如果您只是啟用 WordPress 調試而不對其進行自定義,則會顯示每個級別的錯誤、警告,甚至是為開發人員提供的信息項。 這意味著將顯示從致命錯誤到關於如何優化 JavaScript 部分的技術消息的所有內容。 雖然這對開發人員非常有幫助,但它可能不是向用戶展示的最佳內容。

另一個獨特的功能是,您會收到有關已棄用的 WordPress 特定 PHP 函數的通知。 已棄用的功能現在可能仍然有效,但將來將不再支持它們。 這通常也意味著有更好、更快的方法來完成相同的過程。

我們知道您可能對調試 WordPress 並不感興趣,但如果您希望維護一個功能性博客或網站,這一點至關重要。 但是,在開始編輯文件之前,請務必先使用受信任的 WordPress 備份插件。 這樣,如果您不小心使您的網站無法運行,您只需點擊幾下即可恢復所有內容!

現在,讓我們來看看如何開始滾動吧!

如何在 WordPress 中啟用調試?

為了開始 WordPress 調試過程,我們需要幾行 PHP。

啟動您最喜歡的文本編輯器(只要您最喜歡的文本編輯器不是 Windows 記事本!)。 如果您需要抓住一個,Notepad++ 是一種常用的開源文本編輯器,幾乎支持所有編程語言。

接下來,下載 wp-config.php 文件的副本不要編輯原始文件! 完成後,我們將簡單地上傳修改後的版本。

在文本編輯器中打開 wp-config.php 後,您需要添加以下代碼行。 首先,搜索它以確保您還沒有它; 如果你定義同一個變量兩次,PHP 會很不高興!

 define( 'WP_DEBUG', true );

這行代碼所做的就是將名為 WP_DEBUG 的全局 PHP 變量設置為布爾值 true。

同樣,如果你希望把WordPress的調試功能關閉,你只是把代碼置線:

 define( 'WP_DEBUG', false );

這會打開調試,但如果我們不知道如何找到輸出的信息,那這並沒有太大幫助!

WordPress 調試日誌在哪裡?

從技術上講,這個問題有兩個答案,確切的答案取決於您的選擇。

正如我們所說,一種方法是直接插入define('WP_DEBUG', true);。 這使用默認的 WordPress 調試日誌設置,如果文件在 wp-content/debug.log 位置不存在(如果存在,則附加到它),它會自動創建一個文件。

但是,出於多種原因,您可能希望將其放置在不同的位置。 例如,您可能希望將它放在第三方調試工具可以訪問它的位置。 為了自定義調試日誌的放置位置,您可以像這樣啟用調試:

 define( 'WP_DEBUG_LOG', '/best-wp-dev/errors.log' );

WordPress 調試日誌解釋

WordPress 調試日誌中信息的詳細程度取決於您的配置方式。 如果您簡單地啟用它而不進行任何其他修改,您將記錄幾乎所有導致錯誤、使用不推薦使用的函數或不是最佳的事件。

由於 WordPress 建立在 PHP 之上,因此您的日誌將顯示拋出的每個 PHP 錯誤和警告。 它還將包含與每個事件關聯的日期、時間和 IP 地址。 不幸的是,您還會看到 PHP 的(非常)冗長的輸出,涉及許多方面,例如它不喜歡的代碼樣式、它認為應該加強的數據驗證等等。

特別是對於剛開始調試 WordPress 的人來說,查看日誌文件可能會讓人不知所措。 但是,您應該記住,只有少數項目是必需的。

調試與日誌記錄

儘管它們的目標是實現相同的目標,但了解調試和日誌記錄之間的區別很重要。 換句話說,這行define('WP_DEBUG', true); 做一些與定義( 'WP_DEBUG_LOG', true ); 行完全不同的事情。

任何情況下都不應該使用define('WP_DEBUG', true); 在公眾可以訪問的網站上。 該命令單獨使用時,將簡單地打印出調試消息。 這不會記錄任何內容,並且會輸出可用於從您的站點竊取數據的信息。 確保未開啟此功能,並結合可靠的 WordPress 安全插件,將阻止絕大多數未遂網絡攻擊。

iThemes Security(以前稱為 Better WP Security)

在不冒安全風險的情況下調試 WordPress

顯然,您需要定期調試您的網站。 但是,您可能不想在 wp-config.php 文件中不斷添加和刪除代碼行。

仔細考慮這個過程,我們首先需要啟用一般的調試。 然後,我們需要確保我們記錄錯誤以便修復它們。 但是,我們希望顯示這些錯誤給公眾。 請記住,我們需要禁止顯示標準 PHP 錯誤和特定於 WordPress 的錯誤。

示例安全 WordPress 調試代碼

使用我們上面概述的過程,這裡有四行代碼可以幫助您開始安全地調試站點!

 define( 'WP_DEBUG', true ); define( 'WP_DEBUG_LOG', true ); define( 'WP_DEBUG_DISPLAY', false ); @ini_set( 'display_errors', 0 );

上面的前三行只是簡單的設置了 WordPress 關注的全局 PHP 變量。 我們讓調試、設置日誌功能以及關閉 WordPress 特定的錯誤成為可能。

很可能第四行看起來像是從左外場出來的! 此行用於解決 WordPress 未處理的 PHP 錯誤。 這是確保惡意用戶無法訪問敏感站點信息的最後一個基礎。

如何修復 WordPress 調試錯誤?

很多時候,開發人員會使用我們看過的那四行代碼。 他們會遇到錯誤,例如數據庫連接失敗,但調試日誌中不會有任何相關內容。 這是因為 WordPress 有不同的全局 PHP 變量用於不同的調試方法。

讓我們看幾個場景,您需要在 wp-config.php 文件中再添加幾行,以便正確調試 WordPress。

調試 WordPress JavaScript

如果您有一個 WordPress 網站,它很有可能使用 JavaScript。 對於新的開發人員來說,這本質上是支持網站交互元素的語言。 JavaScript 因調試起來非常乏味而臭名昭著。 這是因為現代網站通常在 JavaScript 之上使用框架,從而使警告和錯誤消息進一步複雜化。

不幸的是,這並不是使調試 WordPress JavaScript 變得困難的唯一原因。 JavaScript 有兩種基本形式:異步或“AJAX”,以及常規JavaScript。 常規 JavaScript 以線性方式運行; 它不會運行一個函數,直到它結束之前執行一個函數。 儘管這可能在 Web 的早期階段就已經解決了,但對於 Web 應用程序來說並沒有削減它。

另一方面,AJAX 在您的 WordPress 網站的後台運行。 它允許您運行 JavaScript 函數並等待它們的輸出,但它不會阻止其他函數的運行。 通常需要防止站點鎖定。

WordPress 讓我們使用另一個 PHP 全局變量來表示我們要調試腳本的原因是因為這種調試方法會輸出大量數據。

WordPress 讓我們使用另一個 PHP 全局變量來表示我們要調試腳本的原因是因為這種調試方法會輸出大量數據。 也是因為 JavaScript 和 CSS 運行在客戶端,而 PHP 運行在服務器端。 為了輸出 WordPress 由於 JavaScript 和 CSS 遇到的每個錯誤,只需添加以下行:

 define( 'SCRIPT_DEBUG', true);

這將顯示 JavaScript 和 CSS(樣式表)錯誤。 它還可以幫助處理那些更複雜的 AJAX 操作。

修復數據問題

幾乎每個網站都從數據庫中獲取信息。 WordPress 有幾個數據庫; 有些站點將數據庫存儲在不同的服務器上,有些站點將它們保存在同一台服務器上。 由於所有配置都不同,因此您的數據庫連接總是有可能出現問題。

如果您收到一條錯誤消息,指出 WordPress 無法連接到數據庫,或者您注意到數據未正確提取,則您可能需要進行調試。 只需使用標準的 WordPress 調試變量,您可能會注意到,當您遇到與數據庫相關的錯誤時,不會記錄任何內容。

這是因為 WordPress 將與數據庫相關的錯誤與所有其他錯誤分開。 數據庫錯誤消息通常包含敏感信息,WordPress 的開發人員希望確保您不會意外將私人信息洩露給公眾!

為了開始調試 WordPress 數據庫問題,您需要在 wp-config.php 文件中添加另一行:

 define( 'SAVEQUERIES', true );

深入了解數據庫調試

與我們其他的全局 WordPress 調試變量不同,我們需要特別注意這個。 “SAVEQUERIES”告訴 WordPress 我們希望看到每個查詢運行及其返回的結果。 這將嚴重損害整個站點的性能! 小心不要在高峰時間在您的服務器上運行它,並在不需要時立即將其關閉。

它還以稍微不同的方式存儲其輸出。 WordPress 使用 PHP 字符串數組,您需要訪問這些字符串才能查看數據庫調試信息。 它位於名為 $wpdb 的 PHP 全局變量和名為查詢的成員數組中。 您可以通過打印 $wpdb->queries 的內容來訪問它

調試 WordPress 插件

WordPress 相對於其他平台的主要優勢之一是其豐富的插件庫,幾乎可以做任何事情。 您可能正在閱讀本文,並且已經開始為需要不斷更改文件內容的後勤工作而頭疼。 幸運的是,一些插件可以幫助我們調試 WordPress! 有兩個特別受歡迎的使它變得輕而易舉。

WP調試

位於 WordPress 站點,這是最著名的 WordPress 調試插件之一。 它基本上自動化了我們已經討論過的流程。 只需在儀表板上單擊幾下,您就可以在您的站點上打開和關閉所有這些 PHP 全局變量。

當你安裝這個插件時,你也安裝了它所依賴的一系列插件。 總的來說,它們讓您記錄並幫助您解釋遇到的錯誤。

此工具非常適合啟用調試過程,但為了調試您自己的插件並輕鬆查看與數據庫相關的 WordPress 調試信息,您還需要另一個插件。

調試欄

顧名思義,調試欄只是 WordPress 網站管理面板上的一個欄。 它可以與 WP 調試工具結合使用。

它為更高級的開發人員提供了工具,允許他們查看緩存、已輸出的查詢、查詢結果以及更高級的信息。 就像我們提到的,WordPress 將所有數據庫調試信息放入 PHP 全局變量中。

為了實際查看該信息,您需要在自定義 PHP 文件中遍歷該數組。 這個插件給你一個簡單的選擇。 它以易於閱讀和理解的格式為您打印所有這些信息。 它甚至為您提供了一些有關如何優化數據庫調用的提示!

獲取獎勵內容:選擇 WordPress 備份插件的 10 個功能
點擊這裡

調試 WordPress 主題

調試 WordPress 主題通常涉及啟用有關腳本的 PHP 全局變量。 這是因為主題使用客戶端 JavaScript 和 CSS。

首先,確保它是您創作的主題。 如果是遇到問題的第三方主題,您需要聯繫該主題的作者。 自己做這件事簡直就像大海撈針一樣!

如果這是您自己的主題,請確保您按照我們討論的步驟啟用調試。 執行任何導致您注意到錯誤的操作。 您還可以通過按 F12 在 Web 瀏覽器中啟用開發者控制台。 這會顯示更多客戶端級別的錯誤消息,可以在此過程中提供幫助。

在對您的主題執行導致錯誤的操作後,請查閱日誌。 那裡應該有關於導致錯誤的原因的詳細信息。 很有可能只需要對 JavaScript 和/或 CSS 進行一些調整即可讓一切恢復正常!

調試 WordPress 嚴重錯誤

如果插件、主題或其他自定義內容生成錯誤導致您的 WordPress 網站失敗,您的網站應該向您發送一封關於失敗的電子郵件。 特別是對於新的網站管理員來說,這可能會令人痛苦。

無需擔心,因為您只需按照這一系列步驟即可在很短的時間內解決問題!

  1. 確保您已打開 WordPress 調試模式。
  2. 訪問您的錯誤日誌。 它應該有關於致命錯誤的詳細信息。 如果是這樣,請在線搜索確切的錯誤代碼。
  3. 檢查您的 PHP 版本。 如果這不是 WordPress 當前所需要的,只需更新您的服務器使用的 PHP 版本即可解決問題。
  4. 如果您仍然沒有運氣,請查看您的插件。 將它們全部關閉。 如果該站點有效,則意​​味著該問題是由插件引起的。 一一瀏覽它們,直到找到有問題的插件。 聯繫寫它的人並要求他們修復它。
  5. 如果您仍未發現問題,則可能是與主題相關的問題。 嘗試將您當前的主題恢復為默認的 WordPress 主題。 如果您的網站有效,您需要暫時更改主題,直到作者解決問題。
  6. 沒有骰子? 在 WordPress 開發者論壇上提出您的錯誤。 有很多用戶很樂意為您提供幫助。

包起來

調試 WordPress 可以幫助您解決您遇到的許多問題。 它可以告訴您哪些插件有問題或主題可能有什麼問題。 作為 WordPress 開發人員,調試不僅可以幫助您成為更好的開發人員,還可以幫助您生成乾淨、高質量的代碼。