Как сделать Ajax регистрацию Wordpress бе плагинов?

На просторах интернета нашел вот этот скрипт www.howtomake.com.ua/wordpress/ajax-avtorizaciya-w...
Но он только авторизует.
Не много подкорректировав функцию я заставил скрипт работать на регистрацию, но осталась праблема, а именно при неуспешной регистрации - швыряет на страницу регистрации Wordpress, а вот при успешной - не выводит сообщений, а просто обновляет страницу.

Вот такая функция у меня получилась для регистрации
//  Ajax Login
  function ajax_register_init(){

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

	/* Локализуем параметры скрипта */
    wp_localize_script( 'ajax-register-script', 'ajax_register_object', array(
      'ajaxurl' => admin_url( 'admin-ajax.php' ),
      'redirecturl' => $_SERVER['REQUEST_URI'],
      'loadingmessage' => __('Проверяются данные, секундочку...')
    ));

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

  // Выполняем авторизацию только если пользователь не вошел
  if (!is_user_logged_in()) {
    add_action('init', 'ajax_register_init');
  }

  function ajax_register(){

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

    // Получаем данные из полей формы и проверяем их

    $user_login = $_POST['user_login'];
    $user_email = $_POST['user_email'];

		$register = register_new_user($user_login, $user_email);

    if ( is_wp_error($register) ){
      echo json_encode(array('loggedin'=>false, 'message'=>__('Ошибка!')));
    } else {
      echo json_encode(array('loggedin'=>true, 'message'=>__('Отлично! Идет перенаправление...')));
    }

    die();
  }


Ну и js тот же что и для логина..

register_new_user($user_login, $user_email) должна вернуть число (id созданного юзера) или же ошибку, но видимо где то в Wordpress при обращении к register_new_user происходит редирект.

Кто подскажет как решить?
  • Вопрос задан
  • 6862 просмотра
Решения вопроса 1
BBoyJuss
@BBoyJuss
WordPress, интерфейсы и все вытекающие
Вот, взял кусок кода отсюда WordPress AJAX Login And Register Without A Plugin
<?php

function ajax_auth_init(){

    wp_register_script('ajax-auth-script', get_template_directory_uri() . '/js/ajax-register-script.js', array('jquery') );
    wp_enqueue_script('ajax-auth-script');

    wp_localize_script( 'ajax-auth-script', 'ajax_auth_object', array(
        'ajaxurl' => admin_url( 'admin-ajax.php' ),
        'redirecturl' => home_url(),
        'loadingmessage' => __('Sending user info, please wait...')
    ));

    // Enable the user with no privileges to run ajax_register() in AJAX
    add_action( 'wp_ajax_nopriv_ajaxregister', 'ajax_register' );
}

// Execute the action only if the user isn't logged in
if (!is_user_logged_in()) {
    add_action('init', 'ajax_auth_init');
}

function ajax_register(){

    // First check the nonce, if it fails the function will break
    check_ajax_referer( 'ajax-register-nonce', 'security' );

    // Nonce is checked, get the POST data and sign user on
    $info = array();
    $info['user_nicename'] = $info['nickname'] = $info['display_name'] = $info['first_name'] = $info['user_login'] = sanitize_user($_POST['username']) ;
    $info['user_pass'] = sanitize_text_field($_POST['password']);
    $info['user_email'] = sanitize_email( $_POST['email']);

    // Register the user
    $user_register = wp_insert_user( $info );

    if ( is_wp_error($user_register) ){
        $error  = $user_register->get_error_codes() ;

        if(in_array('empty_user_login', $error))
            echo json_encode(array('loggedin'=>false, 'message'=>__($user_register->get_error_message('empty_user_login'))));
        elseif(in_array('existing_user_login',$error))
            echo json_encode(array('loggedin'=>false, 'message'=>__('This username is already registered.')));
         elseif(in_array('existing_user_email',$error))
            echo json_encode(array('loggedin'=>false, 'message'=>__('This email address is already registered.')));
        } else {
            auth_user_login($info['nickname'], $info['user_pass'], 'Registration');
        }

    die();
}

jQuery(document).ready(function($) {

    $('#register .submit_button').on('click', function(event) {
        var action   = 'ajaxregister';
            username = $('#signonname').val();
            password = $('#signonpassword').val();
            email    = $('#email').val();
            security = $('#signonsecurity').val();

        $.ajax({
            type: 'POST',
            dataType: 'json',
            url: ajax_auth_object.ajaxurl,
            data: {
                'action': action,
                'username': username,
                'password': password,
                'email': email,
                'security': security
            },
            success: function (data) {
                $('.status').text(data.message);

                if (data.loggedin == true) {
                    document.location.href = ajax_auth_object.redirecturl;
                }
            }
        });

        event.preventDefault();
    });
});
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы