MENU

current_user_can()

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

目次

機能の説明

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

スクロールできます
引数説明
$capabilitystring|intチェックする権限(capability)または役割(role)の名前。
$argsmixed権限チェックに追加で渡す引数。例:投稿IDなど。
スクロールできます
戻り値説明
boolbool現在のユーザーが指定された権限を持っている場合は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

想定されるトラブル

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

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

解決方法

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

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

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

解決方法

  1. Cookieを削除 して再ログインします。
  2. 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() で複数の権限をチェックできますか?

いいえ、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') を使うことで、 管理者のみにアクセスを制限 できます。

管理者ユーザーは常に true を返しますか?

ほとんどの標準的な権限に対しては true になりますが、権限名によっては異なります。

非ログインユーザーでも使えますか?

使えますが、常に false が返ります。ログインチェックを忘れずに。

カスタム投稿タイプに対応していますか?

はい。edit_post などに 投稿ID を渡すことで、投稿タイプを問わずチェック可能です。

まとめ

current_user_can() は、 WordPressでユーザーの権限をチェック するための便利なテンプレートタグです。管理者や編集者など、特定のユーザーだけが利用できる機能を 柔軟に制御 することができます。

is_user_logged_in()wp_get_current_user() と組み合わせて、 アクセス管理やセキュリティ向上 に役立てることができます。

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

目次