回答編集履歴

1 誤字

kuck1u

kuck1u score 1254

2016/11/29 14:12  投稿

remove_menu_page() 関数は、ページを削除する関数ではなく、メニューを非表示にする関数です。メニューを非表示にしているだけですので、URL を直接叩けばアクセス可能です。
実装方法として、投稿者以下の権限の場合、ダッシュボードにはアクセスできないようにすし、メニューからダッシュボードを非表示にしてしまえばよいかと思います。現在のユーザーの権限は current_user_can() 関数で調べることができます。どのユーザーにどの権限が与えられているかは、[ユーザーの種類と権限](https://wpdocs.osdn.jp/%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%81%AE%E7%A8%AE%E9%A1%9E%E3%81%A8%E6%A8%A9%E9%99%90) をご覧ください。
実装方法として、投稿者以下の権限の場合、ダッシュボードにはアクセスできないようにし、メニューからダッシュボードを非表示にしてしまえばよいかと思います。現在のユーザーの権限は current_user_can() 関数で調べることができます。どのユーザーにどの権限が与えられているかは、[ユーザーの種類と権限](https://wpdocs.osdn.jp/%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%81%AE%E7%A8%AE%E9%A1%9E%E3%81%A8%E6%A8%A9%E9%99%90) をご覧ください。
以下に、簡単な実装例を示します。
```php
/**
* 投稿者以下の場合、ホームへリダイレクトさせる
*
* @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' ) )` とした場合、プロフィールの編集画面にリダイレクトされます。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る