¿Es posible eliminar el campo de nombre de usuario de la página de registro? ¿Si es así, cómo?

14

¿Es posible eliminar el campo de nombre de usuario de la página de registro?

Quiero que los usuarios ingresen solo su correo electrónico y contraseña.
Se debe crear un nuevo usuario solo en base a estos dos parámetros.

¿Es eso posible y, de ser así, cómo?

    
pregunta phpnwordpress 16.05.2012 - 14:22

4 respuestas

11

Absolutamente YES , puedes lograr esto.

Regla 1: WordPress requiere un nombre de usuario. Debemos proporcionar un nombre de usuario.

Regla 2: No edite el código principal de WordPress.

Podemos lograr esto ocultando el campo de nombre de usuario, recibir correo electrónico y almacenarlo como nombre de usuario.

Paso 1: eliminar el campo de texto del nombre de usuario

add_action('login_head', function(){
?>
    <style>
        #registerform > p:first-child{
            display:none;
        }
    </style>

    <script type="text/javascript" src="<?php echo site_url('/wp-includes/js/jquery/jquery.js'); ?>"></script>
    <script type="text/javascript">
        jQuery(document).ready(function($){
            $('#registerform > p:first-child').css('display', 'none');
        });
    </script>
<?php
});

Paso 2: eliminar el error de nombre de usuario

//Remove error for username, only show error for email only.
add_filter('registration_errors', function($wp_error, $sanitized_user_login, $user_email){
    if(isset($wp_error->errors['empty_username'])){
        unset($wp_error->errors['empty_username']);
    }

    if(isset($wp_error->errors['username_exists'])){
        unset($wp_error->errors['username_exists']);
    }
    return $wp_error;
}, 10, 3);

Paso 3: Manipule la funcionalidad de registro en segundo plano.

add_action('login_form_register', function(){
    if(isset($_POST['user_login']) && isset($_POST['user_email']) && !empty($_POST['user_email'])){
        $_POST['user_login'] = $_POST['user_email'];
    }
});

Coloque el código anterior en el archivo functions.php de su tema.

También puedes descargar un complemento completo para lograr esto.

Plugin: enlace

    
respondido por el Nishant Kumar 03.08.2014 - 06:59
4

El paso 3 en la publicación de Nishant Kumars verifica si isset($_POST['user_login']) no funcionó para mí, ya que el inicio de sesión es lo que realmente queremos eliminar.

Mi solución es la siguiente (en las funciones del tema.php), también como una función separada, para mantener el estilo del código de wordpress:

function copy_username_to_email (){
    if(isset($_POST['user_email']) && !empty($_POST['user_email'])){
        $_POST['user_login'] = $_POST['user_email'];
    }
}
add_action('login_form_register', 'copy_username_to_email');
    
respondido por el mcnesium 28.01.2015 - 17:58
4

@Nishant Kumar dio la respuesta perfecta y debió ser aceptada a esta pregunta. Sin embargo, hay una falla después de la versión de Wordpress 4.0 lanzada. De codex -

  

Nota: desde 4.0, estas propiedades son privadas, consulte [28511] .

El filtro registration_errors requiere una pequeña modificación.

//Remove error for username, only show error for email only.

add_filter('registration_errors', 'remove_username_empty_error', 10, 3);

function remove_username_empty_error($wp_error, $sanitized_user_login, $user_email){

    if(isset($wp_error->errors['empty_username'])){
        $wp_error->remove('empty_username');
    }    
    if(isset($wp_error->errors['username_exists'])){
        $wp_error->remove('username_exists');
    }
    return $wp_error;
}

Nota: Como se mencionó en @mcnesium, si eliminamos completamente el campo de nombre de usuario (en mi caso, utilicé el tema Mi complemento de inicio de sesión para anular el formulario de registro normal y allí simplemente eliminé el campo de nombre de usuario ) entonces $_POST['user_login'] será null y la condición no coincidirá en absoluto. Será mejor que eliminemos eso de la condición como sugiere @mcnesium.

    
respondido por el maksbd19 17.04.2015 - 19:41
1

Creo que cualquier solución para esta solicitud va a ser un 'hack' ya que wordpress requiere que haya un nombre de usuario para todos los usuarios registrados. Incluso el complemento mencionado anteriormente es muy probable que solo encuentre el nombre de usuario a través de la dirección de correo electrónico y luego use ese nombre de usuario para iniciar sesión en el sitio.

Si estás de acuerdo con un hack, aquí hay un concepto que podría funcionar:

1) Rellene previamente el campo de nombre de usuario en su formulario de registro con un número único, usar la marca de tiempo actual es una buena idea para evitar obtener duplicados. Luego, ocultará este campo para que el usuario no lo vea en la pantalla cuando complete su formulario.

Si está usando jQuery, podría usar algo como:

$(document).ready(function() {
    var timestamp = (new Date).getTime();
    $('form input.username').val(timestamp);
    $('form input.username').css('display', 'none');
});

En este ejemplo, 'form input.username' sería el selector jQuery para encontrar el campo de nombre de usuario, deberá verificar la estructura html en su página para asegurarse de que el selector coincida con la estructura.

2) Use un complemento como el que se mencionó anteriormente ( enlace ) para permitir a los usuarios iniciar sesión con su dirección de correo electrónico.

    
respondido por el Matt Keys 12.06.2013 - 05:57

Lea otras preguntas en las etiquetas