下北沢オープンソースCafeのWordPress部のUSTREAMを聞いていた中で出てきた「ユーザー」による条件分岐について、その場で思いつく関数は出てきたのですが、短文では情報を提供しきれなかったので書いておきます。
目次
WordPressにログインしているかどうか
<?php if ( is_user_logged_in() ) { // ログインしているとき echo 'Welcome, registered user!'; } else { // そうじゃないとき echo 'Welcome, visitor!'; } ?>
- 使い方:
is_user_logged_in()
- 戻り値:ログインしていれば true、そうでなければ false
- 本家Codex : Function Reference/is user logged in
- 日本語Codex : 関数リファレンス/is user logged in
ユーザー権限による分岐
※ユーザーレベルによる分岐方法もありますが、WordPress 3.0以降で非推奨となっていますので、ここでは紹介しません。
<?php if ( current_user_can('moderate_comments') ) { // コメント承認の権限があるなら echo 'The current user can moderate comments'; } ?>
- 使い方:
<?php current_user_can( $capability, $args ); ?>
- 戻り値:ユーザーがその権限を持っていれば true、そうでなければ false
- 本家Codex : Function Reference/current user can
- 日本語Codex : 関数リファレンス/current user can
- 他にマルチサイトで使える current_user_can_for_blog という関数もあります。
日本語Codexでは引数に「権限グループ(Role)」でも可能なように書いてありいますが、本家Codexでは「権限(Capabilities)」のみとなっています。
実際に wp-includes/capabilities.php のコメント見てみると $capability Capability or role name となっていて Role でも大丈夫なようで、実際にWordPress3.4.2では
<?php if ( current_user_can('subscriber') ) { // 購読者(Subscriber) = subscriber なら echo 'Subscriber!'; } ?>
でも true を返しました。
あわせてユーザー権限についても参照してください。
- 本家Codex : Roles and Capabilities
- 日本語Codex : ユーザーの種類と権限
各ユーザー情報による分岐
もっと細かく、ユーザーIDや名前などのユーザー情報で分岐を行う場合。
<?php global $current_user; get_currentuserinfo(); if ($current_user->ID == "1" ) { echo 'User display name: ' . $current_user->display_name . "n"; } ?>
- 本家Codex : Function Reference/get currentuserinfo
- 日本語Codex : 関数リファレンス/get currentuserinfo
元々、get_currentuserinfo() はログインしているユーザーの情報を取得する関数です。条件分岐以外にも使えます。また、Codexにあるように、ほとんどの情報はグローバル変数に格納されていますので、直接参照することも可能です。
他にも、ユーザーIDを取得する get_current_user_id などがあります。