Как обработать/что делать с объектом WP Error

4 мар. 2011 г., 15:58:48
Просмотры: 40.5K
Голосов: 21

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

1
Комментарии

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

Dougal Campbell Dougal Campbell
4 мар. 2011 г. 22:17:56
Все ответы на вопрос 3
0
33
  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();
}
4 мар. 2011 г. 16:08:02
1
14

Привет,

Сначала нужно проверить, является ли результат объектом WP_Error или нет:

$id = wp_insert_post(...);
if (is_wp_error($id)) {
    $errors = $id->get_error_messages();
    foreach ($errors as $error) {
        echo $error; // это просто пример, и обычно так делать не стоит. Лучше обрабатывать ошибки дальше и использовать хуки WordPress для их отображения
    }
}

Это стандартный способ.

Но объект WP_Error можно создать без возникновения ошибки, просто как хранилище для возможных ошибок. Если вы хотите так сделать, можно проверить наличие ошибок с помощью get_error_code():

function my_func() {
    $errors = new WP_Error();
    ... // выполняем какие-то действия
    if (....) $errors->add('1', 'Моя пользовательская ошибка'); // при определённом условии сохраняем ошибку
    .... // продолжаем выполнять действия
    if (...) $errors->add('5', 'Моя другая пользовательская ошибка'); // при другом условии сохраняем ещё одну ошибку
    .... // и делаем что-то ещё
    if ($errors->get_error_code()) return $errors; // следующий код критически важен, поэтому перед продолжением проверяем наличие ошибок... если они есть, возвращаем объект ошибок
    .... // выполняем критически важные действия
    return $my_func_result; // возвращаем реальный результат
}

Если так сделать, можно затем проверить и обработать возвращённые ошибки так же, как в примере с wp_insert_post() выше.

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

4 мар. 2011 г. 16:13:19
Комментарии

Спасибо! Ваш первый сниппет сработал для wp_insert_user.

Mohammad Mursaleen Mohammad Mursaleen
17 дек. 2014 г. 12:37:54
0
$wp_error = wp_insert_post( $new_post, true); 
                              echo '<pre>';
                              print_r ($wp_error);
                              echo '</pre>';

Это покажет вам точную причину ошибки при вставке записи в WordPress. Просто попробуйте!

20 апр. 2011 г. 00:02:20