ユーザー権限に応じて表示 / 非表示を切り替えたい場合にブロックやウィジェット毎に表示 / 非表示を切り替えることができるプラグインはいろいろとあります。
Elementor 用のものもあるのですが、これまで使用していたものが突然不具合からの仕様変更となり、複数のサイトでの修正作業に追われたこともあり「別にプラグインとか使わなくてもいいじゃん」と以前から思っていたのでオリジナルの仕組みを作成しました。
方法としては
- body タグの class に「loginas-○○」を追加
※○○はユーザー権限グループ名 - スタイルシートに表示 / 非表示のスタイルを追加
- 表示 / 非表示を切り替えるところに、class を指定
function.php
function.php に以下のコードを追加
// body タグの class 属性にユーザー権限グループを追加
function userrole_class( $classes = '' ) {
global $current_user;
$userrole = get_post( get_the_ID() );
$classes[] = 'loginas-' . urlencode( $current_user->roles[ 0 ] );
return $classes;
}
add_filter( 'body_class', 'userrole_class' );
.css
スタイルシートはこんな感じ。
.visible-administrator {
display: none;
}
body.loginas-administrator .visible-administrator {
display: block;
}
body.loginas-administrator .hidden-administrator {
display: none;
}
例えば上記のようにしておけば、管理者権限でログインしている場合、visible-administrator クラスを指定した箇所は表示される(それ以外の場合は非表示)し、hidden-administrator クラスを指定した箇所は非表示となります。
ただし、注意!
この方法だとプラグインも不要でシンプルなのですが、あくまでもブラウザ表示制御なので、ページのソースコードには(表示されない)コンテンツが書かれています。
よって、有料コンテンツの制御や、会員のみ表示するコンテンツなどの管理には用いるべきではありませんね。