Хук admin_notices
в WordPress позволяет разработчикам отображать уведомления в верхней части страниц панели администратора. Эти сообщения используются для оповещения администраторов об успехах, ошибках, предупреждениях или других информационных событиях.
do_action( ‘admin_notices’ )
Основные сведения о admin_notices
Хук admin_notices
активируется WordPress перед выводом основного контента страницы администратора, что позволяет добавлять кастомные сообщения в HTML, чтобы они были видны сразу после загрузки страницы.
Каждое сообщение выводится в виде блока <div>
, имеющего CSS-класс notice
, с дополнительными классами для указания типа сообщения:
- notice-success — для успешных операций, сопровождается зелёной полоской.
- notice-error — для ошибок, сопровождается красной полоской.
- notice-warning — для предупреждений, с оранжевой полоской.
- notice-info — для информационных сообщений, с синей полоской.
Чтобы добавить кнопку закрытия, используйте класс is-dismissible. Однако учтите, что он работает только на текущей странице и не предотвращает повторное появление сообщения при обновлении.
Пример 1: Вывод успешного уведомления
В этом примере создается уведомление об успешной операции с использованием класса notice-success
и функции локализации _e
для возможности перевода сообщения:
add_action( 'admin_notices', 'my_plugin_success_notice' );
function my_plugin_success_notice() {
?>
<div class="notice notice-success is-dismissible">
<p><?php _e( 'Настройки успешно обновлены!', 'my-text-domain' ); ?></p>
</div>
<?php
}
Пример 2: Отображение сообщения об ошибке
Этот код создает уведомление об ошибке с использованием класса notice-error
. Оно будет отображаться с красной полосой слева, сигнализируя о возникновении проблемы.
add_action( 'admin_notices', 'my_plugin_error_notice' );
function my_plugin_error_notice() {
$message = __( 'Ошибка при сохранении данных.', 'my-text-domain' );
echo '<div class="notice notice-error is-dismissible"><p>' . esc_html( $message ) . '</p></div>';
}
Пример 3: Динамическое предупреждающее сообщение
Этот пример демонстрирует, как создать класс для вывода предупреждений с использованием динамического контента. Сообщение будет передаваться в конструктор класса и выводиться при инициализации класса.
class Warning_Notice {
private $message;
public function __construct( $message ) {
$this->message = $message;
add_action( 'admin_notices', array( $this, 'display_notice' ) );
}
public function display_notice() {
echo '<div class="notice notice-warning is-dismissible"><p>' . esc_html( $this->message ) . '</p></div>';
}
}
// Инициализация с сообщением
new Warning_Notice( __( 'Внимание: проверьте настройки.', 'my-text-domain' ) );
Пример 4: Информационное сообщение для определённой страницы
В данном примере сообщение отображается только на странице настроек плагина, проверяя ID экрана с помощью get_current_screen()
:
add_action( 'admin_notices', 'my_plugin_settings_notice' );
function my_plugin_settings_notice() {
$screen = get_current_screen();
if ( 'settings_page_my_plugin' === $screen->id ) {
echo '<div class="notice notice-info is-dismissible"><p>' . __( 'Не забудьте сохранить настройки!', 'my-text-domain' ) . '</p></div>';
}
}
Пример 5: Использование нового функционала WordPress 6.4 для уведомлений
В WordPress 6.4 добавлены функции wp_admin_notice()
и wp_get_admin_notice()
для работы с админ-уведомлениями. Они позволяют выводить сообщения удобным способом, задавая тип уведомления через массив аргументов:
if ( $error_occurred ) {
wp_admin_notice( 'Произошла ошибка при загрузке данных.', array( 'type' => 'error' ) );
}
Советы и рекомендации
- Не используйте класс
update-nag
для сообщений, так как он перемещает уведомление над заголовком страницы и меняет стиль. Этот класс рекомендуется только для системных сообщений. - Для мультисайтовых сборок используйте альтернативные хуки:
network_admin_notices
для вывода сообщений в сети сайтов.user_admin_notices
для вывода сообщений на уровне отдельных сайтов сети.
Заключение
Хук admin_notices
предоставляет гибкость для отображения различных уведомлений в панели администратора WordPress, что помогает улучшить взаимодействие с пользователем и облегчить управление плагинами и темами.