使用 Ajax 退出 Wordpress
Posted
技术标签:
【中文标题】使用 Ajax 退出 Wordpress【英文标题】:Wordpress Logout Using Ajax 【发布时间】:2014-08-26 17:41:52 【问题描述】:如何使用 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();
);
怎么了?
【问题讨论】:
你刷新页面了吗?它可能会被注销,但显然因为你是用 ajax 来做的,所以页面在刷新之前不会改变。 代码现在可以工作了,我做错了。如果你使用它,通过 jquery 加载,你可以使用 relodlognwidget() 之类的函数刷新小部件; :) 【参考方案1】:感谢@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_logout();
ob_clean(); // probably overkill for this, but good habit
wp_send_json_success();
现在是 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;
);
);
【讨论】:
仅供参考 wp_logout 已经运行 wp_clear_auth_cookie(),无需添加。您也可以使用 wp_send_json_success() 而不是 echo 'adios!!'和 wp_die();参考:codex.wordpress.org/Function_Reference/wp_send_json_success以上是关于使用 Ajax 退出 Wordpress的主要内容,如果未能解决你的问题,请参考以下文章
Spring+Session+interceptor+ajax(拦截器)的登陆和退出
当我在控制器功能中间中止或退出时,Ajax 请求被 Cors 阻止