В процессе разработки плагинов или тем для WordPress часто возникает необходимость выводить пользовательские сообщения (уведомления, предупреждения, ошибки) в административной панели. Это помогает информировать администратора сайта о результатах операций, ошибках или важных событиях. В этой статье я подробно расскажу, как правильно и удобно отображать такие сообщения, используя стандартные хуки и функции WordPress.
Зачем нужны пользовательские сообщения в админке WordPress
Административная панель WordPress — это место, где администраторы и редакторы управляют сайтом. Если ваш плагин или тема выполняет какие-то операции, например, импорт данных, обновление настроек или проверку условий, важно сообщить пользователю результат работы. Без таких уведомлений пользователь может не понять, что произошло, или не заметить критическую ошибку.
Пользовательские сообщения помогают повысить удобство взаимодействия с сайтом и делают работу более прозрачной и информативной.
WordPress из коробки предоставляет удобный механизм для вывода таких сообщений — admin_notices и all_admin_notices. Используя эти хуки, вы можете выводить сообщения в верхней части любых страниц админки.
Основные типы сообщений и их стилизация
Сообщения в админке WordPress обычно бывают следующих типов:
- success — успешное выполнение операции (зеленый фон);
- error — ошибка или критическая проблема (красный фон);
- warning — предупреждение или важное уведомление (желтый фон);
- info — информационное сообщение (синий фон).
Для указания типа используется CSS класс notice-success, notice-error, notice-warning, notice-info внутри блока с классом notice.
Пример функции для вывода пользовательского сообщения
Создадим простую функцию wptavern_admin_notice, которая будет принимать текст сообщения и тип, и выводить уведомление в админке.
function wptavern_admin_notice($message, $type = 'success') {
add_action('admin_notices', function() use ($message, $type) {
$class = 'notice notice-' . esc_attr($type) . ' is-dismissible';
printf('<div class="%1$s"><p>%2$s</p></div>', $class, esc_html($message));
});
}
Эта функция использует анонимную функцию, чтобы передать сообщение и тип в хук admin_notices. Класс is-dismissible добавляет возможность закрывать уведомление.
Пример использования функции
Допустим, в вашем плагине после сохранения настроек вы хотите показать сообщение об успешном сохранении:
if (isset($_POST['wptavern_save_settings'])) {
// Логика сохранения настроек
// ...
wptavern_admin_notice('Настройки успешно сохранены', 'success');
}
Если произошла ошибка, можно вызвать с типом error:
wptavern_admin_notice('Ошибка: не удалось сохранить данные', 'error');
Как сделать сообщения постоянными — через сессии и опции
Иногда сообщения нужно выводить не сразу, а после редиректа, например, после обработки формы. Для этого можно использовать transient или опции для хранения сообщения, а затем вывести его один раз.
Пример с использованием опции:
function wptavern_set_admin_message($message, $type = 'success') {
update_option('wptavern_admin_message', ['message' => $message, 'type' => $type]);
}
function wptavern_show_admin_message() {
$msg = get_option('wptavern_admin_message');
if ($msg) {
wptavern_admin_notice($msg['message'], $msg['type']);
delete_option('wptavern_admin_message');
}
}
add_action('admin_notices', 'wptavern_show_admin_message');
Теперь можно после обработки формы вызвать wptavern_set_admin_message('Данные сохранены', 'success'); и сделать редирект. Сообщение отобразится на следующей странице в админке.
Использование готовых плагинов для уведомлений
Если не хотите писать код самостоятельно, есть несколько полезных плагинов для уведомлений:
- Admin Notices Manager — управление всеми уведомлениями в админке, включая скрытие и приоритеты.
- WP Notify — расширенные уведомления и логирование событий.
При этом для кастомных решений лучше использовать свой код — он легче и быстрее, не нагружает сайт.
Вывод сообщений в определённых разделах админки
Иногда нужно показывать сообщения только на определённых страницах настроек или CPT. Для этого используйте проверку текущей страницы с помощью get_current_screen():
function wptavern_conditional_admin_notice() {
$screen = get_current_screen();
if ($screen->id === 'settings_page_myplugin') {
wptavern_admin_notice('Это сообщение только на странице настроек моего плагина', 'info');
}
}
add_action('admin_notices', 'wptavern_conditional_admin_notice');
Так вы не будете засорять другие разделы админки ненужными уведомлениями.
Заключение
Отображение пользовательских сообщений в админке — важный элемент UX при разработке под WordPress. Используйте стандартные хуки admin_notices, стилизуйте сообщения с помощью классов notice-*, и храните сообщения в опциях или transient для вывода после редиректа. Это позволит сделать вашу админку более удобной и понятной для пользователя.
Подробнее о плагинах и инструментах для WordPress можно посмотреть на WPSHOP.RU.