管理メニュー

PHP

【WordPress】ダッシュボード(最初の画面)から不必要な項目(ウィジット)を消す方法

更新日:2023/02/03

WordPressのダッシュボードには様々な情報が表示されています。
しかし、ほとんど見ない人が多いと思います。

少し邪魔ですね。

画面上部の表示オプションで、非表示にできるのですが…

ダッシュボードの表示オプション

チームで作業している場合など、余計な情報を見せたくないケースがあります。

そこで、表示オプションも含めてダッシュボードから削除してみます。

 

概要

ダッシュボードのウィジットは、add_meta_box()で登録されています。
そのため、メタボックスの表示前に登録を解除すれば目的を達することができます。

また、この作業により表示オプション内からウィジットのチェックボックスが消えます。

登録の解除はdo_meta_boxesアクションで行います。

do_meta_boxesアクションの構文

do_action( 'do_meta_boxes', $screen, $context, $arg )
  • $screen :
    add_meta_box()の4番目の引数

  • $context :
    add_meta_box()の5番目の引数

  • $arg :
    付加的な情報

add_meta_box()とremove_meta_box()の構文は、次のようになっています。

add_meta_box()とremove_meta_box()

add_meta_box( $id, $title, $callback, $screen = null, 
    $context = 'advanced', $priority = 'default',
    $callback_args = null )

remove_meta_box( $id, $screen, $context )

remove_meta_box()はadd_meta_box()の一番目の引数が必要ですが、do_meta_boxesアクションで受け渡していません。
そのため、$screen$contextおよび、$argで$idを類推する必要があります。

 

具体的なコード例

ダッシュボードの各ウィジットを削除するコードの例を紹介します。
コードは個々にアクションを登録していますが、一つにまとめても大丈夫です。

なお、do_meta_boxesアクションの引数は、次の値が渡されます。

$screen : 'dashboard'
$context : ウィジットごとに異なる
$arg : ''

WordPress イベントとニュース

『WordPress イベントとニュース』ウィジットのメタボックスIDは'dashboard_primary'で、$context'side'です。

add_action('do_meta_boxes',function($screen,$context){
	if( $screen_id === 'dashboard' && $context == 'side' ){
		remove_meta_box('dashboard_primary',$screen_id,$context);
	}
},0,2);

クイックドラフト

『クイックドラフト』ウィジットのIDは'dashboard_quick_press'で、$context'side'です。

add_action('do_meta_boxes',function($screen,$context){
	if( $screen_id === 'dashboard' && $context == 'side' ){
		remove_meta_box('dashboard_quick_press',$screen_id,$context);
	}
},0,2);

サイトヘルス

『サイトヘルス』ウィジットのIDは'dashboard_site_health'で、$context'side'です。

add_action('do_meta_boxes',function($screen,$context){
	if( $screen_id === 'dashboard' && $context == 'normal' ){
		remove_meta_box('dashboard_site_health',$screen_id,$context);
	}
},0,2);

概要

『概要』ウィジットのIDは'dashboard_right_now'で、$context'side'です。

add_action('do_meta_boxes',function($screen,$context){
	if( $screen_id === 'dashboard' && $context == 'normal' ){
		remove_meta_box('dashboard_right_now',$screen_id,$context);
	}
},0,2);

アクティビティ

『アクティビティ』ウィジットのIDは'dashboard_activity'で、$context'side'です。

add_action('do_meta_boxes',function($screen_id,$context){
		if( $screen_id === 'dashboard' && $context == 'normal' ){
			remove_meta_box('dashboard_activity',$screen_id,$context);
		}
},0,2);

 

Welcomeパネルの削除

ダッシュボードの上部に『WordPress へようこそ !』と表示されているのは、Welcomeパネルと呼ぶそうです。
このパネルはwelcome_panelアクションにフック関数が登録されている時に表示されます。

そこで、remove_all_filters()関数を使って登録されているフックを全部削除します。

add_action('admin_init',function(){
	remove_all_filters( 'welcome_panel' );
});

 

全部消す

これまでのコードをまとめて、ダッシュボードから全部消します。

add_action('do_meta_boxes',function($screen_id,$context){
		if( $screen_id !== 'dashboard' ||
			 ( $context != 'side' && $context != 'normal') )
			 	return;
		
		$ids = $context === 'side' 
					? array( 'dashboard_primary' , 'dashboard_quick_press')
					: array( 'dashboard_site_health' , 'dashboard_right_now' 
						,'dashboard_activity');
		
		foreach( $ids as $id) {
			remove_meta_box($id,$screen_id,$context);
		}
},0,2);

add_action('admin_init',function(){
	remove_all_filters( 'welcome_panel', 'wp_welcome_panel' );
});

実行すると、全部消えました!

ダッシュボードからウィジットを全て消した状態

表示オプションにチェックボックスが無いので、追加もできません。

『表示オプションメニューからボックスを追加してください』を消そうと思って、cssのdisplayプロパティを'hide'にしたら、ブラウザのスクリプト処理が無限ループしました。
邪魔だけど、気にしない方がいいかもしれない…

 

ダッシュボードのウィジットを一覧表示する

ダッシュボードに登録されているウィジットを、リストアップしてみます。

情報はグローバル変数の$wp_meta_boxesにあるので、該当する値を抜き出します。

add_action('admin_footer',function(){
	if( get_current_screen()->id !== 'dashboard' ) return;
	
	global $wp_meta_boxes;
	echo '<pre style="float:right">*****************************'."\n";
	echo "[ dashboard ]\n";
	foreach( $wp_meta_boxes[ 'dashboard' ] as $context => $priority ){
		echo "=&gt;[ \$context:{$context} ]\n";
		foreach( $priority as $id ){
			foreach( $id as $item ){
				echo "\t=&gt;[ \$id:{$item['id']} ][ {$item['title']} ]\n";
			}
		}
	}
	echo "*****************************\n</pre>";
});

結果は、次のようになります。

*****************************
[ dashboard ]
=>[ $context:normal ]
	=>[ $id:dashboard_site_health ][ サイトヘルスステータス ]
	=>[ $id:dashboard_right_now ][ 概要 ]
	=>[ $id:dashboard_activity ][ アクティビティ ]
=>[ $context:side ]
	=>[ $id:dashboard_primary ][ WordPress イベントとニュース ]
	=>[ $id:dashboard_quick_press ][ <span class="hide-if-no-js">クイックドラフト</span> <span class="hide-if-js">最新の下書き</span> ]
*****************************

具体的なコード例を作成する際に、WordPressのコードを一つ一つ確認したので時間がかかりました。
この一覧を元にすれば、もっと速くできましたね…

WordPressはHTMやCSSの知識も必要。総合的な知識を身につけよう。

更新日:2023/02/03

書いた人(管理人):けーちゃん

スポンサーリンク

記事の内容について

null

こんにちはけーちゃんです。
説明するのって難しいですね。

「なんか言ってることおかしくない?」
たぶん、こんなご意見あると思います。

裏付けを取りながら記事を作成していますが、僕の勘違いだったり、そもそも情報源の内容が間違えていたりで、正確でないことが多いと思います。
そんなときは、ご意見もらえたら嬉しいです。

掲載コードについては事前に動作確認をしていますが、貼り付け後に体裁を整えるなどをした結果動作しないものになっていることがあります。
生暖かい視線でスルーするか、ご指摘ください。

ご意見、ご指摘はこちら。
https://note.affi-sapo-sv.com/info.php

 

このサイトは、リンクフリーです。大歓迎です。