Verificar si el nombre de usuario existe con AJAX en WordPress

8 oct 2012, 18:28:40
Vistas: 5.07K
Votos: 2

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?

0
Todas las respuestas a la pregunta 2
2

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...

8 oct 2012 18:34:35
Comentarios

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 Jacek Jagiełło
8 oct 2012 18:40:47

La otra cosa que necesitarás hacer es cambiar $.get por $.post para enviar tus datos a WordPress. Pero aparte de los cambios que he recomendado, no podemos recomendar nada más sin ver el marcado HTML real contra el que estás intentando trabajar.

EAMann EAMann
8 oct 2012 18:59:29
1

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.

8 oct 2012 18:35:21
Comentarios

Todavía no funciona. No muestra ningún eco.

Jacek Jagiełło Jacek Jagiełło
8 oct 2012 18:43:04