ワードプレスで特定の権限のユーザーに特定の管理画面のメニューだけを表示するPHPコードをご紹介します。このコードは寄稿者にダッシュボードを表示しないようにするなどの場合に使用できます。

寄稿者のワードプレス管理画面のメニューを ’メディア’,’投稿’,’プロフィール’ だけ残す

※このコードはテーマのfunctions.phpや作成中のプラグインに記載いただくことで動作いたします。

function change_contribuor_adminmenu () {
    $allowmenu = array("メディア",'投稿','プロフィール'); //表示許可するメニュー名
    global $menu;
    if( current_user_can( 'contributor' ) ) {
        $newmenu = array();
        foreach($menu as $m){
            if(in_array($m[0],$allowmenu)){
                $newmenu []=$m;
            }
        }
        $menu = $newmenu;
    }
}
add_action('admin_menu', 'change_contribuor_adminmenu',99);

コードの解説

このコードでは、admin_menuアクションでメニュー生成時に処理を割り込んで実行します。

$allowmenu = の配列に表示許可する親メニューの名称を記載します。

if( current_user_can( ‘contributor’ ) ) { で寄稿者の場合のみglobal $menu; のメニュー項目を再設定します。

if(in_array($m[0],$allowmenu)){ で配列にある名称の親メニューだけの新しいメニューの配列を創っていきます。

$menu = $newmenu; で最後にワードプレスが出力するメニューを置き換えします。

特定のユーザー権限のログイン後にプロフィールにリダイレクトする

上記のコードは、ログイン後にリダイレクトするダッシュボードをメニューから隠してしまっていますので、寄稿者がログインした場合のみプロフィール画面にリダイレクトしてみます。

function login_redirectcontributor( $redirect_to, $request, $user ){
    if ( isset( $user->roles ) && is_array( $user->roles ) ) {
        if ( in_array( 'contributor', $user->roles )) {
             $redirect_to = admin_url("profile.php");
        }
    }
    return $redirect_to;
}
add_filter( 'login_redirect', 'login_redirectcontributor', 99, 3 );

このコードではadd_filter( ‘login_redirect’で、ログイン後のリダイレクト先を寄稿者の場合のみプロフィール画面に変更していす。

参考になりましたら幸いです。

WordPress ワードプレスの管理画面のカスタマイズやバグの修正のご依頼・ご相談はWPドクターまでお気軽にお送りください