Est-il possible de supprimer le champ nom d'utilisateur de la page d'inscription? Si c'est le cas, comment?

14

Est-il possible de supprimer le champ du nom d'utilisateur de la page d'inscription?

Je souhaite que les utilisateurs entrent uniquement leur adresse électronique et leur mot de passe.
Un nouvel utilisateur doit être créé en fonction de ces deux paramètres uniquement.

Est-ce possible et si oui, comment?

    
posée phpnwordpress 16.05.2012 - 14:22

4 réponses

11

Absolument OUI , vous pouvez y parvenir.

Règle 1: WordPress requiert un nom d'utilisateur. Nous devons fournir un nom d'utilisateur.

Règle 2: ne modifiez pas le code principal de WordPress.

Nous pouvons y parvenir en masquant le champ Nom d'utilisateur, en obtenant un courrier électronique et en le stockant sous le nom d'utilisateur

Étape 1: suppression du champ Nom d'utilisateur textfield

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
});

Étape 2: suppression de l'erreur de nom d'utilisateur

//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);

Étape 3: manipulez la fonctionnalité d'enregistrement en arrière-plan.

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'];
    }
});

Placez le code ci-dessus dans le fichier functions.php de votre thème.

Vous pouvez également télécharger un plugin complet pour y parvenir.

Plugin: enlace

    
réponse donnée Nishant Kumar 03.08.2014 - 06:59
4

L’étape 3 du message de Nishant Kumars vérifie si isset($_POST['user_login']) n’a pas fonctionné pour moi, car le nom de connexion correspond à ce que nous voulons réellement supprimer.

Ma solution est la suivante (dans le fichier functions.php du thème), également en tant que fonction distincte, pour rester dans le style de code 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');
    
réponse donnée mcnesium 28.01.2015 - 17:58
4

@Nishant Kumar a donné la réponse parfaite à cette question, qui devrait être acceptée. Cependant, il y a un problème après la version Wordpress 4.0. De codex -

  

Remarque: depuis la version 4.0, ces propriétés sont privées, voir [28511] .

Le filtre registration_errors nécessite une petite modification.

//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;
}

Remarque: Comme l'a mentionné @mcnesium, si nous nous débarrassons complètement du champ du nom d'utilisateur (dans mon cas, j'ai utilisé Thème mon plugin de connexion pour remplacer le formulaire d'inscription habituel et j'ai simplement supprimé le champ du nom d'utilisateur. ) alors $_POST['user_login'] sera null et la condition ne correspondra pas du tout. Nous ferions mieux de supprimer cela de la situation suggérée par @mcnesium.

    
réponse donnée maksbd19 17.04.2015 - 19:41
1

Je pense que toute solution à cette demande sera un "hack", car wordpress requiert un nom d'utilisateur pour tous les utilisateurs enregistrés. Même le plugin mentionné ci-dessus se contente probablement de trouver le nom d'utilisateur via l'adresse e-mail, puis d'utiliser ce nom d'utilisateur pour se connecter au site.

Si vous êtes d'accord avec un hack, voici un concept qui pourrait fonctionner:

1) Pré-remplissez le champ du nom d'utilisateur dans votre formulaire d'inscription avec un numéro unique. L'utilisation de l'horodatage actuel est une bonne idée pour éviter de recevoir des doublons. Vous devez ensuite masquer ce champ afin que l'utilisateur ne le voie pas à l'écran lorsqu'il remplit son formulaire.

Si vous utilisez jQuery, vous pouvez utiliser quelque chose comme:

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

Dans cet exemple, 'form input.username' serait le sélecteur jQuery pour trouver le champ du nom d'utilisateur. Vous devrez vérifier la structure html de votre page pour vous assurer que le sélecteur correspond à la structure.

2) Utilisez un plugin similaire à celui mentionné précédemment ( enlace ) pour permettre aux utilisateurs de se connecter. avec leur adresse e-mail.

    
réponse donnée Matt Keys 12.06.2013 - 05:57

Lire d'autres questions sur les étiquettes