会員サイトにおいて、会員(購読者)のログイン後にダッシュボードへ行かせず、任意のページへリダイレクトさせる方法です。
プラグインなどによりウィジェットや任意のページからログインしてもらう場合は良いのですが、WordPressの通常のログインページからログインするとプロフィールページに遷移してしまいます。
遷移しても良いように、権限ごとに管理画面自体をカスタマイズする方法もありますが、管理者以外のダッシュボードの必要性が特にない場合は、リダイレクトさせるほうが手っ取り早いです。
いろいろ模索し、使用するアクションフックによってはプラグインの動作に影響を与える場合もありましたが、最良の方法を見つけました。
まず試したのは functions.php に記す下記のコードです。
PHP
<?php if ( !is_super_admin() ) { add_action( 'admin_init', 'redirect_dashboard' ); } function redirect_dashboard() { $path = $_SERVER['SCRIPT_NAME']; if ( strpos( $path, '/wp/wp-admin/' ) !== false ) { wp_redirect( home_url() ); } } ?>
管理者以外が管理画面にアクセスするとホームURLにリダイレクトするというものですが、これにより、一部プラグインが正常に動作しなくなりました。
具体的には、プラグイン「Easy Digital Downloads」において、管理者ログイン以外の場合に「カートに追加」をクリックすると、そのままフリーズしてしまう状況に陥りました。
アクションフック admin_init との相性が悪かったのではないかと考えています。
それで、最終的にたどり着いたのが下記のコードです。
PHP
<?php add_action( 'auth_redirect', 'subscriber_go_to_home' ); function subscriber_go_to_home( $user_id ) { $user = get_userdata( $user_id ); if ( !$user->has_cap( 'edit_posts' ) ) { wp_redirect( get_home_url() ); exit(); } } ?>
アクションフック auth_redirect を用いたコードです。
get_userdata関数でユーザー情報を取得し、edit_posts権限(投稿編集)を持たないユーザー(購読者)はホームURLへリダイレクトさせます。
以下のページを参考にさせていただきました。
https://elearn.jp/wpman/column/c20131112_01.html
コメント