MENU

current_user_can()– Function –

current_user_can() は、 現在のユーザーが特定の権限やロールを持っているか確認する テンプレートタグです。管理画面へのアクセス制御や、特定の機能を特定ユーザーのみが利用できるようにする場合に使用されます。

目次

機能の説明

  • WordPressユーザーの権限やロール(例:administratoreditor)をチェックします。
  • 投稿の編集やプラグインの管理といった 特定の機能にアクセスできるかどうか を判定するために使います。
  • よく使われる権限例:edit_postsmanage_optionspublish_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

想定されるトラブル

権限が正しく判定されない

  • 権限のキャッシュが残っている可能性があります。
  • カスタム権限が 正しく登録されていない 場合もあります。

解決方法

  1. キャッシュをクリア して、再度チェックします。
  2. add_role()add_cap() を使い、カスタム権限を再登録します。

ユーザーが正しくログアウトできない

セッション管理に問題がある場合、 ログアウトが正常に反映されない ことがあります。

解決方法

  1. Cookieを削除 して再ログインします。
  2. wp_logout() を使ってセッションを強制終了します。

Q&A

current_user_can() で複数の権限をチェックできますか?

いいえ、current_user_can()一度に1つの権限のみ をチェックします。複数の権限を確認したい場合は if 文を組み合わせて条件分岐 します。

if (current_user_can('edit_posts') || current_user_can('publish_posts')) {
    echo '投稿を編集または公開できます。';
}

なぜ current_user_can() を使うべきですか?

直接的なユーザーチェック(例: ロールの確認)を避け、 WordPressのAPIを使って権限をチェックすることが推奨 されるためです。将来のバージョン変更にも対応しやすくなります。

管理者(Administrator)のみが利用できる操作を制限するには?

current_user_can('manage_options') を使うことで、 管理者のみにアクセスを制限 できます。

まとめ

current_user_can() は、 WordPressでユーザーの権限をチェック するための便利なテンプレートタグです。管理者や編集者など、特定のユーザーだけが利用できる機能を 柔軟に制御 することができます。is_user_logged_in()wp_get_current_user() と組み合わせて、 アクセス管理やセキュリティ向上 に役立てることができます。

カスタマイズ例

1