Как поймать / что делать с WP Error Object

15

Я запускаю некоторые функции WP непосредственно внутри плагина, включая wp_insert_post (), если что-то пойдет не так, это возвращает объект WP Error, каков правильный способ отловить эту ошибку? Либо используя встроенные функции WP, либо исключения PHP, либо еще много чего.

Dunhamzzz
источник
4
Просто , чтобы добавить и уточнить , что сказано в ответах здесь, WP_Errorэто не PHP - Exceptionобъект. Вы не используете try/catchметоды с этим. Но, как уже было отмечено, есть удобные функции, облегчающие использование.
Дугал Кэмпбелл

Ответы:

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();
}
Rarst
источник
11

Hei,

Сначала вы проверяете, является ли ваш результат 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() примере выше.

Класс задокументирован в Кодексе .
И здесь также есть небольшая статья .

wyrfel
источник
Благодарность! Ваш первый фрагмент сделал работу для wp_insert_user.
Мухаммед Мурсалин
1
$wp_error = wp_insert_post( $new_post, true); 
                              echo '<pre>';
                              print_r ($wp_error);
                              echo '</pre>';

Это покажет вам, что именно не так с функцией вставки поста WordPress. просто попробуйте !


источник