current_user_can()
は、 現在のユーザーが特定の権限やロールを持っているか確認する テンプレートタグです。管理画面へのアクセス制御や、特定の機能を特定ユーザーのみが利用できるようにする場合に使用されます。
機能の説明
- WordPressユーザーの権限やロール(例:
administrator
やeditor
)をチェックします。 - 投稿の編集やプラグインの管理といった 特定の機能にアクセスできるかどうか を判定するために使います。
- よく使われる権限例:
edit_posts
、manage_options
、publish_posts
。
基本構文
指定した capability
(例: 'edit_posts'
, 'manage_options'
など)を、現在のログインユーザーが保持していれば true
を返し、そうでなければ false
を返します。オプションで object_id
を指定することで、特定の投稿やタクソノミーに関連する権限チェックも可能です。
current_user_can( string $capability, mixed $object_id = null ) : bool
シンプルなコード例
if (current_user_can('edit_posts')) {
echo '投稿を編集する権限があります。';
} else {
echo '投稿を編集する権限がありません。';
}
current_user_can()
は 特定の権限名やロール を渡すと、現在のユーザーがそれを持っているかどうかを判定します。- 「権限」 とは、管理画面やAPIで許可されている具体的なアクションのことです。
- 複数の権限を持つユーザーに対して、 特定の権限だけが必要な操作 をチェックするのが一般的です。
ソースコード例
if (current_user_can('manage_options')) {
// 管理画面の設定にアクセスできるユーザー向けの処理
echo '<a href="/wp-admin/options-general.php">設定を管理する</a>';
} else {
// アクセスが許可されない場合のメッセージ
wp_die('この操作を行う権限がありません。');
}
manage_options
権限は、 管理者ユーザー(Administrator) のみが持っています。- 権限がない場合には
wp_die()
を使い、エラーメッセージを表示して処理を停止します。
if ( current_user_can( 'edit_posts' ) ) {
echo 'あなたは投稿を編集できます。';
} else {
echo 'この操作を行う権限がありません。';
}
現在のユーザーが投稿の編集権限を持っているかを確認し、持っていればメッセージを表示します。
if ( current_user_can( 'edit_post', 123 ) ) {
echo 'この投稿(ID:123)を編集できます。';
}
特定の投稿ID(123)に対しての編集権限を確認しています。
注意点
- 管理者ユーザー(
administrator
ロール)はほとんどの権限を持っているため、常にtrue
になる可能性があります。 - 権限名(Capability)は、ユーザーロールによって異なるため、対象ロールに合った権限名を使用する必要があります。
- ログインしていないユーザーは、すべて
false
を返します。
引数と戻り値
WordPressの関数current_user_can()
の引数と戻り値は以下の通りです。
引数 | 型 | 説明 |
$capability | string|int | チェックする権限(capability)または役割(role)の名前。 |
---|---|---|
$args | mixed | 権限チェックに追加で渡す引数。例:投稿IDなど。 |
戻り値 | 型 | 説明 |
bool | bool | 現在のユーザーが指定された権限を持っている場合はtrue を、持っていない場合はfalse を返します。 |
---|
一緒に使うことが多い関連タグ
is_user_logged_in()
- ログイン済みのユーザーかどうか をチェックします。
current_user_can()
と組み合わせて使うことで、 ログインしていないユーザーには特定の権限チェックをスキップ できます。
if (is_user_logged_in() && current_user_can('edit_posts')) {
echo '投稿を編集できます。';
} else {
wp_die('ログインが必要です。');
}
wp_get_current_user()
- 現在のユーザー情報を取得 します。
current_user_can()
と組み合わせると、 ユーザーの詳細な情報 も同時に取得できます。
$user = wp_get_current_user();
if (current_user_can('edit_posts')) {
echo 'ようこそ、' . esc_html($user->display_name) . 'さん!';
}
wp_get_current_user()
は現在のユーザーの 表示名(display_name
) を取得します。
current_user_can_edit_post()
if ( current_user_can( 'edit_post', $post_id ) ) {
// 投稿編集可能
}
特定の投稿に対して編集権限があるかチェックします。
get_current_user_id()
$user_id = get_current_user_id();
現在ログイン中のユーザーのIDを取得します。
user_can()
$user = wp_get_current_user();
if ( user_can( $user, 'delete_posts' ) ) {
// 投稿削除可能
}
ユーザーオブジェクトを明示的に渡して権限を確認できます。
追加情報を取得したい場合
get_userdata()
でユーザー情報を取得する
$user_id = get_current_user_id();
$user_data = get_userdata($user_id);
echo 'あなたのユーザー名は: ' . esc_html($user_data->user_login);
get_userdata()
で、ユーザーIDを元に詳細なユーザー情報を取得します。user_login
には、ユーザーのログイン名が格納されています。
出力できる情報
- user_login:ユーザーのログイン名
- user_email:ユーザーのメールアドレス
- roles:ユーザーのロール(例:
administrator
)
想定されるトラブル
権限が正しく判定されない
- 権限のキャッシュが残っている可能性があります。
- カスタム権限が 正しく登録されていない 場合もあります。
解決方法
- キャッシュをクリア して、再度チェックします。
add_role()
やadd_cap()
を使い、カスタム権限を再登録します。
ユーザーが正しくログアウトできない
セッション管理に問題がある場合、 ログアウトが正常に反映されない ことがあります。
解決方法
- Cookieを削除 して再ログインします。
wp_logout()
を使ってセッションを強制終了します。
常に false
が返る
非ログイン状態でこの関数を使うと、常に false
になります。
解決方法
if ( is_user_logged_in() && current_user_can( 'edit_posts' ) ) {
// OK
}
is_user_logged_in()
で事前にログイン状態をチェックしてください。
権限名が間違っている
存在しない capability
を指定すると、常に false
を返します。
解決方法
指定した権限が WordPress で正しく定義されているか確認してください。必要に応じて user_has_cap
フィルターなどでカスタム権限を追加することも可能です。
Q&A
まとめ
current_user_can()
は、 WordPressでユーザーの権限をチェック するための便利なテンプレートタグです。管理者や編集者など、特定のユーザーだけが利用できる機能を 柔軟に制御 することができます。
is_user_logged_in()
や wp_get_current_user()
と組み合わせて、 アクセス管理やセキュリティ向上 に役立てることができます。
コメント