在 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