WordPress : プラグインを使わずユーザーの管理機能権限を変更する

権限編集するプラグインは色々ありますが、プラグインを使わずに functions.php だけで必要最低限にやる方法です。

要件

「投稿者」権限のユーザーがWordPressにログインした際、以下のように管理画面の機能を制限する。

  • ダッシュボードの「アクティビティ」や「WordPressブログ」など不要なウィジェットを非表示にする
  • 画像アップロード機能を使わせない
  • 左メニューから「ツール」を消す
  • 投稿画面から本文欄と「タグ」以外を非表示にする

functions.php の編集

//投稿者の画像アップ権限を削除
function remove_theme_caps(){
    //投稿者
    $role = get_role( 'author' );
    $caps = array(
        'upload_files', //ファイルアップロード
    );
    foreach ( $caps as $cap ) {
        $role->remove_cap( $cap );
    }
}
add_action( 'admin_init', 'remove_theme_caps' );

//投稿者の管理画面表示を制限
if (current_user_can('author')) {
    //管理メニューから「ツール」非表示
    function remove_menus () {
        global $menu;
        unset($menu[75]); // ツール
    }
    add_action('admin_menu',   'remove_menus');

    //ダッシュボードの不要項目削除
    function example_remove_dashboard_widgets() {
        global $wp_meta_boxes;
        unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_incoming_links']); // 被リンク
        unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_plugins']); // プラグイン
        unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_activity']); // アクティビティ
        unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_quick_press']); // クイック投稿
        unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_primary']); // WordPressブログ
        unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_secondary']); // WordPressフォーラム
    }
    add_action('wp_dashboard_setup', 'example_remove_dashboard_widgets');

    //投稿画面の不要項目削除
    function my_remove_meta_boxes() {
        remove_meta_box('authordiv', 'post', 'normal'); // 投稿者
        remove_meta_box('categorydiv', 'post', 'normal'); // カテゴリー
        remove_meta_box('commentstatusdiv', 'post', 'normal'); // ディスカッション
        remove_meta_box('commentsdiv', 'post', 'normal'); // コメント
        remove_meta_box('formatdiv', 'post', 'normal'); // フォーマット
        remove_meta_box('pageparentdiv', 'post', 'normal'); // ページ属性
        remove_meta_box('postcustom', 'post', 'normal'); // カスタムフィールド
        remove_meta_box('postexcerpt', 'post', 'normal'); // 抜粋
        remove_meta_box('postimagediv', 'post', 'normal'); // アイキャッチ
        remove_meta_box('revisionsdiv', 'post', 'normal'); // リビジョン
        remove_meta_box('slugdiv', 'post', 'normal'); // スラッグ
        remove_meta_box('trackbacksdiv', 'post', 'normal'); // トラックバック
    }
    add_action('admin_menu', 'my_remove_meta_boxes');
}