在 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