current_user_can()
は、 現在のユーザーが特定の権限やロールを持っているか確認する テンプレートタグです。管理画面へのアクセス制御や、特定の機能を特定ユーザーのみが利用できるようにする場合に使用されます。
目次
機能の説明
- WordPressユーザーの権限やロール(例:
administrator
やeditor
)をチェックします。 - 投稿の編集やプラグインの管理といった 特定の機能にアクセスできるかどうか を判定するために使います。
- よく使われる権限例:
edit_posts
、manage_options
、publish_posts
。
シンプルなコード例
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()
を使い、エラーメッセージを表示して処理を停止します。
一緒に使うことが多い関連タグ
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
) を取得します。
追加情報を取得したい場合
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()
を使ってセッションを強制終了します。
Q&A
まとめ
current_user_can()
は、 WordPressでユーザーの権限をチェック するための便利なテンプレートタグです。管理者や編集者など、特定のユーザーだけが利用できる機能を 柔軟に制御 することができます。is_user_logged_in()
や wp_get_current_user()
と組み合わせて、 アクセス管理やセキュリティ向上 に役立てることができます。
カスタマイズ例
1