É possível remover o campo username da página de registro? Se sim, como?

14

É possível remover o campo de nome de usuário da página de registro?

Eu quero que os usuários digitem apenas seus e-mails e senhas.
Um novo usuário deve ser criado com base apenas nesses dois parâmetros.

Isso é possível e, em caso afirmativo, como?

    
por phpnwordpress 16.05.2012 / 14:22

4 respostas

11

Absolutamente SIM , você pode conseguir isso.

Regra 1: o WordPress requer um nome de usuário. Precisamos fornecer um nome de usuário.

Regra 2: Não edite o código principal do WordPress.

Podemos conseguir isso ocultando o campo nome de usuário, receber e-mail e armazená-lo como nome de usuário.

Etapa 1: Remover o campo de texto Nome de usuário

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

Etapa 2: remover o erro de nome de usuário

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

Etapa 3: Manipular a funcionalidade de registro em 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 o código acima no arquivo functions.php do seu tema.

Você também pode fazer o download de um plug-in completo para conseguir isso.

Plugin: enlace

    
por Nishant Kumar 03.08.2014 / 06:59
4

O passo 3 na postagem de Nishant Kumars postará se isset($_POST['user_login']) não funcionou para mim, já que o login é o que realmente queremos remover.

Minha solução é a seguinte (no functions.php do tema), também como uma função separada, para ficar com o estilo de código 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');
    
por mcnesium 28.01.2015 / 17:58
4

@Nishant Kumar deu a resposta perfeita e deve ser aceita para essa pergunta. No entanto, há uma falha após a versão do Wordpress 4.0 liberada. De códice -

  

Observação: desde a versão 4.0, essas propriedades são particulares, consulte [28511] .

registration_errors filter aqui requer uma pequena modificação.

//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 mencionado por @mcnesium, se nos livramos completamente do campo username (no meu caso eu usei o Theme my login plugin para sobrescrever o formulário de registro regular e lá acabei de remover o campo username ) então $_POST['user_login'] será null e a condição não corresponderá a todos. É melhor removermos isso da condição como @mcnesium sugeriu.

    
por maksbd19 17.04.2015 / 19:41
1

Acho que qualquer solução para este pedido será um 'hack', já que o wordpress exige que haja um nome de usuário para todos os usuários registrados. Até mesmo o plugin mencionado acima provavelmente encontra o nome de usuário por meio do endereço de e-mail e, em seguida, usa esse nome de usuário para acessar o site.

Se você está bem com um hack, aqui está um conceito que poderia funcionar:

1) Preencher previamente o campo de nome de usuário em seu formulário de registro com um número exclusivo, usando o carimbo de data / hora atual é uma boa ideia para evitar a obtenção de duplicatas. Você ocultaria esse campo para que o usuário não o visse na tela ao preencher o formulário.

Se você estiver usando o jQuery, poderá usar algo como:

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

Neste exemplo, 'form input.username' seria o seletor do jQuery para encontrar o campo username, você precisará verificar a estrutura html na sua página para ter certeza de que o seletor combina com a estrutura.

2) Use um plugin como o mencionado anteriormente ( enlace ) para permitir que os usuários façam login com seu endereço de e-mail.

    
por Matt Keys 12.06.2013 / 05:57