current_user_can()の使い方と権限チェックの基本

WordPressで「特定のユーザーだけに機能を使わせたい」ときに欠かせないのが、current_user_can() 関数です。
管理者のみ、投稿者のみ、ログインユーザーのみ、などの条件分岐を実現できます。
本記事では、
この関数の基本構文から実践的な使い方、
そして「権限チェック」の正しい考え方までを丁寧に解説します。
Contents
current_user_can()とは?
current_user_can() は、
「現在ログインしているユーザーが、特定の権限(またはロール)を持っているかを判定する」
ための関数です。
基本構文
if ( current_user_can( '権限名' ) ) {
// 権限を持つユーザーの処理
} else {
// 権限を持たないユーザーの処理
}代表的な権限(capability)一覧
| 権限名 | 意味 | 使えるユーザー例 |
|---|---|---|
manage_options | 設定を管理できる | 管理者 |
edit_posts | 投稿の編集ができる | 投稿者以上 |
publish_posts | 投稿を公開できる | 投稿者以上 |
edit_others_posts | 他人の投稿を編集できる | 編集者以上 |
delete_users | ユーザー削除ができる | 管理者 |
upload_files | 画像やファイルのアップロードができる | 投稿者以上 |
read | 投稿を閲覧できる | すべてのログインユーザー |
👉 ロール(role)ごとにどの権限を持つかは、
WordPressのユーザー権限とロールの基本
の記事で詳しく解説しています。
実践例1:管理者だけが実行できる処理
管理画面のカスタマイズや設定ページなどでよく使うパターンです。
if ( current_user_can( 'manage_options' ) ) {
echo 'あなたは管理者です。設定を変更できます。';
} else {
echo 'この操作を行う権限がありません。';
}実践例2:投稿者以上のみアップロード可能にする
たとえば、画像アップロードボタンを投稿者以上のみに表示したい場合:
if ( current_user_can( 'upload_files' ) ) {
echo '<button>画像をアップロード</button>';
}実践例3:ショートコードやテンプレート内での利用
テーマファイル(single.php など)でも利用可能です。
<?php if ( current_user_can( 'edit_posts' ) ) : ?>
<a href="<?php echo get_edit_post_link(); ?>">この記事を編集</a>
<?php endif; ?>このように、
「編集できるユーザーだけに編集リンクを表示」
といった細やかな制御が簡単に行えます。
非ログインユーザーとの違い
current_user_can() は ログインユーザー専用 の関数です。
未ログイン状態では常に false を返します。
そのため、次のようにis_user_logged_in() と組み合わせるのが安全です。
if ( is_user_logged_in() && current_user_can( 'edit_posts' ) ) {
echo 'ようこそ、投稿者さん!';
}👉 ログイン状態をチェックする関数については、
is_user_logged_in()の使い方とログイン状態の条件分岐
もあわせてご覧ください。
管理画面で権限をテストする方法
- テストユーザーを作成
管理画面 → 「ユーザー」 → 「新規追加」から、
「投稿者」や「編集者」といったロールを選んで作成します。 - 別ブラウザでログイン
それぞれのユーザーでログインして、
自作テーマやプラグインの動作を確認します。 - User Role Editorプラグイン
権限を自由に追加・削除して動作検証するのに便利です。
よくある間違い
| よくある書き方 | 問題点 |
|---|---|
if ( current_user_can( 'editor' ) ) | ❌ ロール名を直接指定しても判定されない(正しくはcapability) |
if ( current_user_can( 'administrator' ) ) | ❌ 同上。ロールではなく権限名で指定する必要あり |
if ( !current_user_can( 'read' ) ) | ❌ 未ログインユーザーでは常にfalseなので注意 |
まとめ
| ポイント | 内容 |
|---|---|
current_user_can() | 現在のユーザーが指定した権限を持つか判定 |
| 引数 | 「ロール名」ではなく「権限名(capability)」を指定 |
| 非ログイン時 | 常に false(is_user_logged_in() と併用推奨) |
| 主な用途 | 管理画面のアクセス制限、テーマ表示制御、ショートコード条件分岐など |
関連記事
- is_user_logged_in()の使い方とログイン状態の条件分岐
- WordPress条件分岐タグの基本まとめ【初心者向け】
- is_single()とis_page()の違いをやさしく解説
- WordPressのユーザー権限とロールの基本
- functions.phpに条件分岐を書くときの注意点
まとめコード(テンプレート化例)
<?php
// 管理者専用処理
if ( current_user_can( 'manage_options' ) ) {
// 管理者限定の処理
}
// 投稿者以上(ファイルアップロード可)処理
elseif ( current_user_can( 'upload_files' ) ) {
// 投稿者・編集者用処理
}
// ログインしていないユーザー
else {
echo 'このページを閲覧する権限がありません。';
}
?>このように current_user_can() を理解しておくと、
自作テーマや管理画面のセキュリティを格段に向上できます。

