WordPress でログインユーザによる条件分岐

今回はちょっと小ネタで、WordPress でログインユーザによる分岐処理をどう入れるのかな?と思って調べたことをちょっとまとめておきます。

管理画面のメニューの権限グループごとの表示・非表示のなどはプラグインを使った方が早く実現できそうですけど、例えば

  • 管理画面ログイン時にブログに記事を投稿できる権限を持つユーザに対してダッシュボードなどにメッセージを表示したい

とかもっと分かりやすい例だと、

  • ブログ記事を書いてプレビューした際に header.php に Googleアナリティクス のコードが埋まってるせいでアクセス解析の計測対象になっちゃうw

というケースをなんとかしたいってのが主なユースケースでしょうか。

結論から行きますと、

WordPressでユーザー情報で条件分岐
下北沢オープンソースCafeのWordPress部のUSTREAMを聞いていた中で出てきた「ユーザー」による条…

にほぼ全部書いてありました。

冒頭に挙げたユースケースの内、分かりやすい後者の場合でログインユーザ == サイト運営者ですと、単純に header.php へ

<?php if ( !is_user_logged_in() ): ?>
<!-- GoogleアナリティクスのJSコードなどログイン中のプレビュー時に出力したくない任意の内容 -->
<?php endif; ?>

みたいな感じで(管理画面へ)ログインしてる場合は公開側ページにアクセス(プレビュー表示含む)しても出力したくない任意の内容を非表示にできます。

会員制サイトなどログインユーザがサイト運営者とは限らないケースだと別の WordPress 関数を利用する必要があるのですが、サイトの会員かサイト運営者かを WordPress のデフォルト権限グループで管理してる場合は、

<?php if ( !is_user_logged_in() or current_user_can('subscriber') ): /* subscriber == 権限グループ「購読者」 */ ?>
<!-- GoogleアナリティクスのJSコードなど非ログインユーザや権限グループ「購読者」のユーザに表示する内容 -->
<?php endif; ?>

で任意の権限グループのみ表示する、あるいは and 条件で任意の複数の権限グループのみ非表示とかで条件分岐させることができますし、

<?php if ( !current_user_can('edit_posts') ): ?>
<!-- GoogleアナリティクスのJSコードなどログイン中のプレビュー時に出力したくない任意の内容 -->
<?php endif; ?>

のように指定した権限を持つユーザのみ表示する(もしくは表示しない)などの指定の仕方もあります。

権限や権限グループは ユーザーの種類と権限 – WordPress Codex 日本語版 の表でまとめられています。権限や権限グループの詳細については同じページの前後を合わせてご確認いただければ。

あと current_user_can() について補足ですが、前に紹介しました WordPressでユーザー情報で条件分岐 – Gatespace’s Blog では

日本語Codexでは引数に「権限グループ(Role)」でも可能なように書いてありいますが、本家Codexでは「権限(Capabilities)」のみとなっています。

とありますが、

$capability
(string) (required) Role or capability.

Default: None

と、現在の本家Codexでも権限グループの指定を受け付ける旨が記載されていますので、WordPressのアップグレードとともに「権限グループでの指定がっ?!」ってことはなさそうです(但しこの件に限らず仕様変更など発生する場合は一旦非推奨になる旨が告知されるので、WordPressを使う限りそうした情報はなるべく常日頃から追っておきたいところですが)。