Как обработать/что делать с объектом WP Error
Я выполняю некоторые функции WP напрямую внутри плагина, включая wp_insert_post(). Если что-то идет не так, функция возвращает объект WP Error. Какой правильный метод для обработки этой ошибки? Можно использовать встроенные функции WP, PHP исключения или что-то другое...
Присвойте возвращаемое значение функции переменной.
Проверьте переменную с помощью
is_wp_error()
.Если
true
, обработайте ошибку соответствующим образом, например, с помощьюtrigger_error()
и сообщения из методаWP_Error->get_error_message()
.Если
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();
}

Привет,
Сначала нужно проверить, является ли результат объектом 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.
Также есть небольшая статья здесь.
