username_exists () não pode ser acessada sem efetuar login

5

Estou usando a seguinte função em functions.php para verificar se existe um nome de usuário no banco de dados

function check_username() {
   $username = $_POST['user'];
   if ( username_exists( $username ) ) {
       $return['user_exists'] = true; 
   }
   else {
       $return['user_exists'] = false;
   }
   echo json_encode($return);
   die();
}
add_action('wp_ajax_check_username', 'check_username');

O problema é que a função username_exists() parece funcionar apenas se um usuário já estiver logado e verificar um nome de usuário. Tentei procurar um nome de usuário existente sem fazer login e ele apenas retorna undefined para mim.

Não sei por que isso está acontecendo e não consigo encontrar nenhuma documentação sobre esse problema.

Minha pergunta é: como habilitar um usuário para verificar se um usuário existe sem ter que fazer o login?

Obrigado

    
por user2028856 02.08.2014 / 08:18

2 respostas

6

Ao usar a API Ajax e você deseja disponibilizar o retorno de chamada do ajax para usuários não registrados, é necessário adicionar duas ações, "wp_ajax_{$action}" e "wp_ajax_nopriv_{$action}" .

Usando apenas a primeira ação, o retorno de chamada será chamado apenas para usuários registrados, usando apenas o segundo que será chamado apenas para visitantes não registrados.

Tente isto:

function check_username() {
   $uname = filter_input( INPUT_POST, 'user', FILTER_SANITIZE_STRING );
   wp_send_json( array(
     'user_exists' => get_user_by( 'login', $uname ) ? 'true' : 'false'
   ) );
}


add_action('wp_ajax_check_username', 'check_username');
add_action('wp_ajax_nopriv_check_username', 'check_username');
    
por gmazzap 02.08.2014 / 11:11
0

Você precisa incluir o arquivo wp-includes / user.php quando estiver usando o ajax para funções relacionadas ao usuário.

 function check_username() {

   require_once (ABSPATH.'/wp-includes/user.php');
   $username = $_POST['user'];
   if ( username_exists( $username ) ) {
       $return['user_exists'] = true; 
   }
   else {
       $return['user_exists'] = false;
   }
   echo json_encode($return);
   die();
}
add_action('wp_ajax_check_username', 'check_username');
    
por Rajeev Vyas 02.08.2014 / 09:10