в файл functions добавялем
/** * 1. Снимает readonly и удаляет подсказку у стандартного поля логина */ function unlock_standard_username_field() { global $pagenow; if ( ! in_array( $pagenow, array( 'profile.php', 'user-edit.php' ) ) ) { return; } ?> <script type="text/javascript"> document.addEventListener('DOMContentLoaded', function() { var loginInput = document.getElementById('user_login'); if (loginInput) { // Разблокируем поле loginInput.removeAttribute('readonly'); loginInput.style.background = '#fff'; // Визуально делаем активным // Удаляем сообщение "Имя пользователя изменить нельзя." var descSpan = loginInput.nextElementSibling; if (descSpan && descSpan.classList.contains('description')) { descSpan.remove(); } } }); </script> <?php } add_action( 'admin_footer', 'unlock_standard_username_field' ); /** * 2. Сохраняет изменённый логин */ function save_standard_username_field( $user_id ) { if ( ! current_user_can( 'edit_user', $user_id ) ) { return; } // Если поле пустое или не отправлено if ( empty( $_POST['user_login'] ) ) { return; } $new_login = sanitize_user( $_POST['user_login'] ); $old_login = get_userdata( $user_id )->user_login; // Логин не менялся if ( $new_login === $old_login ) { return; } // Проверка на занятость другим пользователем if ( username_exists( $new_login ) ) { add_action( 'admin_notices', function() { echo '<div class="notice notice-error"><p>Ошибка: такой логин уже используется.</p></div>'; }); return; } // Прямое обновление в таблице wp_users global $wpdb; $updated = $wpdb->update( $wpdb->users, array( 'user_login' => $new_login ), array( 'ID' => $user_id ), array( '%s' ), array( '%d' ) ); if ( $updated !== false ) { clean_user_cache( $user_id ); // Если пользователь меняет свой логин → разлогиниваем if ( get_current_user_id() == $user_id ) { wp_logout(); wp_safe_redirect( wp_login_url() . '?loggedout=true&username_changed=1' ); exit; } } } add_action( 'personal_options_update', 'save_standard_username_field' ); add_action( 'edit_user_profile_update', 'save_standard_username_field' );