使用 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的主要内容,如果未能解决你的问题,请参考以下文章

按退出键中止 AJAX 文件上传

Spring+Session+interceptor+ajax(拦截器)的登陆和退出

当我在控制器功能中间中止或退出时,Ajax 请求被 Cors 阻止

Ajax 登录后动态更新 PHP 生成的元素

thinkphp 退出登录跳转页面时怎么从框架(frame)里跳出来?

Web在线聊天室 --- 退出登录