@hypero

Как реализовать ajax авторизацию woocommerce?

Всем привет.
Как реализовать ajax авторизацию и регистрацию на woocommerce?
Нашел такой код, подпилил под себя, но не работает, просто ничего не происходит.
https://gist.github.com/shizhua/f617464d11899aa55c24

upd.

functions.php
function ajax_auth_init(){	
    wp_register_script('ajax-auth-script', get_template_directory_uri() . '/assets/js/ajax-auth-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_login() in AJAX
    add_action( 'wp_ajax_nopriv_ajaxlogin', 'ajax_login' );
	// 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_login(){
 
    // First check the nonce, if it fails the function will break
    check_ajax_referer( 'ajax-login-nonce', 'security' );
 
    // Nonce is checked, get the POST data and sign user on
  	// Call auth_user_login
	auth_user_login($_POST['username'], $_POST['password'], 'Login'); 
	
    die();
}
 
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();
}
 
function auth_user_login($user_login, $password, $login)
{
	$info = array();
    $info['user_login'] = $user_login;
    $info['user_password'] = $password;
    $info['remember'] = true;
	
	$user_signon = wp_signon( $info, '' ); // From false to '' since v4.9
    if ( is_wp_error($user_signon) ){
		echo json_encode(array('loggedin'=>false, 'message'=>__('Wrong username or password.')));
    } else {
		wp_set_current_user($user_signon->ID); 
        echo json_encode(array('loggedin'=>true, 'message'=>__($login.' successful, redirecting...')));
    }
	
	die();
}


js
$('form#login, form#register').on('submit', function (e) {
   if (!$(this).valid()) return false;
   $('.status', this).show().text(ajax_auth_object.loadingmessage);
action = 'ajaxlogin';
username = 	$('form#login #username').val();
password = $('form#login #password').val();
email = $('form#login #password').val();
security = $('form#login #security').val();
if ($(this).attr('id') == 'register') {
   action = 'ajaxregister';
   username = $('#reg_username').val();
   password = $('#reg_password').val();
   email = $('#reg_email').val();
   security = $('#signonsecurity').val();	
}  
ctrl = $(this);
$.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', ctrl).text(data.message);
      if (data.loggedin == true) {
               document.location.href = ajax_auth_object.redirecturl;
            }
      }
   });
   e.preventDefault();
});


Файлы авторизации и регистрации раскиданы по файлам, login.php
<?php do_action( 'woocommerce_before_customer_login_form' ); ?>

<div class="woocommerce">

    <form id="login" class="woocommerce-form woocommerce-form-login login" method="post">

    <div class="status"></div>

        <?php do_action( 'woocommerce_login_form_start' ); ?>

        <?php wp_nonce_field('ajax-login-nonce', 'security'); ?>  

        <p class="woocommerce-form-row woocommerce-form-row--wide form-row form-row-wide">
            <label for="username"><?php esc_html_e( 'Username or email address', 'woocommerce' ); ?>&nbsp;<span class="required">*</span></label>
            <input type="text" class="woocommerce-Input woocommerce-Input--text input-text" name="username" id="username" autocomplete="username" value="<?php echo ( ! empty( $_POST['username'] ) ) ? esc_attr( wp_unslash( $_POST['username'] ) ) : ''; ?>" /><?php // @codingStandardsIgnoreLine ?>
        </p>
        <p class="woocommerce-form-row woocommerce-form-row--wide form-row form-row-wide">
            <label for="password"><?php esc_html_e( 'Password', 'woocommerce' ); ?>&nbsp;<span class="required">*</span></label>
            <input class="woocommerce-Input woocommerce-Input--text input-text" type="password" name="password" id="password" autocomplete="current-password" />
        </p>

        <?php do_action( 'woocommerce_login_form' ); ?>

        <p class="form-row">
            <label class="woocommerce-form__label woocommerce-form__label-for-checkbox woocommerce-form-login__rememberme">
                <input class="woocommerce-form__input woocommerce-form__input-checkbox" name="rememberme" type="checkbox" id="rememberme" value="forever" /> <span><?php esc_html_e( 'Remember me', 'woocommerce' ); ?></span>
            </label>
            <button type="submit" class="woocommerce-button button woocommerce-form-login__submit" name="login" value="<?php esc_attr_e( 'Log in', 'woocommerce' ); ?>"><?php esc_html_e( 'Log in', 'woocommerce' ); ?></button>
        </p>
        <p class="woocommerce-LostPassword lost_password">
            <a href="<?php echo esc_url( wp_lostpassword_url() ); ?>"><?php esc_html_e( 'Lost your password?', 'woocommerce' ); ?></a>
        </p>

        <?php do_action( 'woocommerce_login_form_end' ); ?>

    </form>
</div>
  • Вопрос задан
  • 479 просмотров
Пригласить эксперта
Ответы на вопрос 1
@nonconformiste
Это все лишние навороты)
Просто сделайте функцию на JS, которая будет отправлять форму по ajax, при успешном ответе ( надо парсить с страницы результата ), отображать результат.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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