web-dev-qa-db-fra.com

la fonction username_exists () ne peut pas être utilisée sans se connecter

J'utilise la fonction suivante dans functions.php pour vérifier si un nom d'utilisateur existe dans la base de données.

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

Le problème est que la fonction username_exists() ne semble fonctionner que si un utilisateur est déjà connecté et vérifie un nom d'utilisateur. J'ai essayé de vérifier un nom d'utilisateur existant sans me connecter et il renvoie simplement undefined pour moi.

Je ne sais pas pourquoi cela se produit et je ne trouve aucune documentation sur ce problème.

Ma question est, comment puis-je permettre à un utilisateur de vérifier si un utilisateur existe sans avoir à se connecter?

Merci

5
user2028856

Lorsque vous utilisez l'API Ajax et que vous souhaitez rendre le rappel ajax disponible pour les utilisateurs non connectés, vous devez ajouter 2 actions, "wp_ajax_{$action}" et "wp_ajax_nopriv_{$action}".

En utilisant uniquement la première action, le rappel ne sera appelé que pour les utilisateurs connectés, en utilisant uniquement la seconde, il ne sera appelé que pour les visiteurs non connectés.

Essaye ça:

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');
6
gmazzap

Vous devez inclure le fichier wp-includes/user.php lorsque vous utilisez ajax pour les fonctions liées à l'utilisateur.

 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');
0
Rajeev Vyas