WordPress管理画面のカスタマイズ

WordPressの管理画面をカスタマイズする方法を紹介します。
今回紹介するのは、案件でも頻繁に利用するカスタマイズです。
※今回のコードはすべてテーマのfunctions.phpに記述します。
【サイドメニューの不要な項目を非表示にする】
※非表示なので、直接URLにアクセスすると表示されます。
remove_menu_page()、remove_submenu_page()を利用して項目を非表示にします。
メインメニュー用
remove_menu_page($menu_slug);
サブメニュー用
remove_submenu_page($menu_slug, $submenu_slug);
■ユーザー権限、またはユーザー名で非表示を実行する場合は、下記を記述する。
global $current_user
■管理者1の場合は外観メニューを非表示します。
if($current_user->data->user_login === '管理者1') {
remove_menu_page('themes.php'); // 外観
}
add_action()の第三引数は実行する順番。
サンプルではAdvanced Custom Fieldの項目を非表示にするために「11」を指定してます。
add_action('admin_menu', 'remove_menu', 11);
■全体のサンプルコード
function remove_menu() {
global $current_user;
//例 管理者1以外は非表示を実行する
if($current_user->data->user_login === '管理者1') {
remove_submenu_page('edit.php', 'edit-tags.php?taxonomy=post_tag');//投稿タグ
remove_submenu_page('edit.php', 'edit-tags.php?taxonomy=category');//投稿カテゴリー
remove_submenu_page('edit.php?post_type=カスタム投稿タイプ', 'edit-tags.php?taxonomy=カスタム投稿タイプタクソノミー&post_type=カスタム投稿タイプ');//カスタム投稿 タクソノミー
remove_menu_page('edit.php?post_type=page'); // 固定ページ
remove_menu_page('upload.php'); // メディア
remove_menu_page('link-manager.php'); // リンク
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_menu_page('edit.php?post_type=acf'); //Advanced Custom Field(プラグイン)
}
//例 権限が投稿者、寄稿者にはプロフィールメニューを出さない。
if($current_user->caps['contributor'] || $current_user->caps['editor']) {
remove_menu_page('profile.php'); // プロフィール
}
}
add_action('admin_menu', 'remove_menu', 11);
関数リファレンス/remove menu page - WordPress Codex 日本語版
リンク
【ダッシュボードのカスタマイズ】
※初期値から表示させない方法です。
■remove_meta_box()を利用して非表示にします。
function custom_remove_dashboard_widgets() {
remove_meta_box( 'dashboard_incoming_links', 'dashboard', 'normal' ); // 被リンク
remove_meta_box( 'dashboard_plugins', 'dashboard', 'normal' ); // プラグイン
remove_meta_box( 'dashboard_primary', 'dashboard', 'side' ); // WordPressブログ
remove_meta_box( 'dashboard_secondary', 'dashboard', 'normal' ); // WordPressフォーラム
remove_meta_box( 'dashboard_quick_press', 'dashboard', 'side' ); // クイック投稿
remove_meta_box( 'dashboard_recent_drafts', 'dashboard', 'side' ); // 最近の下書き
remove_meta_box( 'dashboard_recent_comments', 'dashboard', 'normal' ); // 最近のコメント
remove_meta_box( 'dashboard_right_now', 'dashboard', 'normal' ); // 現在の状況
remove_meta_box( 'dashboard_activity', 'dashboard', 'normal'); // アクティビティ
}
add_action('wp_dashboard_setup', 'custom_remove_dashboard_widgets');
【WordPress へようこそ!パネルを非表示。】
※項目は仕様上消せないようです。なので強制的に非表示にします。
ユーザー情報を取得して「WordPress へようこそ!パネル」の表示状態をfalseに変更します。
function hide_welcome_panel() {
$user_id = get_current_user_id();
if(get_user_meta( $user_id, 'show_welcome_panel', true )) {
update_user_meta( $user_id, 'show_welcome_panel', false );
}
}
add_action( 'load-index.php', 'hide_welcome_panel' );
【投稿のラベル変更】
サンプルでは投稿をキャンペーンに変更する場合です。
function custom_post_menu_label() {
global $menu;
global $submenu;
$menu[5][0] = 'キャンペーン';
$submenu['edit.php'][5][0] = 'キャンペーン一覧';
$submenu['edit.php'][10][0] = '新しいキャンペーン';
}
add_action('init', 'custom_post_object_label');
function custom_post_object_label() {
global $wp_post_types;
$labels = &$wp_post_types['post']->labels;
$labels->name = 'キャンペーン';
$labels->singular_name = 'キャンペーン';
$labels->add_new = _x('新規作成', 'キャンペーン');
$labels->add_new_item = '新しいキャンペーン';
$labels->edit_item = 'キャンペーンの編集';
$labels->new_item = '新しいキャンペーン';
$labels->view_item = 'キャンペーンを表示';
$labels->search_items = 'キャンペーン検索';
$labels->not_found = 'キャンペーンが見つかりませんでした';
$labels->not_found_in_trash = 'ゴミ箱のキャンペーンにも見つかりませんでした';
}
add_action('admin_menu', 'custom_post_menu_label');
_x()関数については
_x:WordPress私的マニュアル
リンク
【管理画面用にCSSを追記する。】
サンプルでは通常投稿の更新ボタンの色を赤に変更されます。
function admin_css_custom() {
$style = <<<EOT
<style>
body.post-type-post .button.button-primary.button-large {
background: #a00; border-color: #a00;
}
</style>
EOT;
echo $style;
};
add_action('admin_print_styles', 'admin_css_custom');
以上です。


