web-dev-qa-db-ja.com

username_exists()関数はログインしないとアクセスできません

ユーザー名がDBに存在するかどうかを確認するために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コールバックを利用できるようにしたい場合は、"wp_ajax_{$action}""wp_ajax_nopriv_{$action}"の2つのアクションを追加する必要があります。

最初のアクションのみを使用して、コールバックはログインしているユーザーに対してのみ呼び出され、2番目のアクションのみを使用して、ログインしていない訪問者に対してのみ呼び出されます。

これを試して:

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

ユーザー関連機能にajaxを使用している場合は、wp-includes/user.phpファイルを含める必要があります。

 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