在 WordPress 的執行中難免會產生一些錯誤,我們不希望錯誤直接阻止了使用者對網站的順暢訪問。
這裡指的錯誤並不是 PHP 程式碼錯誤。而是在處理一些資料的時候產生的,尤其是處理表單資料,因為不可能所有使用者都會完全按照我們的要求提交資料。
比如,在註冊使用者的時候需要使用者填寫電子郵件。使用者可能會輸入不符合電子郵件格式的內容,或者這個電子郵件已經有使用者使用,那麼就會產生一個錯誤,導致使用者無法順利註冊。
由於錯誤多種多樣,WordPress 使用了一個 WP_Error 類來統一錯誤的儲存方式,有了統一的方式,外掛和主題就能更好的讀取和新增一些錯誤,也能簡化錯誤的儲存程式碼。
屬性
$errors
用於儲存所有的錯誤。
$error_data
儲存錯誤的額外資料。
這些屬性均為類私有 (private) 。
方法
get_error_codes()
獲取所有錯誤程式碼。
get_error_code()
獲取第一個可用的錯誤程式碼,如果沒有則返回空。
get_error_messages( $code = '' )
獲取一個錯誤的所有錯誤訊息。
get_error_message( $code = '' )
獲取一個錯誤的第一個錯誤訊息。
get_error_data( $code = '' )
獲取錯誤的額外資料,沒有額外資料返回 null.
add( $code, $message, $data = '' )
新增一個錯誤資訊。
add_data( $data, $code = '' )
新增錯誤的額外資料。
WP_Error( $code = '', $message = '', $data = '' ), __construct( $code = '', $message = '', $data = '' )
WP_Error 的建構函式,例項化類的時候自動執行,所有的引數都是可選的。可以直接在例項化類的時候新增一個錯誤。
使用方法
比如下邊這個郵件傳送函式,如果發生錯誤,就會把錯誤返回出去。任何錯誤都沒產生,而且郵件傳送順利則返回 True.
|
functionBing_send_mail($email){ if(empty($email))returnnewWP_Error('empty_email','郵箱不能為空'); if(!is_email($email))returnnewWP_Error('invalid_email','郵箱格式不正確'); if(wp_mail($email,'測試郵件','Hello World'))returntrue; returnnewWP_Error('send_error','郵件傳送失敗'); } |
下方是一個登入檔單的處理函式,裡邊多次使用了 WP_Error:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
functionBing_register_user(){ $sanitized_user_login=sanitize_user($_POST['username']); $user_email=apply_filters('user_registration_email',$_POST['email']); $register_errors=newWP_Error; //驗證使用者名稱 if(empty($sanitized_user_login))$register_errors->add('empty_username',__('使用者名稱不能為空','Bing')); elseif(!validate_username($sanitized_user_login))$register_errors->add('invalid_username',__('使用者名稱包含無效字元','Bing')); elseif(username_exists($sanitized_user_login))$register_errors->add('username_exists',__('使用者名稱已經存在','Bing')); //驗證郵箱 if(empty($user_email))$register_errors->add('empty_email',__('郵箱不能為空','Bing')); elseif(!is_email($user_email))$register_errors->add('invalid_email',__('郵箱格式不正確','Bing')); elseif(email_exists($user_email))$register_errors->add('email_exists',__('郵箱已經存在','Bing')); //登入檔單提交事件 do_action('register_post',$sanitized_user_login,$user_email,$register_errors); //錯誤過濾器 $register_errors=apply_filters('registration_errors',$register_errors,$sanitized_user_login,$user_email); //註冊使用者 if(!$register_errors->get_error_message()){ $register_new_user=register_new_user($sanitized_user_login,$user_email); if(is_wp_error($register_new_user))return$register_new_user; returntrue; } return$register_errors; } |
判斷 WP_Error
在很多時候我們要判斷函式返回的到底是 WP_Error 還是其它內容,因為 WP_Error 是一個類,所以無法透過 True 或 False 直接判斷。
WordPress 提供了一個 is_wp_error() 函式,用它我們就能判斷變數是否是 WP_Error:
|
$register=Bing_register_user(); if(is_wp_error($register))wp_die('註冊失敗:'.$register->get_error_message()); |
其它
此類位於:wp-includes/class-wp-error.php