Вопрос или проблема
У меня есть функция, связанная с двумя хуками:
// это действие срабатывает только если текущий пользователь редактирует свой профиль
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. Для того чтобы показывать уведомления об ошибках, следует применить правильные функции, которые обеспечивают нужный функционал.
Правильная реализация
Вот как можно переписать вашу логику для отображения уведомления об ошибке:
-
Сначала необходимо инициировать уведомление в момент, когда обнаруживается ошибка с массивами.
-
После этого нужно добавить уведомление в массив ошибок с помощью
add_settings_error
. -
Важно вывести эти ошибки в нужном месте (обычно это в функции
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, необходимо использовать правильные функции и подходы, обеспечивающие корректное взаимодействие с системой уведомлений. С применением приведенной выше схемы, ваши уведомления об ошибках будут корректно отображаться в административной панели.