PHP
WordPress

WordPress 管理画面カスタマイズまとめ

本来ならば管理者ではないユーザーに管理画面は公開したくないものですが、それでも、という場合のカスタマイズ用コードで主なものをまとめました。
使用中のテーマのfunction.phpに貼り付けるなどして使ってください。

管理者かどうかの判定には current_user_can( 'administrator' ), current_user_can( 'manage_options' ) などが使用できます。

機能の制限

ダッシュボードからリダイレクト

function redirect_dashboard() {
    global $pagenow;
    if ( is_admin() && 'index.php' == $pagenow ) {
        wp_redirect( admin_url( 'edit.php' ) );
    }
}
add_action( 'admin_init', 'redirect_dashboard' );

バージョン更新

// バージョン更新を非表示
add_filter( 'pre_site_transient_update_core', '__return_zero' );
// APIによるバージョンチェックの通信をさせない
remove_action( 'wp_version_check', 'wp_version_check' );
remove_action( 'admin_init', '_maybe_update_core' );

機能の非表示

ようこそ画面の非表示

remove_action( 'welcome_panel', 'wp_welcome_panel' );

メニュー項目非表示

function remove_menus(){
    remove_menu_page( 'index.php' );                  // ダッシュボード
    remove_menu_page( 'edit.php' );                   // 投稿
    remove_menu_page( 'upload.php' );                 // メディア
    remove_menu_page( 'edit.php?post_type=page' );    // 固定ページ
    remove_menu_page( 'edit-comments.php' );          // コメント
    remove_menu_page( 'themes.php' );                 // 外観
    remove_menu_page( 'plugins.php' );                // プラグイン
    remove_menu_page( 'users.php' );                  // ユーザー
    remove_menu_page( 'tools.php' );                  // ツール
    remove_menu_page( 'options-general.php' );        // 設定

    remove_submenu_page( 'themes.php', 'widgets.php' );  // 外観->ウィジェット
}
add_action( 'admin_menu', 'remove_menus' );

管理バーの非表示

add_filter( 'show_admin_bar', '__return_false' );

管理バーの項目の非表示

function remove_admin_bar_menus( $wp_admin_bar ) {
    $wp_admin_bar->remove_node( 'wp-logo' );            // WordPressマーク
    $wp_admin_bar->remove_node( 'view-site' );          // サイトを表示
    $wp_admin_bar->remove_node( 'dashboard' );          // ダッシュボード
    $wp_admin_bar->remove_node( 'comments' );           // コメント
    $wp_admin_bar->remove_menu( 'updates' );            // 更新
    $wp_admin_bar->remove_node( 'my-account' );         // マイアカウント
}
add_action( 'admin_bar_menu', 'remove_admin_bar_menus', 100 );

ヘルプと表示オプションを非表示

ヘルプと表示オプションは画面右上にあります。

function hide_help_and_options(){
    echo '<style type="text/css">'.
        '#contextual-help-link-wrap,'.
        '#screen-options-link-wrap'.
        '{display:none;}</style>'.PHP_EOL;
}
add_action( 'admin_head', 'hide_help_and_options' );

投稿画面のメタボックスの非表示

// 投稿画面から不要な機能を削除
function my_remove_meta_boxes() {
    remove_meta_box( 'postexcerpt', 'post', 'normal' );         // 抜粋
    remove_meta_box( 'trackbacksdiv', 'post', 'normal' );       // トラックバック
    remove_meta_box( 'slugdiv', 'post', 'normal' );             // スラッグ
    remove_meta_box( 'postcustom', 'post', 'normal' );          // カスタムフィールド
    remove_meta_box( 'commentsdiv', 'post', 'normal' );         // コメント
    remove_meta_box( 'postimagediv', 'post', 'normal' );        // アイキャッチ画像
    remove_meta_box( 'tagsdiv-post_tag', 'post', 'normal' );    // タグ
    remove_meta_box( 'commentstatusdiv', 'post', 'normal' );    // ディスカッション
    remove_meta_box( 'authordiv', 'post', 'normal' );           // 作成者
    remove_meta_box( 'revisionsdiv', 'post', 'normal' );        // リビジョン
    remove_meta_box( 'formatdiv', 'post', 'normal' );           // フォーマット
    remove_meta_box( 'pageparentdiv', 'post', 'normal' );       // 属性
}
add_action( 'admin_menu', 'my_remove_meta_boxes' );

remove_meta_boxを用いてディスカッションを消すと、投稿へのコメントが無効になる場合があります。コメントできるようにするには下のようにします。

// コメント設定を隠す
function hide_disscussion() {
    echo '<style type="text/css">'.
        '#commentstatusdiv{display: none;}'.
        '</style>'.PHP_EOL;
}
add_action( 'admin_print_styles-post.php', 'hide_disscussion' );
add_action( 'admin_print_styles-post-new.php', 'hide_disscussion' );

これ以外にも投稿における機能そのものを削ることができます。

function my_remove_post_type_support() {
    remove_post_type_support( 'post', 'thumbnail' );        // アイキャッチ画像
    remove_post_type_support( 'post', 'trackbacks' );       // トラックバック
}
add_action( 'init', 'my_remove_post_type_support' );

プロフィール設定の項目の非表示

function my_admin_style() {
    echo '<style type="text/css">'.
        '#your-profile h2,'.
        '#your-profile table:nth-of-type(1),'.  // 個人設定
        '#your-profile table:nth-of-type(4),'.  // あなたについて
        '.user-first-name-wrap,'.               // 名
        '.user-last-name-wrap,'.                // 姓
        '.user-url-wrap,'.                      // ウェブサイト
        '.user-sessions-wrap,'.                 // セッション
        '.user-profile-picture'.                // Gravatar
        '{display: none;}</style>'.PHP_EOL;
}
add_action( 'admin_print_styles-profile.php', 'my_admin_style' );

フッターの非表示

// 管理画面フッターを変更
function custom_admin_footer () {
    echo '';
}
add_filter( 'admin_footer_text', 'custom_admin_footer' );

// 管理画面フッターのバージョン番号を削除
function remove_footer_version() {
    remove_filter( 'update_footer', 'core_update_footer' );
}
add_action( 'admin_menu', 'remove_footer_version' );

表示制限

自分の投稿だけ一覧に表示

function get_my_posts( $wp_query ) {
    if( is_admin() && !wp_doing_ajax() && !current_user_can( 'edit_others_posts' )){
        $wp_query->set( 'author', get_current_user_id() );
    }
}
add_action( 'pre_get_posts', 'get_my_posts' );

function hide_others_posts( $views ) {
    unset( $views['all'] );     // すべて
    unset( $views['draft'] );   // 下書き
    unset( $views['publish'] ); // 公開済み
    unset( $views['sticky'] );  // 固定表示
    unset( $views['pending'] ); // 保留中
    unset( $views['trash'] );   // ゴミ箱

    return $views;
}
add_filter( 'views_edit-post', 'hide_others_posts' );

自分の画像だけメディア一覧に表示

function get_my_medias( $query ) {
    if ( $user = wp_get_current_user() ) {
        $query['author'] = $user->ID;
    }
    return $query;
}
add_action( 'ajax_query_attachments_args', 'get_my_medias' );