it-swarm.com.ru

функция username_exists () не может быть доступна без входа в систему

Я использую следующую функцию в functions.php, чтобы проверить, существует ли имя пользователя в БД

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

Проблема в том, что функция username_exists() работает, только если пользователь уже вошел в систему и проверил имя пользователя. Я попытался проверить существующее имя пользователя без входа в систему, и он просто возвращает undefined для меня.

Я понятия не имею, почему это происходит, и не могу найти документацию по этой проблеме.

У меня вопрос, как я могу позволить пользователю проверить, существует ли пользователь без входа в систему?

Спасибо

5
user2028856

При использовании Ajax API, и вы хотите, чтобы обратный вызов ajax был доступен для не зарегистрированных пользователей, вам нужно добавить 2 действия: "wp_ajax_{$action}" и "wp_ajax_nopriv_{$action}".

Используя только первое действие, обратный вызов будет вызываться только для зарегистрированных пользователей, а только второе - только для незарегистрированных посетителей.

Попробуй это:

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

Вам необходимо включить файл wp-includes/user.php, когда вы используете ajax для пользовательских функций.

 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