如何钩入`lear_auth_cookie`返回当前正在注销的用户ID?

时间:2018-05-10 作者:coolpasta

clear_auth_cookie 是我捕获实际注销操作所需的,但我无法让它返回任何内容。

https://core.trac.wordpress.org/browser/tags/4.9/src/wp-includes/pluggable.php#L940

根据法典,它没有给出任何信息。

理想情况下,我想做:

add_action( \'clear_auth_cookie\', \'return_user_data_on_logout\');

function return_user_data_on_logout( $user ) {
    $id = $user->ID; //Assuming it returns a WP_User object.
    //Do some logic here, mostly to check if the user if is of certain type     / 
    has certain meta attached to them.
}
有什么想法吗?

2 个回复
最合适的回答,由SO网友:Tom J Nowell 整理而成

该操作不会传递该数据:

function return_user_data_on_logout( $user ) {
在这里,$user 将始终是未定义的。此外,您需要告诉add_action 函数需要多少个参数。

但是

do_action( \'clear_auth_cookie\' );
一开始没有传递任何信息,这不是此特定事件/操作的工作方式。

那么我们如何让当前用户注销呢?答案是,我们删除了问题中的“正在注销”一词,这给了我们一个更容易搜索的问题:

如何获取当前用户?

$user = wp_get_current_user();
这个钩子可能太早了,而且它可能不是最好的钩子。

例如wp_logout 是一个更好的钩子,因为它在铁皮上表明了它的作用

因此:

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

SO网友:Debbie Kurth

我找到了一个解决方案,另一个人给了我第二个更好的解决方案。该对话可在此处找到:Getting User email on logout. wp_logout

以下是两种解决方案:

解决方案1:

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);  
  } 
}
解决方案2:更好。因为它不会干扰woocommerce注销功能。

add_action( \'wp_logout\', \'mmd_JudgeLogoutCheck\', 10,1);  <<< NOTE PASSING 1 PARAMETER
function mmd_JudgeLogoutCheck($user_id)
{
$current_user  = get_userdata($user_id);

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

结束

相关推荐

从具有序列化值的元键获取GET_USERS

我想做一个get_users() 当元键有两个值时。例如,在db中,它如下所示:a:2:{i:0;s:10:\"31.08.2017\";i:1;s:9:\"username\";} 当我进行查询时:$claimed_users = get_users(\'meta_key=username\'); 并尝试输出它:print_r($claimed_users);它刚刚回来Array().我做错了什么?有没有更好的方法?