Verificar si el nombre de usuario existe con AJAX en WordPress
He creado un formulario de registro personalizado para una instalación de WordPress Multisitio. Permite el registro de nuevos blogs y usuarios. Quiero verificar con AJAX si un nombre de usuario está disponible. Esto es lo que tengo hasta ahora:
add_action( 'wp_footer', 'pb_ajax_add_js' );
function pb_ajax_add_js() {
// agregar script al footer
wp_enqueue_script( 'pb_ajax',
plugin_dir_url( __FILE__ ).'js/script.js',
array('jquery'), BOJ_ARM_VERSION, true
);
// Obtener protocolo de la página actual
$protocol = isset( $_SERVER["HTTPS"]) ? 'https://' : 'http://';
// Mostrar admin-ajax.php usando el mismo protocolo que la página actual
$params = array(
'ajaxurl' => admin_url( 'admin-ajax.php', $protocol )
);
wp_localize_script( 'pb_ajax', 'pb_ajax', $params );
}
Manejo de la solicitud del lado del servidor:
// Manejo de solicitud Ajax
add_action('wp_ajax_nopriv_boj_arm_ajax', 'pb_check_username');
add_action('wp_ajax_boj_arm_ajax', 'pb_check_username');
function pb_check_username() {
$username = $_REQUEST['usr'];
echo $username;
die();
}
Y el script jQuery (nota: en esta versión, la validación ocurre después de hacer clic en el enlace)
(function($) {
$('.check-username').click(function(){
var link = this;
$(link).html('verificando...');
// href="' . get_permalink() . "#more-{$post->ID}"
var usr = $("#site-addres-input").attr('value');
var data = {
action: 'boj_arm_ajax',
usr: usr
};
$.get(boj_arm.ajaxurl, data, function(data){
$(link).after(data).remove();
});
return false;
});
})(jQuery);
El script no está completo. Debe verificar si el nombre de usuario existe y devolver verdadero o falso. ¿Pueden ayudarme por favor?
El problema está con tu selector de jQuery:
var usr = $("#site-addres-input").attr('value');
Obtendrá el valor por defecto del elemento de entrada. Normalmente estará vacío, porque no lo estás estableciendo de antemano. Necesitas usar:
var usr = $("#site-addres-input").val();
También noto que estás usando #site-addres-input, pero "address" tiene dos 's' al final. No estoy seguro si esto también te está causando un problema o no...
Estoy usando la dirección del sitio como nombre de usuario (la nueva dirección del blog es igual al nombre de usuario). Pero esto no cambia nada...
Jacek Jagiełło
Puedes usar esta función: username_exists para verificar si el usuario existe.
Así:
add_action('wp_ajax_nopriv_boj_arm_ajax', 'pb_check_username');
add_action('wp_ajax_boj_arm_ajax', 'pb_check_username');
function pb_check_username() {
$username = $_REQUEST['usr'];
if(username_exists($username))
echo 1;
else
echo 0;
die();
}
Por favor lee el codex para el uso correcto de esta función ya que necesitarás incluir un archivo.