在Wordpress中注册之前检查用户名

时间:2013-05-09 11:51:51

标签: ajax wordpress user-registration

我在注册前创建了用于检查用户名的脚本,但它不起作用。它返回错误。 它是functions.php中的脚本:

function check_user_login_init(){

    /* Подключаем скрипт для проверки */
    wp_register_script('ajax-login-script', get_template_directory_uri() . '/js/ajax-login-script.js', array('jquery') ); 
    wp_enqueue_script('ajax-login-script');

    /* Локализуем параметры скрипта */
    wp_localize_script( 'ajax-login-script', 'ajax_check_login_object', array( 
      'ajaxurl' => admin_url( 'admin-ajax.php' ),
      'loadingmessage' => __('Verified data, wait a second...')
    ));

    // Разрешаем запускать функцию check_user_login() пользователям без привелегий
    add_action( 'wp_ajax_nopriv_check_user_login', 'check_user_login' );    
  }

    if (!is_user_logged_in()) {
        add_action('init', 'check_user_login_init');
    }

    function check_user_login(){

        // Первым делом проверяем параметр безопасности
        check_ajax_referer( 'ajax-login-nonce', 'security' );

        // Получаем данные из поля #user_login формы и проверяем их
        $username = $_REQUEST['username'];

        $sanitized_user_name = sanitize_user( $username, 1 );
        if ( username_exists( $sanitized_user_name )) {
                 echo json_encode(array('avaliblename'=>false, 'message'=>__('Choose another name!')));
            } else {
                 echo json_encode(array('avaliblename'=>false, 'message'=>__('OK!')));
            }

        die();
        exit;
    }

这是JS:

jQuery(document).ready(function($) {
    $('.register_box #registration #user_login').on('keyup', function(e){

            $.ajax({
                beforeSend: function(){
                    $('.register_box .status_registration').show().text(ajax_login_object.loadingmessage);
                },
                type: 'POST',
                dataType: 'json',
                url: ajax_check_login_object.ajaxurl,
                cache: false,
                data: { 
                    'action': 'check_user_login', //calls wp_ajax_nopriv_checkuserlogin
                    'username': $('.register_box #user_login').val()       
                },
                dataFilter: function(){
                    $('.register_box .status_registration').html('Data processed...');
                },
                error:  function(){

                    $('.register_box .status_registration').html('Something wrong...');

                    },
                success: function(data){


                        $('.register_box .status_registration').html(data.message);
                }
        });
        e.preventDefault();
    });
});

当我尝试在Google Chrome中输入用户名时,会返回错误:

  

未捕获的TypeError:无法读取null

的属性“message”

你能帮忙吗?

1 个答案:

答案 0 :(得分:0)

由于data.message未设置,因此很可能是JavaScript错误。检查开发人员工具栏的“网络”选项卡,检查从服务器返回的内容。

旁注:对于服务器端的enable debugging来说,从日志中了解正在发生的事情也不会受到影响。这是我在wp-config.php中的表现方式:

define('WP_DEBUG', true);
define('WP_DEBUG_DISPLAY', false); // Turn forced display OFF
define('WP_DEBUG_LOG',     true);  // Turn logging to wp-content/debug.log ON

然后在任何地方执行以下行将其推送到wp-content/debug.log(您可以监控):

error_log('started processing with array:');
error_log(print_r($array, true));

最后,摆脱die();并保留exit;声明。

相关问题