web-dev-qa-db-ja.com

カスタムプラグインでユーザーロールを確認する

私のテーマのfunctions.phpファイルで、私はユーザーロールをチェックするのに問題はありません。私は2つの異なる方法でチェックしました:

if ( current_user_can('wholesale_customer') ) { 
    // my code
}

そして

$current_user = wp_get_current_user();
if ( in_array( 'wholesale_customer', (array) $current_user->roles )) {
// my code
}

これらの両方が私のfunctions.phpファイルで完璧に動作します。しかし、私はカスタムプラグインを持っていて、単純に次のものを入れています。

$current_user = wp_get_current_user();

partはページ全体を機能させません。だから私の質問は:どのように私はカスタムプラグインで現在のユーザーを確認するのですか?

2
Kristoffer M

なぜプラグインではうまくいかないのですか。

WordPressがプラグイン内で$current_user = wp_get_current_user();を実行する時点では、関数wp_get_current_user()はまだ定義されていないため、プラグインには機能しません。 WordPressは、それらのユーザ関連機能を定義する前に、そのプラグインファイルをロードします。ただし、WordPressはテーマを定義して起動した後にテーマをロードするため、テーマには有効です。

プラグインで動作させる方法:

プラグインで動作させるには、アクションフックを使用することができます。たとえば、plugins_loadedアクションフックが起動された後に動作します。以下のコードのように:

add_action( 'plugins_loaded', 'check_current_user' );
function check_current_user() {
    // Your CODE with user data
    $current_user = wp_get_current_user();

    // Your CODE with user capability check
    if ( current_user_can('wholesale_customer') ) { 
        // Your CODE
    }
}

上記のコードを使えば、current_user_can()で役割をチェックし、wp_get_current_user()でユーザー情報を取得することがプラグインの内部で動作することがわかります。

3
Fayaz