ショウジンブログ on Hatena

“お芝居をしないと、この社会では異邦人として扱われるほかない”

ユーザーの種類と権限によって表示を分ける@WordPress

WordPressサイトにログインしているユーザーの種類によって表示するものを分ける例です。

使いどころとしては、複数人で運用しているWordPressサイトがあって、その投稿やユーザー情報の変更へのリンクを表示(指定する対象に対してのみ)するとか、頻度は多くないですが実際にニーズがあって対応したtipsになります。

たとえば、投稿一覧を出力するループ内に以下のコードを記述すると、指定したユーザーグループに属するユーザーがログインしている状態ではその投稿の編集画面へのリンクが、それ以外には投稿タイトル(ただの文字列)が出力されます。

<?php
$id = get_the_ID(); /* 投稿IDを取得 */
global $current_user;
get_currentuserinfo();
$user = $current_user->user_level; /* ログインしているユーザーの権限レベルを取得 */
if($user >= 7){ /* 編集者グループ以上に属するユーザにのみ出力 */
    echo '<a href="';
    echo home_url('/_wp/wp-admin/post.php?post=');
    echo $id . '&action=edit">';
    the_title();
    echo '</a>';
}else{
    the_title();
};
?>

以下はさらにニッチかもしれませんが、ユーザープロフィールのページ(author.php)で使いました。ユーザーは管理画面から検索して編集画面に進むこともできますが、検索がいまいちで使いにくいということで、それなら実際のユーザープロフィール画面にアクセスして(WordPressサイトにログインしている状態で)そこからそのユーザーの編集画面に進めたほうが早いということで対応しました。

<?php
$user_data = get_userdata($author); // get_userdata関数を使ってユーザ情報を取得
$uid = $user_data->ID;
global $current_user;
get_currentuserinfo();
$user = $current_user->user_level; /* ログインしているユーザーの権限レベルを取得 */
if($user == 10){ /* 管理者グループに属するユーザにのみ出力 */
echo '<div class="go_user-edit"><a href="' . '/wp-admin/user-edit.php?user_id=' . $uid . '">このユーザーの変更画面へ</a></div>';
};
?>

どちらも「いったいいつ?どんな状況で使うの?」と聞かれそうですが、数は少ないですが、実際にニーズがあり、実装の結果、感謝されたカスタマイズです。

WordPressにおけるユーザーの権限グループやログインかどうかを判別する条件文について知っておくと会員制サイトや複数人で運用する場合等、対応の幅が広がるかと思います。

ユーザーの種類とユーザーレベルは以下になります。

管理者(Administrator)
レベル:8、9、10

編集者(Editor)
レベル:5、6、7

投稿者(Author)
レベル:2、3、4

寄稿者(Contributor)
レベル:1

購読者(Subscriber)
レベル:0