Вывод заметок (сообщений, ошибок) в верхней части страницы админ-панели WordPress
Для вывода заметок (сообщений, ошибок) в верхней части страницы админ-панели WordPress Мы будем использовать admin_notices. При выводе сообщений могут понадобиться css классы (Обязательный класс notice и к нему добавляем, в зависимости от нужд):
- notice — сообщение с серой полоской слева
- notice-error, либо error без класса notice — для ошибок с красной полоской слева
- notice-warning — для предупреждений с оранжевой полоской слева
- notice-success, либо updated без класса notice — для успешных операций с зеленой полоской слева
- update-nag — не подходит для обычных уведомлений администратора, так как к сообщению будет применяться другой стиль макета.Кроме того, это приведет к тому, что сообщение будет перемещено над заголовком страницы (<h1>), тем самым семантически установив его приоритет над другими уведомлениями, что вряд ли будет уместно в контексте плагина или темы.
- notice-info — информационная синяя полоска слева
- is-dismissible — чтобы добавить закрывающий значок к вашему сообщению через JavaScript. Однако его поведение применимо только к текущему экрану. Это не предотвратит повторное появление сообщения после повторной загрузки страницы или загрузки другой страницы.
Кроме привычных уже событий — для вывода поля два события: show_user_profile и edit_user_profile, а для обработки данных personal_options_update и edit_user_profile_update, нам понадобятся ещё два события.
- load-user-edit.php — будет выводить сообщения на странице user-edit.php, при редактировании администратором страницы юзера
- load-profile.php — будет выводить сообщения на странице profile.php, когда пользователь редактирует свой профиль
В качестве примера будем выводить поле для ввода номера телефона
if(!function_exists('VAB_user_fields')){
function VAB_user_fields($user){
global $pagenow;
if($pagenow=='profile.php'||$pagenow=='user-edit.php'){
wp_nonce_field('VAB_mode_ufields_nonce','VAB_ufields_nonce');
$id=$user->ID;
$myTel=get_the_author_meta('myTel',$id);//получаем мета данные с ключом myTel для текущего пользователя
echo'<input name="myTel" id="myTel" type="tel" value="'.$myTel.'">';
}}}
add_action('show_user_profile','VAB_user_fields');
add_action('edit_user_profile','VAB_user_fields');
Можно, при желании, добавить placeholder или pattern для отображения требуемой маки.
Далее будем обрабатывать введенные данные
if(!function_exists('save_VAB_user_fields')){
function save_VAB_user_fields($user_id){
$nonce=filter_input(INPUT_POST,'VAB_ufields_nonce',FILTER_SANITIZE_STRING);
if(!$nonce){return;}//проверяем наши nonce поля
if(!wp_verify_nonce($nonce,'VAB_mode_ufields_nonce')){return;}//проверяем наши nonce поля
$myTel=get_the_author_meta('myTel',$user_id);
$newmyTel=$_POST['myTel'];//проверяем отправку пост данных
if(!empty($newmyTel)){//если данные отправлены
if(!preg_match("/^\+(79)[\d]{9}$/m",$newmyTel)){//если проверку не проходим
$erR='<div class="notice notice-info"><p><strong>'.__('Ошибка','VAB').'</strong>: '.__('Поле','VAB').' «'.__('Мой мобильный','VAB').'» '.__('не обновлено','VAB').' - '.__('Телефон задан в неверном формате','VAB').'</p></div>';//формируем сообщение
set_transient('erRorPhone',array('nonce'=>$erR),10);//создаем временную опцию в базе и сохраняем в ней сообщение на 10 секунд
}else{update_user_meta($user_id,'myTel',$newmyTel);}//иначе прошла проверка - обновляем данные
}else{delete_user_meta($user_id,'myTel');}//иначе поле пустое. будем удалять мета данные
}}
add_action('personal_options_update','save_VAB_user_fields');
add_action('edit_user_profile_update','save_VAB_user_fields');
Ну и собственно вывод сообщения
Развернуть спойлер
if(!function_exists('VAB_add_error')){
function VAB_add_error(){
$data=get_transient('erRorPhone');//проверяем в базе наличие временной опции
if($data&&$data['nonce']){//проверяем ее содержимое
add_action('admin_notices','VAB_show_error');}}}//запускаем событие admin_notices
add_action('load-user-edit.php','VAB_add_error');
add_action('load-profile.php','VAB_add_error');
if(!function_exists('VAB_show_error')){
function VAB_show_error(){
$data=get_transient('erRorPhone');$erRorMessage='';
if($data&&$data['nonce']){$erRorMessage=$data['nonce'];}
echo$erRorMessage;}}//выводим на экран содержимое временной опции
Смотреть видео на rutube канале «Вывод заметок (сообщений, ошибок) в верхней части страницы админ-панели WordPress»
Смотреть видео на ютуб канале «Вывод заметок (сообщений, ошибок) в верхней части страницы админ-панели WordPress»
Кастомные поля