下北沢オープンソース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 などがあります。