Скрываем логин пользователя WordPress (Кастомные поля в профиле пользователя)

Сегодня Мы поговорим о том как можно скрыть логин пользователя от «не хороших ребят». Дело в том, что при определенных запросах к серверу с помощью перебора идентификатора пользователя, можно получить логин пользователя. Банальный пример: введите в адресной строке браузера Ваш домен и добавьте к нему ?author=3 (https://it-vab.ru/?author=1 — где 1 это идентификатор пользователя). И если у Вас включены ЧПУ и user_nicename не изменен, то Вы увидите в адресной строке Ваш логин. И это далеко не единственный вариант, как можно посмотреть логин пользователя.

Для того, чтобы изменить данные пользователя в вордпресс есть функция wp_update_user($userdata), где $userdata — массив данных, которые нужно обновить. В данном случае нам необходимо передать два параметра: идентификатор и новый nicename

Наименование(шапка спойлера)

wp_update_user(array('ID'=>$user_id,'user_nicename'=>$new,));

Используем как обычно для вывода поля два события: show_user_profile и edit_user_profile. А для обработки данных personal_options_update и edit_user_profile_update

Полный вариант кода

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;
  $userD=get_userdata($id);//объект
  echo'<br><div>'.esc_html__('Скрыть логин автора для защиты','VAB').'. '.esc_html__('Введите ник, который будет отображаться','VAB').'. '.esc_html__('К нему автоматически будет добавлен идентификатор пользователя, чтобы исключить совпадения с другими пользователями','VAB').'. '.esc_html__('Текущее значение','VAB').': '.$userD->user_nicename.'<br><br><input type="text" size="44" name="protectNick" id="protectNick" value=""></div>';
}}}
add_action('show_user_profile','VAB_user_fields');
add_action('edit_user_profile','VAB_user_fields');
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 поля
  $new=filter_input(INPUT_POST,'protectNick',FILTER_SANITIZE_STRING);
  if(!empty($new)){wp_update_user(array('ID'=>$user_id,'user_nicename'=>$new,));}else{return $user_id;}}}
add_action('personal_options_update','save_VAB_user_fields');
add_action('edit_user_profile_update','save_VAB_user_fields');

 

Можно выводить в текстовое поле текущее значение

echo'<input type="text" size="44" name="protectNick" id="protectNick" value="'.$userD->user_nicename.'">';

Ну, а чтобы значение постоянно не перезаписывалось или, если Мы захотим это значение миксовать, например так:

'user_nicename'=>$new.'_'.$user_id

...
if(!empty($new)){wp_update_user(array('ID'=>$user_id,'user_nicename'=>$new.'_'.$user_id,));}
...

 

Можно добавить в проверку текущее значение user_nicename

...

  $userD=get_userdata($user_id);
  if(!empty($new)&&$new!==$userD->user_nicename){
    wp_update_user(array('ID'=>$user_id,'user_nicename'=>$new.'_'.$user_id,));
  }else{
   return $user_id;
  }
...

А для чего миксовать? Дело в том, что конкретный пользователь может указать ник, например, hellow. Но не он единственный может указать подобный ник. И, если Мы хотим, чтобы user_nicename был уникален для каждого, то тут нам и понадобиться микс, например, с идентификатором пользователя.

Смотреть видео на ютуб канале «Скрываем логин пользователя WordPress (Кастомные поля в профиле пользователя)»


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