WordPressを会員制サイトなどのログイン前提の目的で使用していると、特定の権限を持つユーザーのみに表示したい情報が出てきます。
例えば、
- メルマガを購入している会員に向けてお知らせを表示したい
- 会員の価格プランによって、表示する内容を変更したい
などです。
今回は対象のページを固定ページで作成している前提で、その内容をWordPressの権限によって制御してみます。
固定ページの作成
固定ページで段落などの要素を選択すると右ペインの「ブロック」タブの一番下に「高度な設定」の中に「追加 CSS クラス」があります。ここに表示したいユーザの権限を入力しておくことで出力を制御できます。
以下の例ですと、ログインユーザの権限がadministrator、editorの場合は概要の要素のHTMLが出力され、それ以外の権限の場合、削除されます。
ワードプレスの権限
WordPressの権限は以下があります。
今回はWordPressの権限を使用していますが、会員の価格プランなどでもカスタムフィールド等から取得できるものであれば、問題ありません。
アクションフィルターを実装
HTMLコンテンツを置換するアクションフィルターをfunctions.phpに実装することで実現できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | // /hoge/ページの時に置換を実行 if ( strpos ( $_SERVER [ 'REQUEST_URI' ], '/hoge/' )) { add_action( 'init' , function () { ob_start(); }); add_action( 'shutdown' , function () { $final = '' ; $levels = ob_get_level(); for ( $i = 0; $i < $levels ; $i ++) { $final .= ob_get_clean(); } echo apply_filters( 'change_content_filter' , $final ); }, 0); } add_filter( 'change_content_filter' , function ( $content ) { // ログインユーザの権限を取得 if ( current_user_can( 'administrator' ) ) { $role = 'administrator' ; } elseif ( current_user_can( 'editor' ) ) { $role = 'editor' ; } elseif ( current_user_can( 'author' ) ) { $role = 'author' ; } elseif ( current_user_can( 'contributor' ) ) { $role = 'contributor' ; } elseif ( current_user_can( 'subscriber' ) ) { $role = 'subscriber' ; } else { $role = 'not_login' ; } // ログインユーザの権限がCSSのクラスとして存在すればその箇所のHTMLを出力、しなければ削除 $content = preg_replace( "#<p (?=.*role-){1,}(?!.*role-$role).*\">(.*?)</p>#is" , "" , $content ); return $content ; }); |