在注销时获取用户电子邮件。WP_注销

时间:2021-05-06 作者:Debbie Kurth

我研究了几种不同的方法来检查特定角色的用户何时注销。调用是在插件中进行的。

在主循环中,我有以下内容:

add_action( \'wp_logout\', mmd_JudgeLogoutCheck, 10,0);

function mmd_JudgeLogoutCheck()
{
$current_user  = wp_get_current_user(); 
if ( in_array( \'judge\', (array) $current_user->roles ) )  
  {  
    mmd_StoreJudgeStatus($current_user->user_email, JUDGE_LOGGED_OUT, 0);  
  } 
}

每次调用wp\\u get\\u current\\u user时,返回一个空白。那封电子邮件是我功能的关键。我也试过了


add_action( \'wp_logout\', function() {
    $user = wp_get_current_user();
    mmd_JudgeLogoutCheck($user);
    // ...
}, 10, 0);

function mmd_JudgeLogoutCheck($current_user  )
{
if ( in_array( \'judge\', (array) $current_user->roles ) )  
  {  
    mmd_StoreJudgeStatus($current_user->user_email, JUDGE_LOGGED_OUT, 0);  
  } 
}


相同的结果。较早发生的呼叫似乎没有用户信息。任何关于如何获取哪个特定用户正在注销的帮助都会很有帮助。

2 个回复
SO网友:anton

wp_get_current_user() 永远不会在这个钩子里工作,因为,wp_logout 用户注销后激发操作:会话已销毁,Cookie已清除,当前用户设置为0。

但是wp_logout 操作接收$user\\u id。我将给您一个工作示例,因为我不熟悉您的自定义函数。

//pass $user_id as argument
function mmd_JudgeLogoutCheck($user_id)
{
    $user  = get_userdata($user_id); 
    if ( $user instanceof WP_User  )  
    {  
        //user email available here
        die($user->user_email);  
    } 
}

//here last argument should be one
add_action( \'wp_logout\', \'mmd_JudgeLogoutCheck\', 10,1);

SO网友:Debbie Kurth

你难道不知道吗,在我写这个问题的那一刻,我想到了另一个想法,它奏效了。以下是解决方案:

在plugin main中,添加以下内容,而不是:

add_action( \'clear_auth_cookie\', mmd_JudgeLogoutCheck, 10,0); <<<< ADD THIS INSTEAD
///add_action( \'wp_logout\', mmd_JudgeLogoutCheck, 10,0);   <<<<< REMOVE THIS

function mmd_JudgeLogoutCheck()
{
$current_user  = wp_get_current_user(); 
if ( in_array( \'judge\', (array) $current_user->roles ) )  
  {  
    mmd_StoreJudgeStatus($current_user->user_email, JUDGE_LOGGED_OUT, 0);  
  } 
}

似乎清除授权cookie时会携带用户信息。

相关推荐

Wp_logout()WordPress 5.1.1中的更改

我们最近刚刚将WordPress网站升级到5.1.1升级后,我们在执行wp_logout() WordPress的功能。不知怎的,我们得到了302 响应,但未显示错误/警告。我把它缩小到wp_logout() 并确定wp_destroy_current_session(); 和wp_clear_auth_cookie(); 工作正常!这意味着错误发生在wp_logout() 被称为:do_action( \'wp_logout\' ); 我的问题是:外部插件是否可能以某种方式损坏wp_logou