username_exists () no se puede acceder a la función sin iniciar sesión

5

Estoy usando la siguiente función en functions.php para verificar si existe un nombre de usuario en la base de datos

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

El problema es que la función username_exists() solo parece funcionar si un usuario ya ha iniciado sesión y verifica un nombre de usuario. Intenté buscar un nombre de usuario existente sin iniciar sesión y simplemente me devuelve undefined .

No tengo idea de por qué sucede esto y no puedo encontrar ninguna documentación sobre este problema.

Mi pregunta es, ¿cómo puedo permitir que un usuario verifique si existe un usuario sin tener que iniciar sesión?

Gracias

    
pregunta user2028856 02.08.2014 - 08:18

2 respuestas

6

Al usar la API de Ajax, y desea que la devolución de llamada ajax esté disponible para usuarios no registrados, debe agregar 2 acciones, "wp_ajax_{$action}" y "wp_ajax_nopriv_{$action}" .

Usando solo la primera acción, la devolución de llamada se llamará solo para usuarios registrados, usando solo la segunda, se llamará solo para visitantes no registrados.

Prueba esto:

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');
    
respondido por el gmazzap 02.08.2014 - 11:11
0

Debe incluir el archivo wp-includes / user.php cuando esté utilizando ajax para las funciones relacionadas con el usuario.

 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');
    
respondido por el Rajeev Vyas 02.08.2014 - 09:10

Lea otras preguntas en las etiquetas