É possível remover o campo de nome de usuário da página de registro?
Quero que os usuários insiram apenas seus e-mails e senhas.
Um novo usuário deve ser criado com base apenas nesses dois parâmetros.
Isso é possível e, se sim, como?
É possível remover o campo de nome de usuário da página de registro?
Quero que os usuários insiram apenas seus e-mails e senhas.
Um novo usuário deve ser criado com base apenas nesses dois parâmetros.
Isso é possível e, se sim, como?
Respostas:
Absolutamente SIM , você pode conseguir isso.
Regra 1: WordPress requer um nome de usuário. Devemos fornecer um nome de usuário.
Regra 2: não edite o código principal do WordPress.
Podemos conseguir isso ocultando o campo de nome de usuário, recebendo e-mail e armazenando-o 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 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 baixar um plugin completo para conseguir isso.
A etapa 3 da postagem de Nishant Kumars verifica se o isset($_POST['user_login'])
que não funcionou para mim, pois 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');
@
e .
no endereço de e-mail como nome de usuário:$_POST['user_login'] = str_replace(array('@', '.'), '_', $_POST['user_email']);
@Nishant Kumar deu a resposta perfeita e deveria ser aceita para esta pergunta. No entanto, há uma falha após a versão do Wordpress 4.0 lançada. Do codex -
Nota: Desde a 4.0, essas propriedades são privadas, consulte [28511] .
registration_errors
O filtro 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 o @mcnesium mencionou, se nos livrarmos completamente do campo de nome de usuário (no meu caso, usei Theme meu plugin de login para substituir o formulário de registro regular e acabei de remover o campo de nome de usuário), $_POST['user_login']
será null
e a condição não corresponderá em absoluto. É melhor remover isso da condição, como @mcnesium sugerido.
Iterando na resposta de @ nishant-kumar, aqui está um JS vanilla, sem script js extra, 1 etapa, sem necessidade de edição de back-end, solução para criar um formulário de inscrição apenas com a entrada de email:
/** Hook your code to the login / Sign up page **/
add_action('login_head', function(){
/* Style to hide the user_name field group */
?>
<style>
#registerform > p:first-child{
display:none;
}
</style>
<script type="text/javascript">
/* Execute this action when the DOM is ready AND after everything in the page is loaded */
let user_email;
window.addEventListener('load',function() {
user_email = document.querySelector('[name="user_email"]');
if(user_email) { // Execute only if there is a user_email field on page
user_email.addEventListener('keyup',syncUserName);
user_email.addEventListener('change',syncUserName);
}
});
/* sync user_email's value with the hidden user_login field */
function syncUserName() {
document.querySelector('[name="user_login"]').value = user_email.value;
}
</script>
<?php
});
Você só precisa adicionar esse código no seu arquivo functions.php (ou no seu plugin personalizado , se você tiver um)
user_email is not defined at HTMLInputElement.syncUserName
. Mover a parte "function syncUserName" para dentro da função superior remove o erro e o trecho de código funciona muito. Basta comentar para que outras pessoas possam encontrar o mesmo problema. Obrigado Gfra54.
user_email
var no mesmo escopo. Obrigado.
Eu acho que qualquer solução para essa solicitação será um 'hack', pois o wordpress exige que haja um nome de usuário para todos os usuários registrados. Mesmo o plug-in mencionado acima provavelmente está apenas encontrando o nome de usuário por meio do endereço de e-mail e depois usando esse nome de usuário para fazer login no site.
Se você concorda com um hack, aqui está um conceito que pode funcionar:
1) Preencher previamente o campo de nome de usuário no seu formulário de registro com um número único, usando o carimbo de data / hora atual é uma boa idéia para evitar a duplicação de cópias. Você ocultaria esse campo para que o usuário não o veja na tela ao preencher seu formulário.
Se você estiver usando 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 jQuery para encontrar o campo de nome de usuário. Você precisará verificar a estrutura html na sua página para garantir que o seletor corresponda à estrutura.
2) Use um plug-in como o mencionado anteriormente ( http://wordpress.org/extend/plugins/wp-email-login/ ) para permitir que os usuários façam login com seu endereço de email.