Вывод заметок (сообщений, ошибок) в верхней части страницы админ-панели 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;}}//выводим на экран содержимое временной опции

Смотреть видео на ютуб канале «Вывод заметок (сообщений, ошибок) в верхней части страницы админ-панели WordPress»

Кастомные поля