会員ログイン機能付きのサイトを制作していて、ユーザーの権限によって表示の切り分けをしたいときの方法を調べてみました。
ログインした会員のみにコンテンツの表示をする処理は、比較的簡単に実装できるのですが、ログインした会員に管理画面を見せないようにするには、ひと手間掛ける必要があるようです。
「has_cap」は非推奨
ググって調べてみたところ、「has_cap関数」を使用して切り分ける方法が見つかったのですが、どうもこの関数はすでに非推奨のようです。つまりこの関数を使っていると、Wordpress本体のバージョンアップによって、エラーを吐いてサイトが表示されなくなる未来が待っています。
「user_can」「current_user_can」で切り分ける
「user_can」や「current_user_can」を使うと良さそうです。
いろいろやり方はありますが、「購読者」などの権限グループ名ではなく、ユーザーが持つ権限で切り分けた方が安心できそうです。権限グループは権限の内容をカスタイマイズしたり、新しく定義することも出来るからです。
今回は、ユーザーが記事を投稿する権限「edit_posts」を持つかどうかで切り分けることにしてみました。
以下のコードを functions.php に記述すると、記事を投稿する権限を持たないユーザー、つまり標準の権限グループ名で言うところの「購読者」は、ログインはできるけれども、管理画面には入れず、かつヘッダーのツールバーも表示されなくなります。
// 購読者がダッシュボードにアクセスできないようにする
add_action( 'auth_redirect', 'subscriber_go_to_home' );
function subscriber_go_to_home( $user_id ) {
if ( !user_can( $user_id, 'edit_posts' ) ) {
wp_redirect( get_home_url() );
}
}
// 購読者のツールバーを非表示にする
add_action( 'after_setup_theme', 'subscriber_hide_admin_bar' );
function subscriber_hide_admin_bar() {
if ( !current_user_can( 'edit_posts' ) ) {
show_admin_bar( false );
}
}
どっちでも良い話ですが、Wordpressのスペースを空けまくるコーディングスタイルにいまだに慣れない…。
ホームページの制作(デザイン・コーディング・プログラミング)に加え、ネットショップの販売促進に関するアドバイスも致します。 20年以上に渡って実際にネットショップを運営した経験を生かし、聞きかじりではない実績を伴ったノウハウを、自分の言葉でお伝えいたします。 プログラミングの経験は30年以上。HTML、CSS、JavaScript、TypeScript、Vue、NuxtJS、Node.js、MySQL、MongoDB、Elasticsearch、WordPress、PHP、Docker、Electronなど、幅広く対応します。
コメント
[…] jQuery( document ).ready( function($ ) { jQuery( '#bsc-slideshow').nivoSlider({ effect: 'random', directionNav: true, controlNav: true, } ); } ); […]