我已經實現了基於AJAX的日誌功能在我的WP網站,具體如下:WordPress的AJAX登錄不重定向成功登錄
functions.php
function ajax_login_init(){
wp_register_script('ajax-login-script', get_template_directory_uri() . '/ajax-login-script.js', array('jquery'));
wp_enqueue_script('ajax-login-script');
wp_localize_script('ajax-login-script', 'ajax_login_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');
}
// Execute the action only if the user isn't logged in
if (!is_user_logged_in()) {
add_action('init', 'ajax_login_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
$info = array();
$info['user_login'] = $_POST['username'];
$info['user_password'] = $_POST['password'];
$info['remember'] = true;
$user_signon = wp_signon($info, false);
if (is_wp_error($user_signon)){
echo json_encode(array('loggedin'=>false, 'message'=>__('Wrong username or password.')));
} else {
echo json_encode(array('loggedin'=>true, 'message'=>__('Login successful, redirecting...')));
}
die();
}
ajax-login-script.js
jQuery(document).ready(function() {
// Perform AJAX login on form submit
jQuery('form#login_form').on('submit', function(e){
jQuery('form#login_form p.login-status').show().text(ajax_login_object.loadingmessage);
jQuery.ajax({
type: 'POST',
dataType: 'json',
url: ajax_login_object.ajaxurl,
data: {
'action': 'ajaxlogin', //calls wp_ajax_nopriv_ajaxlogin
'username': jQuery('form#login_form #txtEmail').val(),
'password': jQuery('form#login_form #txtPassword').val(),
'security': jQuery('form#login_form #security').val() },
success: function(data){
jQuery('form#login_form p.login-status').text(data.message);
if (data.loggedin == true){
document.location.href = ajax_login_object.redirecturl;
}
}
});
e.preventDefault();
});
});
現在,當我在我的登錄彈出框中輸入錯誤的憑據,它成功顯示我等待的消息,然後錯誤Wrong username or password.
。但是,當我使用正確的憑據並按登錄,然後它默默登錄我,但從來沒有刷新頁面(實際上它嘗試在後臺刷新頁面,但由於它是一個Ajax請求,我只能看到刷新console
選項卡)。
我想讓ajax刷新我發送請求的當前頁面。
我認爲,罪魁禍首可能是這個片段:
$user_signon = wp_signon($info, false);
if (is_wp_error($user_signon)){
echo json_encode(array('loggedin'=>false, 'message'=>__('Wrong username or password.')));
} else {
echo json_encode(array('loggedin'=>true, 'message'=>__('Login successful, redirecting...')));
}
當$user_signon = wp_signon($info, false);
被調用時,它實際上會記錄用戶和重定向頁面(內AJAX),從來沒有進一步執行代碼。因此,我沒有在我的AJAX成功函數中獲取JSON編碼數據(這是我實際嘗試使用JavaScript重定向頁面的地方)。
任何幫助將不勝感激。謝謝
試着顛倒順序'如果(!is_wp_error(user_signon $))',也可反方向2回聲 – Mihai
做到了,沒有運氣。 – Ali