06.04.2026

Как сделать активным и редактировать поле Имя пользователя в WordPress

в файл 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' );






guest
Другие сообщения форума
Закрыть меню