如何捕获/处理WP错误对象


15

我正在插件内部直接运行一些WP函数,包括wp_insert_post(),如果出现问题,这将返回WP Error对象,捕获此错误的正确方法是什么?使用内置的WP函数或PHP异常等等。


4
只需添加并澄清在这里的回答说,WP_Error不是一个PHP Exception对象。您不使用try/catch它的方法。但是如前所述,有一些便利功能使其易于使用。
Dougal Campbell

Answers:


21
  1. 将函数的返回值分配给变量。

  2. 用检查变量is_wp_error()

  3. 如果进行相应true处理,例如trigger_error()使用来自WP_Error->get_error_message()方法的消息。

  4. 如果false-照常进行。

用法:

function create_custom_post() {
  $postarr = array();
  $post = wp_insert_post($postarr);
  return $post;
}

$result = create_custom_post();

if ( is_wp_error($result) ){
   echo $result->get_error_message();
}

11

首先,检查天气,您的结果是否为WP_Error对象:

$id = wp_insert_post(...);
if (is_wp_error($id)) {
    $errors = $id->get_error_messages();
    foreach ($errors as $error) {
        echo $error; //this is just an example and generally not a good idea, you should implement means of processing the errors further down the track and using WP's error/message hooks to display them
    }
}

这是通常的方式。

但是可以实例化WP_Error对象而不会发生任何错误,只是为了以防万一。如果要这样做,可以使用以下命令检查是否有任何错误get_error_code()

function my_func() {
    $errors = new WP_Error();
    ... //we do some stuff
    if (....) $errors->add('1', 'My custom error'); //under some condition we store an error
    .... //we do some more stuff
    if (...) $errors->add('5', 'My other custom error'); //under some condition we store another error
    .... //and we do more stuff
    if ($errors->get_error_code()) return $errors; //the following code is vital, so before continuing we need to check if there's been errors...if so, return the error object
    .... // do vital stuff
    return $my_func_result; // return the real result
}

如果这样做,则可以像wp_insert_post()上面的示例一样检查返回错误的进程。

该类记录在食典上
这里也有一篇小文章


谢谢!您的第一个代码片段为wp_insert_user完成了工作。
Mohammad Mursaleen 2014年

1
$wp_error = wp_insert_post( $new_post, true); 
                              echo '<pre>';
                              print_r ($wp_error);
                              echo '</pre>';

这将向您确切显示wordpress帖子插入功能出了什么问题。去尝试一下 !

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.