我想開發一個WordPress的登錄Ajax表單。似乎這個插件工作正常。如果我插入正確的用戶名和密碼登錄正常工作,並顯示正確的消息,然後重定向到正確的頁面,但如果我輸入用戶名和密碼不正確的值沒有發生,並且錯誤消息不會出現。WordPress的Ajax登錄錯誤消息
似乎函數is_wp_error不會回顯錯誤。
你知道爲什麼嗎?在我的代碼下面
謝謝。
PHP
function ajax_login_init(){
wp_enqueue_script('ajax-login', get_template_directory_uri() . '/js/jquery.ajax.login.js', array('jquery') , $ver , true);
wp_localize_script('ajax-login', 'loginajax', array('ajaxurl' => admin_url('admin-ajax.php'),));
// Enable the user with no privileges to run ajax_login() in AJAX
add_action('wp_ajax_nopriv_met_login_member', 'met_login_member');
}
if (!is_user_logged_in()) {
add_action('init', 'ajax_login_init');
}
function met_login_member() {
$user_login = $_POST['met_user_login'];
$user_pass = $_POST['met_user_pass'];
if(!check_ajax_referer('ajax-login-nonce', 'login-security', false)) {
echo json_encode(array('error' => true, 'message'=> '<div class="alert alert-danger">'.__('Session token has expired, please reload the page and try again', 'met').'</div>'));
}
else if(empty($user_login) || empty($user_pass)){
echo json_encode(array('error' => true, 'message'=> '<div class="alert alert-danger">'.__('Please fill all form fields', 'met').'</div>'));
} else { // Now we can insert this account
$creds = array();
$creds['user_login'] = $user_login;
$creds['user_password'] = $user_pass;
$creds['remember'] = true;
$user = wp_signon($creds, false);
if(is_wp_error($user)) {
echo json_encode(array('error' => true, 'message'=> '<div class="alert alert-danger">'.$user->get_error_message().'</div>'));
} else {
echo json_encode(array('error' => false, 'message'=> '<div class="alert alert-success">'.__('Login successful, reloading page...', 'met').'</div>'));
}
}
die();
}
HTML
<div class="user-modal">
<div class="user-modal-container">
<ul class="switcher">
<li><span><?php _e('Sign in', 'met'); ?></span></li>
<li><span><?php _e('New Account', 'met'); ?></span></li>
</ul>
<div class="modal-login">
<form id="login-form" class="modal-form" action="<?php echo home_url('/'); ?>" method="post" />
<p class="fieldset">
<label class="image-replace email" for="signin-email"><?php _e('Username', 'met'); ?></label>
<input id="user-login" class="full-width has-padding has-border" type="text" name="met_user_login" placeholder="<?php _e('Username', 'met'); ?>" value="" size="20" tabindex="10" required />
</p>
<p class="fieldset">
<label class="image-replace password" for="signin-password"><?php _e('Password', 'met'); ?></label>
<input id="user-pass" class="full-width has-padding has-border" type="password" name="met_user_pass" placeholder="<?php _e('Password', 'met'); ?>" value="" size="20" tabindex="20" required />
<span class="show-password"><?php _e('Show', 'met'); ?></span>
</p>
<p class="fieldset">
<label class="checkbox" for="rememberme">
<input name="rememberme" type="checkbox" id="rememberme" value="forever" tabindex="90"><?php _e('Remember me', 'met'); ?>
</label>
</p>
<p class="fieldset">
<button id="wp-submit" class="full-width" data-loading-text="<?php _e('Loading...', 'met') ?>" type="submit"><?php _e('Sign In', 'met'); ?></button>
<input type="hidden" name="action" value="met_login_member" />
</p>
<?php wp_nonce_field('ajax-login-nonce', 'login-security'); ?>
</form>
<div class="errors"></div>
<p class="modal-form-bottom-message"><span><?php _e('Lost your password?', 'met'); ?></span></p>
</div>
</div>
</div>
JS
$('button').on('click', function(e) {
e.preventDefault();
$.post(loginajax.ajaxurl, $('#login-form').serialize(), function(data) {
var obj = $.parseJSON(data);
$('.modal-login .errors').html(obj.message);
if(obj.error === false) {
window.location.reload(true);
} else if(obj.error === true) {
$('.alert-danger').delay(2000).fadeOut('slow',function(){$(this).hide();});
}
});
});
您是否嘗試過在回覆每條消息後放置die()函數? - 我詳細闡述了你的功能,請檢查答案,並讓我知道你是否有任何問題。 –