如何使用ajax注销wordpress?您无法使用wp-login.php
,因此我们需要使用admin-ajax.php
。我正在使用以下代码:
html(小部件):
<form id="logout" action="logout" method="post">
<input class="submit_button" type="submit" value="<?php echo $lg_logout[$lang] ?>" name="submit">
<?php wp_nonce_field( 'ajax-logout-nonce', 'logoutsecurity' ); ?>
</form>
的functions.php
add_action('init', 'ajax_login_init');
function ajax_logout_init(){
add_action( 'wp_ajax_ajaxlogout', 'ajax_logout' );
}
add_action('init', 'ajax_logout_init');
function ajax_logout(){
check_ajax_referer( 'ajax-logout-nonce', 'logoutsecurity' );
// kill session
wp_clear_auth_cookie();
wp_logout();
die();
}
和ajax(js):
$('form#logout').on('submit', function(e){
$.ajax({
type: 'POST',
url: siteUrl+'/wp-admin/admin-ajax.php',
data: {
'action': 'ajaxlogout', //calls wp_ajax_nopriv_ajaxlogout
'logoutsecurity': $('form#logout #logoutsecurity').val() },
success: function(data){
console.log('tutu');
//relodlognwidget();
}
});
e.preventDefault();
});
怎么了?
答案 0 :(得分:3)
感谢@zorg的领先优势。我看到你有这个工作。对于像我一样来到这里的人和需求以及ajax注销,这是一个完整的解决方案。
/** Set up the Ajax Logout */
if (is_admin()) {
// We only need to setup ajax action in admin.
add_action('wp_ajax_custom_ajax_logout', 'custom_ajax_logout_func');
} else {
wp_enqueue_script('custom-ajax-logout', get_stylesheet_directory_uri() . '/js/customAjaxLogout.js', array('jquery'), '1.0', true );
wp_localize_script('custom-ajax-logout', 'ajax_object',
array(
'ajax_url' => admin_url('admin-ajax.php'),
'home_url' => get_home_url(),
'logout_nonce' => wp_create_nonce('ajax-logout-nonce'),
)
);
}
function custom_ajax_logout_func(){
check_ajax_referer( 'ajax-logout-nonce', 'ajaxsecurity' );
wp_clear_auth_cookie();
wp_logout();
ob_clean(); // probably overkill for this, but good habit
echo 'adios!!';
wp_die();
}
现在是JavaScript文件。如果您使用上面的代码将保存在活动主题文件夹中,如wp-content/themes/yourtheme/js/customAjaxLogout.js
注意:我使用jQuery.on的形式,即使在JavaScript之后也可以创建注销按钮文件已运行。由于我们有ajax注销,我们可能正在使用Ajax加载其他东西,甚至是注销按钮。
$(document).on('click','.logout', function(e) {
e.preventDefault();
$.ajax({
type: 'POST',
url: ajax_object.ajax_url,
data: {
'action': 'custom_ajax_logout', //calls wp_ajax_nopriv_ajaxlogout
'ajaxsecurity': ajax_object.logout_nonce
},
success: function(r){
// When the response comes back
window.location = ajax_object.home_url;
}
});
});