本来ならば管理者ではないユーザーに管理画面は公開したくないものですが、それでも、という場合のカスタマイズ用コードで主なものをまとめました。
使用中のテーマの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' );