Скрываем логин пользователя 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.'">';
Ну, а чтобы значение постоянно не перезаписывалось или, если Мы захотим это значение миксовать, например так:
... if(!empty($new)){wp_update_user(array('ID'=>$user_id,'user_nicename'=>$new.'_'.$user_id,));} ...
... $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 был уникален для каждого, то тут нам и понадобиться микс, например, с идентификатором пользователя.