我知道与这个主题相关的问题已经很多了,但我正在寻找一种简单的方法来对现有用户名进行ajax检查。因此,基本上我有HTML表单和两个函数(在function.php中)——一个用于发出ajax请求,另一个用于进行DB查找。注意:我使用的是WP Multisite。
The HTML Form:
<form method="post" name="register_user">
<p>
<label for="register_name">Name<br>
<input type="text" name="register_name" placeholder="Enter your user name">
</label>
</p>
<p>
<label for="register_email">E-Mail<br>
<input type="text" name="register_email" placeholder="Enter your E-Mail">
</label>
</p>
<p>
<label for="register_pass">Password<br>
<input type="text" name="register_pass" placeholder="• • • • • • •">
</label>
<p>
<input class="button-large register" type="submit" value="Sign Up">
</p>
</form>
AJAX call:
function mpl_add_js_login(){
?>
<script>
jQuery( document ).ready(function($) {
$(\'input[name="register_name"]\').change(function (e) {
var this_field = $(this);
var user_name = this_field.val();
$(\'.uname_status\').remove();
$.ajax({
url : \'<?php echo admin_url( \'admin-ajax.php\' ); ?>\',
type: "POST",
data: {\'action\': \'check_username\', user_name: user_name},
dataType: "json",
success: function(response) {
this_field.closest(\'label\').append(\'<div class="uname_status \'+ response.text +\'">\'+response.text+\'</div>\');
}
});
});
});
</script>
<?php
}
add_action(\'login_footer\',\'mpl_add_js_login\');
Username checkup:
function mpl_check_username() {
$response = array();
$username = sanitize_text_field($_POST[\'register_name\']);
if(username_exists($username)){
$response[\'status\'] = \'unavailable\';
$response[\'text\'] = __(\'Username unavailable\');
}else{
$response[\'status\'] = \'available\';
$response[\'text\'] = __(\'Username available\');
}
echo json_encode($response);
die();
}
add_action(\'wp_ajax_nopriv_check_username\', \'mpl_check_username\');
add_action(\'wp_ajax_check_username\', \'mpl_check_username\');
ERROR: 此代码始终变为
$response[\'status\'] = \'available\';即使你打字
admin 作为用户名。username\\u exists()是否有问题;作用
最合适的回答,由SO网友:sMyles 整理而成
您正在发布user_name 但在你的代码中你要检查register_name, 你应该检查一下$_POST[\'user_name\'] 相反
您还应该检查以确保实际上也在传递值,我会这样做(将不可用设置为默认值):
function mpl_check_username() {
$response = array(
\'status\' => \'unavailable\',
\'text\' => __( \'Username unavailable\' )
);
$username = array_key_exists( \'user_name\', $_POST ) ? sanitize_text_field( $_POST[\'user_name\'] ) : false;
if ( $username && ! username_exists( $username ) ) {
$response[\'status\'] = \'available\';
$response[\'text\'] = __( \'Username available\' );
}
echo json_encode( $response );
die();
}
所有的
username_exists 函数执行以下代码:
$user = get_user_by( \'login\', $username );
if ( $user ) {
$user_id = $user->ID;
} else {
$user_id = false;
}
您也可以在代码中尝试这一点,以消除
username_exists 由于某种奇怪的原因,过滤器被用来返回true。