Класс WP_Error является стандартным механизмом обработки ошибок в WordPress. Вместо генерации фатальных ошибок многие функции ядра возвращают объект WP_Error, который содержит код ошибки, описание проблемы и дополнительные данные.

Правильная работа с WP_Error позволяет создавать более стабильные плагины, темы и пользовательские решения, а также предотвращать появление критических ошибок на сайте.

В данной статье подробно рассмотрим устройство класса WP_Error, основные методы и практические примеры использования.

Что такое WP_Error

WP_Error — это встроенный класс WordPress для хранения и передачи информации об ошибках.

Вместо значения false функция может вернуть объект ошибки:

WP_Error Object ( [errors] => Array ( [error_code] => Array ( [0] => Текст ошибки ) ) )

Такой подход позволяет получить более подробную информацию о причине сбоя.

Создание объекта WP_Error

Создать объект ошибки можно вручную:

$error = new WP_Error( 'invalid_email', 'Указан некорректный email' );

Первый параметр — код ошибки.

Второй параметр — сообщение.

Передача дополнительных данных

Третий параметр позволяет передавать служебную информацию.

$error = new WP_Error( 'user_not_found', 'Пользователь не найден', array( 'user_id' => 125 ) );

Эти данные можно использовать для отладки или логирования.

Проверка через is_wp_error()

Перед использованием результата функции рекомендуется проверить, не является ли он объектом ошибки.

$user = get_user_by( 'email', $email ); if ( is_wp_error( $user ) ) { echo $user->get_error_message(); }

Это наиболее распространенный способ работы с WP_Error.

Почему нельзя использовать только if()

Неправильный вариант:

if ( $result ) { // код }

Объект WP_Error считается существующим объектом и условие будет истинным.

Поэтому обязательно используйте:

if ( is_wp_error( $result ) ) { // обработка ошибки }

Получение текста ошибки

Метод get_error_message() возвращает описание ошибки.

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

Результат:

Указан некорректный email

Получение кода ошибки

Для анализа можно получить код ошибки.

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

Результат:

invalid_email

Получение всех сообщений

Объект может содержать несколько ошибок одновременно.

$error = new WP_Error(); $error->add( 'email_error', 'Некорректный email' ); $error->add( 'name_error', 'Не указано имя' );

Получение массива сообщений:

$messages = $error->get_error_messages(); print_r($messages);

Результат:

Array ( [0] => Некорректный email [1] => Не указано имя )

Добавление ошибки после создания объекта

Используется метод add().

$error = new WP_Error(); $error->add( 'empty_field', 'Поле обязательно для заполнения' );

Это удобно при пошаговой валидации формы.

Пример проверки формы

$errors = new WP_Error(); if ( empty($_POST['name']) ) { $errors->add( 'empty_name', 'Введите имя' ); } if ( empty($_POST['email']) ) { $errors->add( 'empty_email', 'Введите email' ); } if ( $errors->has_errors() ) { print_r( $errors->get_error_messages() ); }

Проверка наличия ошибок

Начиная с новых версий WordPress доступен метод:

if ( $errors->has_errors() ) { echo 'Обнаружены ошибки'; }

Он упрощает проверку объекта.

Получение дополнительных данных

Если при создании были переданы данные:

$error = new WP_Error( 'api_error', 'Ошибка API', array( 'status' => 500 ) );

Получить их можно следующим образом:

$data = $error->get_error_data( 'api_error' ); print_r($data);

Результат:

Array ( [status] => 500 )

Возврат ошибок из собственной функции

Один из самых популярных сценариев использования.

function check_age( $age ) { if ( $age < 18 ) { return new WP_Error( 'age_error', 'Возраст должен быть больше 18 лет' ); } return true; }

Использование:

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

Работа с REST API

WP_Error активно используется в WordPress REST API.

return new WP_Error( 'access_denied', 'Доступ запрещен', array( 'status' => 403 ) );

WordPress автоматически преобразует объект в JSON-ответ.

Использование в AJAX

При обработке AJAX-запросов можно возвращать ошибки клиенту.

if ( empty($_POST['email']) ) { wp_send_json_error( 'Email обязателен' ); }

Либо через объект WP_Error:

$error = new WP_Error( 'email_required', 'Введите email' );

Распространенные функции WordPress, возвращающие WP_Error

  • wp_insert_post()
  • wp_update_post()
  • wp_remote_get()
  • wp_remote_post()
  • media_handle_upload()
  • wp_create_user()
  • wp_insert_user()
  • term_exists()
  • wp_handle_upload()

При работе с этими функциями рекомендуется всегда выполнять проверку через is_wp_error().

Типичная ошибка начинающих разработчиков

$response = wp_remote_get( 'https://api.site.ru' ); echo $response['body'];

Если сервер недоступен, wp_remote_get() вернет WP_Error.

Правильный вариант:

$response = wp_remote_get( 'https://api.site.ru' ); if ( is_wp_error($response) ) { echo $response->get_error_message(); } else { echo wp_remote_retrieve_body( $response ); }

Лучшие практики работы с WP_Error

  • Всегда используйте is_wp_error().
  • Создавайте понятные коды ошибок.
  • Возвращайте дополнительные данные при необходимости.
  • Используйте WP_Error в собственных функциях.
  • Проверяйте результаты REST API и HTTP-запросов.
  • Логируйте критические ошибки.
  • Не выводите служебную информацию пользователям.

Класс WP_Error является основой системы обработки ошибок WordPress. Он позволяет безопасно передавать информацию о сбоях между функциями, упрощает отладку кода и помогает создавать надежные плагины и темы. Использование методов is_wp_error(), get_error_message() и get_error_data() считается обязательной практикой для любого разработчика WordPress, работающего с API ядра и пользовательскими функциями.

Метки: ,