WordPress 的 WP_Error
類提供了一種簡單而強大的錯誤處理機制,用於管理和修改應用程序中的錯誤。它易於集成到你的應用程序中,有效處理 WordPress 核心函數返回的錯誤,並創建自定義錯誤消息,提升用戶體驗。此外,is_wp_error
等實用函數可以檢查變量或函數返回值是否為 WP_Error
實例,從而高效地調試問題。
無論你的代碼編寫多麼熟練和細緻,在任何開發過程中都無法避免錯誤。作為 WordPress 開發者,你的職責是確保所有代碼錯誤得到正確處理,而不會影響最終用戶。 WordPress 自帶一個基本的錯誤處理類 WP_Error
,可以將其集成到你的代碼中進行基本的錯誤處理。
本教程將探討 WP_Error
類的基本結構、工作原理,最重要的是,我們將介紹如何在應用程序中集成 WP_Error
類。
WP_Error
類詳解WP_Error
類的結構簡單卻功能強大,足以用作插件的錯誤處理機制。其源代碼位於 wp-includes/class-wp-error.php
文件中。讓我們來看看它的屬性和方法。
WP_Error
只有兩個私有屬性:$errors
和 $error_data
。 $errors
用於存儲相關的錯誤消息,而 $error_data
可選用於存儲你稍後要訪問的相關數據。 WP_Error
使用簡單的鍵值對將相關的錯誤和數據存儲到對像中,因此在 WP_Error
中定義的鍵必須是唯一的,以避免覆蓋先前定義的鍵。
WP_Error
提供多種方法來修改其包含的兩個屬性。讓我們來看幾個:
get_error_codes()
:返回特定 WP_Error
實例的所有可用錯誤代碼。如果只需要第一個錯誤代碼,可以使用另一個單獨的函數 get_error_code()
。 get_error_messages( $code )
:如果沒有提供 $code
,該函數將簡單地返回特定 WP_Error
實例中存儲的所有消息。同樣,如果只需要返回特定錯誤代碼的消息,只需使用 get_error_message( $code )
。 add( $code, $message, $data )
:此函數在想要修改已實例化的 WP_Error
對像中存儲的錯誤時特別有用。請注意,即使 $message
和 $data
不是必需的,$errors
變量仍將被填充。 add_data( $data, $code)
:如果你只想修改 $error_data
屬性,可以使用此函數。請注意,$code
參數位於第二個位置,與 add
方法相反。如果沒有提供 $code
,錯誤數據將添加到第一個錯誤代碼。 remove( $code )
:這是最近在 WordPress 4.1 中添加的一種新方法,它刪除與特定鍵關聯的所有錯誤消息和數據。 如何知道函數返回的特定變量或數據是否是 WP_Error
的實例?可以使用一個實用函數 is_wp_error()
來檢查,它根據給定的變量返回 true 或 false。
is_wp_error( $thing )
:如果 $thing
是 WP_Error
實例,則返回 true,否則返回 false。 WP_Error
僅僅了解 WP_Error
的內部工作原理是不夠的,你還需要學習如何在自己的應用程序中很好地實現它。讓我們通過幾個例子來更好地了解它的工作原理。
WordPress 提供了許多實用函數,可以用來加快我們的開發進程。大多數函數也配備了我們可以使用的基本錯誤處理功能。
例如,wp_remote_post
是一個非常有用的函數,我們可以用它向特定 URL 發出遠程 POST 請求。但是,我們不能指望遠程 URL 總是可訪問的,或者我們的請求總是成功的。我們從手冊頁面知道,此函數在失敗時將返回 WP_Error
。此知識將幫助我們在應用程序中正確實現錯誤處理。
請看這段代碼:
<code class="language-php">// 向远程 URL $url 发出请求 $response = wp_remote_post( $url, array( 'timeout' => 30, 'body' => array( 'foo' => 'bar' ) ) ); if ( is_wp_error( $response ) ) { echo 'ERROR: ' . $response->get_error_message(); } else { // 执行某些操作 }</code>
如你所見,我們正在向 $url
執行遠程 POST 請求。但是,我們並不簡單地按原樣獲取 $response
數據,而是使用前面介紹過的方便的 is_wp_error
函數進行一些檢查。如果一切正常,我們才能繼續執行我們想對 $response
執行的操作。
假設你有一個處理聯繫表單提交的自定義函數,名為 handle_form_submission
。假設我們在某個地方設置了一個自定義表單,讓我們看看如何通過實現我們自己的錯誤處理功能來改進該函數。
<code class="language-php">// 向远程 URL $url 发出请求 $response = wp_remote_post( $url, array( 'timeout' => 30, 'body' => array( 'foo' => 'bar' ) ) ); if ( is_wp_error( $response ) ) { echo 'ERROR: ' . $response->get_error_message(); } else { // 执行某些操作 }</code>
當然,你還需要在這些函數中實現你自己的清理和驗證,但這不在本教程的討論範圍之內。現在,知道我們在錯誤時正確返回 WP_Error
實例後,我們可以用它向最終用戶提供更有意義的錯誤消息。
假設你的應用程序中有一個特定部分用於顯示表單提交錯誤,你可以這樣做:
<code class="language-php">function handle_form_submission() { // 在此处执行你的验证、nonce 等操作 // 实例化 WP_Error 对象 $error = new WP_Error(); // 确保用户提供名字 if ( empty( $_POST['first_name'] ) ) { $error->add( 'empty', 'First name is required' ); } // 也需要姓氏 if ( empty( $_POST['last_name'] ) ) { $error->add( 'empty', 'Last name is required' ); } // 检查电子邮件地址 if ( empty( $_POST['email'] ) ) { $error->add( 'empty', 'Email is required' ); } elseif ( ! is_email( $_POST['email'] ) ) { $error->add( 'invalid', 'Email address must be valid' ); } // 最后,检查消息 if ( empty( $_POST['message'] ) ) { $error->add( 'empty', 'Your message is required' ); } // 发送结果 if ( empty( $error->get_error_codes() ) ) { return true; // 没有错误 } // 有错误 return $error; }</code>
在軟件開發中精益求精也意味著要知道當你的代碼無法執行其應執行的操作時該怎麼做,並確保你的應用程序能夠優雅地處理它。
就 WordPress 而言,使用自帶的 WP_Error
類提供了一種相當簡單但功能強大的錯誤處理實現,你可以將其集成到你的應用程序中。
(此處省略了原文中的外部參考和常見問題解答部分,因為它們是原文的直接複製,不符合偽原創的要求。)
以上是WP_ERROR課程的簡介的詳細內容。更多資訊請關注PHP中文網其他相關文章!