WordPressで会員ユーザーと非会員ユーザーとで見せる内容を分ける


いよいよシーズンに入り、毎週試合だ練習だと写真撮りまくりで、写真の整理が追いつかなくて、少年野球の非オフィシャルサイトの更新に影響うけています。
写真撮ったものを整理して、Photoshopで修正して、試合のレビュー書いて、アップして。ってやってると大変。

でも勝手に自分がやってるんで仕方ないんですけどね。

そのサイトの一部コンテンツを、会員と非会員とで閲覧させる内容を変えたくて、いろいろと調べてみたので、その方法をメモです。

目次

  1. WordPressでログインユーザーと非ログインユーザーとを条件分岐
  2. ユーザー権限で条件分岐
  3. こんな時に使えます
  4. まとめ

WordPressでログインユーザーと非ログインユーザーとを条件分岐

まず先にコードから書いておきます。

「ログインしている」「ログインしていない」という条件分岐は意外と簡単で、WordPressの関数にあるんです。

is_user_logged_in();

参考:関数リファレンス/is user logged in – WordPress Codex 日本語版

これでログインしているか、していないかの判断が出来るので

if( is_user_logged_in() ) {
  //ログインしている時の処理
}
else {
  //ログインしていない時の処理
}

となります。

簡単ですね。

ユーザー権限で条件分岐

ただ今回の場合はちょっと条件が複雑で。
勝手に会員登録してもらえるサイトなんですが、その一部ユーザーのみを「購読者」ではなく「投稿者」権限に、こちら側で変更する必要がありまして。

権限が違う場合、見せる内容も変化させたかったんです。

ユーザーの情報を取得する関数がないか見ていると「get_currentuserinfo」という関数を見つけたんですが、非推奨となったようで。
参考:関数リファレンス/get currentuserinfo – WordPress Codex 日本語版

更に探してみると、「wp_get_current_user()」という関数で同じようにユーザーの情報を取得できるようです。
参考:wp_get_current_user:WordPress私的マニュアル

$user_data = wp_get_current_user();

かなりたくさんの情報が手に入ってしまいました。

ここから権限に関する記述を探すんですが、「caps」もしくは「roles」あたりでしょうか。
(権限ではなく、ロールというべきなんですね…)

$user_data = wp_get_current_user();
$user_caps_array = array_keys($userinfo->caps);
$user_caps = $user[0];

//これでユーザーロールが手に入るので、ここから

if( $user_caps == "administrator" ) {
  //管理者のとき
}
elseif( $user_caps == "editor" ) {
  //編集者のとき
}
elseif( $user_caps == "author" ) {
  //投稿者のとき
}
elseif( $user_caps == "contributor" ) {
  //寄稿者のとき
}
else {
  //それ以外(購読者)のとき
}

これでユーザーロールでの条件分岐ができました。

こんな時に使ってます

これらの条件分岐を使ってやったこととは、顔写真の有無です。
少年野球やってる写真なので、子どもたちの顔がバシバシ映るわけですが、さすがにそれを勝手に公開するのはまずいと思っています。

「もし、万が一、何かが起こってからでは遅い」

というのが理由です。

「そんな大げさに考え過ぎ」と思う人もいるかもしれませんが、僕個人的には自分以外の人が写ってる写真を勝手にネット上にアップするなんてありえません。
ましてやタグ付けとか…

そこでログインしたユーザー、権限が一定以上のユーザーにのみ、顔が写っている写真が見られるようにしました。

まとめ

ネット上に写真をアップする以上、絶対にもれないようにするには不可能に近いですが、なるべく他人の目に触れる機会を減らす努力はしておきたいですよね。

もし、あなたが特に子どもたちの顔が写っている写真をアップする必要があるなら、その辺気をつけたほうがいいかもしれませんね。

そのときに、このカスタマイズを思い出してもらって、役に立てば…

今後もなるべく安全に写真を管理、公開する方法を探していきます。

そいぎ~


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA