Класс 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 ядра и пользовательскими функциями.


