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

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

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

## 機能の制限
### ダッシュボードからリダイレクト
```php
function redirect_dashboard() {
	global $pagenow;
	if ( is_admin() && 'index.php' == $pagenow ) {
		wp_redirect( admin_url( 'edit.php' ) );
	}
}
add_action( 'admin_init', 'redirect_dashboard' );
```

### バージョン更新
```php
// バージョン更新を非表示
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' );
```

## 機能の非表示
### ようこそ画面の非表示
```php
remove_action( 'welcome_panel', 'wp_welcome_panel' );
```

### メニュー項目非表示
```php
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' );
```

### 管理バーの非表示
```php
add_filter( 'show_admin_bar', '__return_false' );
```

### 管理バーの項目の非表示
```php
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 );
```

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

```php
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' );
```

### 投稿画面のメタボックスの非表示
```php
// 投稿画面から不要な機能を削除
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を用いてディスカッションを消すと、投稿へのコメントが無効になる場合があります。コメントできるようにするには下のようにします。

```php
// コメント設定を隠す
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' );
```

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

```php
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' );
```

### プロフィール設定の項目の非表示
```php
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' );
```

### フッターの非表示
```php
// 管理画面フッターを変更
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' );
```

## 表示制限
### 自分の投稿だけ一覧に表示
```php
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' );
```
### 自分の画像だけメディア一覧に表示
```php
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' );
```