質問: 掲題の件を解決したいのですが、このような記述をすればよいでしょうか? 下記のサイトを参考にしているのですが、 寄稿者、投稿者だけダッシュボードを非表示にする方法がわからなく試行錯誤しております。 http://htdsn.com/blog/archives/wordpress-admin-customize.html 『やったこと』 User Role Editorというプラグインを使用し、 寄稿者権限でダッシュボードの編集項目のチェックマークをはずし、 ログインしても表示されてしまします。 また、権限関係なくダッシュボード非表示の関数をfunction.phpに書いても表示されてしまいます。 ・書いたコード function remove_menus() { remove_menu_page('index.php'); // ダッシュボード ・ダッシュボードが表示されている図 ![イメージ説明](https://teratail.storage.googleapis.com/uploads/contributed_images/62b2d242a29f8f24e6a15c0b1dbaf8a1.png) どのようにすれば寄稿者、投稿者だけダッシュボードが非表示になるのかご教示いただければありがたいです。
回答: remove_menu_page() 関数は、ページを削除する関数ではなく、メニューを非表示にする関数です。メニューを非表示にしているだけですので、URL を直接叩けばアクセス可能です。 実装方法として、投稿者以下の権限の場合、ダッシュボードにはアクセスできないようにし、メニューからダッシュボードを非表示にしてしまえばよいかと思います。現在のユーザーの権限は current_user_can() 関数で調べることができます。どのユーザーにどの権限が与えられているかは、ユーザーの種類と権限 をご覧ください。 以下に、簡単な実装例を示します。 ``` /** * 投稿者以下の場合、ホームへリダイレクトさせる * * @global string $pagenow */ function teratail56939_admin_redirect() { global $pagenow; if ( 'index.php' === $pagenow && ! current_user_can( 'edit_others_posts' ) ) { wp_safe_redirect( home_url() ); } } add_action( 'admin_init', 'teratail56939_admin_redirect' ); /** * 投稿者以下の場合、メニューからダッシュボードを非表示にする */ function teratail56939_admin_remove_menus() { if ( ! current_user_can( 'edit_others_posts' ) ) { remove_menu_page( 'index.php' ); } } add_action( 'admin_menu', 'teratail56939_admin_remove_menus' ); ``` teratail56939_admin_redirect() 関数内の `wp_safe_redirect( home_url() )` の部分を変更すれば、リダイレクト先を変更することができます。例えば、`wp_safe_redirect( admin_url( 'profile.php' ) )` とした場合、プロフィールの編集画面にリダイレクトされます。