如何在WordPress中注销之前执行一些代码

时间:2019-05-06 03:12:26

标签: php wordpress

我正在尝试为WordPress网站构建自定义退出页面。

我使用以下wp-login.php代码禁用了.htaccess

<Files wp-login.php>
deny from all
</Files>

如果您访问此页面,您将收到403禁止响应。

现在,我要在用户注销之前执行一个功能。

function execute_this() {
  wp_logout();
}

事情是互联网上的所有建议都在使用以下代码。

add_action('wp_logout', 'execute_this');

但是此钩子执行“ AFTER”成功注销,在我的情况下,由于无法访问wp-login.php,因此无法完成。

这就是为什么我试图注销用户“之前”,然后转到wp-login.php文件。

是否存在触发此类情况的挂钩/动作?

我也尝试做这样的事情(用我创建的页面自定义注销页面):

add_filter( 'logout_url', 'wpse_58453_logout_url' );
function wpse_58453_logout_url( $default )
{
    return plugin_dir_url(__FILE__) . 'logout.php';
}

然后在我的logout.php

require_once('../../../wp-includes/pluggable.php');
wp_logout();

我知道这是错误的方法,因为直接执行PHP文件从来都不是一个好主意,而且在执行此类操作时我无法访问WordPress挂钩。

有什么办法可以解决这个问题?

1 个答案:

答案 0 :(得分:1)

我对wordpress并不十分了解,但是我帮助维护的网站之一具有自定义退出网址(/tp-logout),主题具有以下代码来执行退出操作

function tp_custom_logout() {
        if ( is_page( 'tp-logout' ) && is_user_logged_in() ) {
                wp_destroy_current_session();
                wp_clear_auth_cookie();
                $url_logout = home_url();
                wp_redirect( $url_logout );
                exit();
        }
}

add_action( 'template_redirect', 'tp_custom_logout' );

它看起来与默认的WP注销功能极为相似,因此不知道为什么要添加它,但是也许您可以按照这种方法添加自定义代码。

我将调用函数wp_logout()进行实际注销,而不是复制代码(并且不调用wp_logout操作钩子),以使其更加友好。