如果未登录,则无法访问Username_Existes()函数

时间:2014-08-02 作者:user2028856

我在函数中使用以下函数。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 对我来说。

我不知道为什么会发生这种情况,也找不到有关此问题的任何文档。

我的问题是,如何让用户在不必登录的情况下检查用户是否存在?

谢谢

2 个回复
最合适的回答,由SO网友:gmazzap 整理而成

在使用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\');

SO网友:Rajeev Vyas

您需要包括wp includes/user。使用ajax实现用户相关函数时的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\');

结束