Как должна работать wp_admin_notice?

Вопрос или проблема

У меня есть функция, связанная с двумя хуками:

// это действие срабатывает только если текущий пользователь редактирует свой профиль
add_action('personal_options_update', 'yop_save_custom_user_profile_fields');

// этот хук обычно используется для сохранения пользовательских полей, которые были добавлены на страницу профиля WordPress
add_action('edit_user_profile_update', 'yop_save_custom_user_profile_fields');

В теле функции я обращаюсь к двум переменным поста:

$f1 = sanitize_text_field($_POST['readers']);
$f2 = sanitize_text_field($_POST['reader_levels']);

По сути, в $f1 и $f2 находятся две строки, например:

(readers) Mark-Susan-Polly
(readers_levels) 1-3-5

После разбиения они создают 2 массива с тремя элементами.

Чтобы правильно сохранить данные, два массива должны содержать одинаковое количество элементов (одинаковую длину).

Таким образом, в функции у меня есть:

 if(count($readers) != count($readers_levels)){
            
            wp_admin_notice("ERROR", array('type'=>'error', 'dismissible' => true) );
          
            return;
        }

Часть с возвратом, похоже, работает (ничего не сохраняется в случае ошибки), но я не вижу уведомления.

Как должен работать wp_admin_notice?

Ответ или решение

Функция wp_admin_notice не существует в стандартном наборе функций WordPress. Вероятно, вы имели в виду функцию для вывода уведомлений в административной панели WordPress, но для этого используется другой механизм. Рассмотрим, как правильно реализовать уведомления о состоянии в административной панели и какие методы следует использовать для этого.

Как работают уведомления в административной панели WordPress?

В WordPress для вывода уведомлений используется функция add_settings_error, которая в свою очередь интегрирована с функцией settings_errors. Уведомления могут быть разного типа: ошибки, предупреждения, успешные сообщения и заметки. При этом, уведомления могут быть как отобразимыми (dismissible), так и недоступными для закрытия пользователем.

Проблема в вашем коде

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

Правильная реализация

Вот как можно переписать вашу логику для отображения уведомления об ошибке:

  1. Сначала необходимо инициировать уведомление в момент, когда обнаруживается ошибка с массивами.

  2. После этого нужно добавить уведомление в массив ошибок с помощью add_settings_error.

  3. Важно вывести эти ошибки в нужном месте (обычно это в функции show_admin_notices).

Пример кода

function yop_save_custom_user_profile_fields($user_id) {
    $f1 = sanitize_text_field($_POST['readers']);
    $f2 = sanitize_text_field($_POST['reader_levels']);

    $readers = explode('-', $f1);
    $readers_levels = explode('-', $f2);

    if (count($readers) != count($readers_levels)) {
        add_settings_error('custom_user_profile_fields', 'error_count', 'Ошибка: количество читателей должно совпадать с количеством уровней читателей.', 'error');
        return;
    }

    // Логика сохранения данных ...
}

// Подписка на хук отображения уведомлений
add_action('admin_notices', 'show_admin_notices');

function show_admin_notices() {
    settings_errors('custom_user_profile_fields');
}

Подробное разъяснение

  • add_settings_error(): Позволяет добавить сообщение, которое будет отображено на административной странице. Первым аргументом передается идентификатор, вторым — код ошибки (например, ‘error_count’), третьим — само сообщение, а четвертым — тип уведомления.

  • settings_errors(): Эта функция выводит сообщения, добавленные ранее с помощью add_settings_error(). Вы должны вызывать ее в соответствующем месте вашего кода, например, в хук admin_notices.

  • Пользовательские уведомления: С помощью параметра ‘dismissible’ вы можете указать, может ли пользователи закрывать уведомление. Для этого достаточно использовать класс ‘notice is-dismissible’ в CSS.

Заключение

Таким образом, чтобы эффективно работать с уведомлениями в WordPress, необходимо использовать правильные функции и подходы, обеспечивающие корректное взаимодействие с системой уведомлений. С применением приведенной выше схемы, ваши уведомления об ошибках будут корректно отображаться в административной панели.

Оцените материал
Добавить комментарий

Капча загружается...