web-dev-qa-db-ja.com

現在ログアウトされているユーザーのIDを返すためにどうすれば `clear_auth_cookie`にフックできますか?

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.
}

何か案は?

1
coolpasta

そのアクションはそのデータを渡しません。

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();
    // ...
});
1
Tom J Nowell