moriya
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');
以上です。