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

WordPressのcurrent_user_can()でユーザー権限をチェックするイメージ
WordPressのcurrent_user_can()を使った権限チェックの基本をわかりやすく図解

WordPressで「特定のユーザーだけに機能を使わせたい」ときに欠かせないのが、
current_user_can() 関数です。
管理者のみ、投稿者のみ、ログインユーザーのみ、などの条件分岐を実現できます。

本記事では、
この関数の基本構文から実践的な使い方、
そして「権限チェック」の正しい考え方までを丁寧に解説します。

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()の使い方とログイン状態の条件分岐
もあわせてご覧ください。

管理画面で権限をテストする方法

  1. テストユーザーを作成
    管理画面 → 「ユーザー」 → 「新規追加」から、
    「投稿者」や「編集者」といったロールを選んで作成します。
  2. 別ブラウザでログイン
    それぞれのユーザーでログインして、
    自作テーマやプラグインの動作を確認します。
  3. 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() と併用推奨)
主な用途管理画面のアクセス制限、テーマ表示制御、ショートコード条件分岐など

関連記事

まとめコード(テンプレート化例)

<?php
// 管理者専用処理
if ( current_user_can( 'manage_options' ) ) {
    // 管理者限定の処理
}

// 投稿者以上(ファイルアップロード可)処理
elseif ( current_user_can( 'upload_files' ) ) {
    // 投稿者・編集者用処理
}

// ログインしていないユーザー
else {
    echo 'このページを閲覧する権限がありません。';
}
?>

このように current_user_can() を理解しておくと、
自作テーマや管理画面のセキュリティを格段に向上できます。