
WordPressのダッシュボードからデフォルトのウィジェットを消したり、独自のウィジェットを追加したりする方法。
デフォルトのウィジェットを削除する
remove_meta_box関数でウィジェットの削除が可能。remove_meta_boxは、ダッシュボードだけでなく、投稿画面のウィジェット削除でも使えます。
remove_meta_box($id, $page, $context);
- $id
- ウィジェットのID。他のウィジェットとの重複不可。
- $page
- スクリーン名。ダッシュボードの場合は、dashboard
- $context
- デフォルトの表示位置。ダッシュボードの場合は、normal もしくは side
CODE 1
function remove_dashboard_meta_boxes( $screen_id ) {
global $wp_meta_boxes;
if ( $screen_id == 'dashboard' ) {
$meta_boxes = array(
'normal' => array(
'dashboard_right_now', // 現在の状況
'network_dashboard_right_now', // 現在の状況(ネットワーク管理)
'dashboard_recent_comments', // 最近のコメント
'dashboard_incoming_links', // 被リンク
'dashboard_plugins', // プラグイン
),
'side' => array(
'dashboard_quick_press', // クイック投稿
'dashboard_recent_drafts', // 最近の下書き
'dashboard_primary', // WordPress 開発ブログ
'dashboard_secondary' // WordPress フォーラム
)
);
foreach ( $meta_boxes as $context => $arr ) {
foreach ( $arr as $id ) {
if ( isset( $wp_meta_boxes[$screen_id][$context]['core'][$id] ) ) {
remove_meta_box( $id, $screen_id, $context );
}
}
}
}
}
add_action( 'do_meta_boxes', 'remove_dashboard_meta_boxes' );
独自のウィジェットを追加する
「俺のメモ」というメモを記入出来るボックスを追加するサンプル。wp_add_dashboard_widgetという関数で追加が可能。引数の指定は第4まで。
wp_add_dashboard_widget( $widget_id, $widget_name, $callback, $control_callback );
- $widget_id
- ウィジェットのID。他のウィジェットとの重複不可。
- $widget_name
- ウィジェットのタイトル
- $callback
- ウィジェットを表示する際に実行される関数名
- $control_callback
- ウィジェットで設定などを行う場合に実行される関数名。表示のみとなるウィジェットでは指定不要
CODE 2
function add_my_dashoboard_meta_box( $screen_id ) {
if ( $screen_id == 'dashboard' ) {
wp_add_dashboard_widget( 'my_dashoboard_meta_box', '俺のメモ', 'my_dashoboard_meta_box', 'my_dashoboard_meta_box_controll' );
}
}
add_action( 'do_meta_boxes', 'add_my_dashoboard_meta_box' );
function my_dashoboard_meta_box() {
$widget_options = get_option( 'dashboard_widget_options' );
$my_dashoboard_meta_box = isset( $widget_options['my_dashoboard_meta_box'] ) ? $widget_options['my_dashoboard_meta_box'] : '';
?>
<p><?php echo nl2br( esc_html( $my_dashoboard_meta_box ) ); ?></p>
<?php
}
function my_dashoboard_meta_box_controll() {
$widget_options = get_option( 'dashboard_widget_options' );
$my_dashoboard_meta_box = isset( $widget_options['my_dashoboard_meta_box'] ) ? $widget_options['my_dashoboard_meta_box'] : '';
?>
<textarea name="my_dashoboard_meta_box" cols="50" rows="5"><?php echo esc_html( $my_dashoboard_meta_box ); ?></textarea>
<?php
}
function my_dashoboard_meta_box_controll_update() {
$widget_options = get_option( 'dashboard_widget_options' );
if ( ! $widget_options ) {
$widget_options = array();
}
if ( isset( $_POST['my_dashoboard_meta_box'] ) ) {
$widget_options['my_dashoboard_meta_box'] = stripslashes_deep( $_POST['my_dashoboard_meta_box'] );
update_option( 'dashboard_widget_options', $widget_options );
}
}
add_action( 'load-index.php', 'my_dashoboard_meta_box_controll_update' );
WordPress3.2.1でマルチサイトにしています。
ネットワーク管理者のダッシュボードも同様にカスタマイズしたいのですが
どのようにすればよろしいでしょうか?
ちなみにサイト管理者側は正常に動作しています。。
tonakaiさん、こんにちは。
ネットワーク管理者のダッシュボードでは、 $screen_id が dashboard-network になります。
通常のダッシュボードと両方でカスタマイズを行いたい場合は、
if ( $screen_id == 'dashboard' || $screen_id == 'dashboard-network' ) {のようになります。
また、ネットワーク管理のダッシュボードでの現在の状況のボックスは、 network_dashboard_right_now になりますので、必要に応じて書き加えて下さい。
独自のウィジェットを追加するについても、同じように書き換えれば動くとは思います。
ただし、データ保存・取得の部分の検証などは行っていません。
ご回答ありがとうございます。
$screen_id は dashboard-network だったのですね。
ご指摘通りに書き換えたところ、CODE1の方は無事動作いたしました。
※CODE2はまだ試しておりません。
ご丁寧にご説明いただきありがとうございました。
初めまして。
WPで躓く度に参考にさせていただいてます(^^)
今回は「俺のメモ」を適応させていただきました…そこで以下のお尋ねなのですが!
Adminimizeプラグインを使って管理画面のメニューをカスタマイズ(非表示)しています。
編集者からログインすると、ダッシュボードには「現在の状況」、「下書き」、そして「俺のメモ」のみを表示させています。
その際、「俺のメモ」の設定(タイトルバー右端)が出ず、テキストエリアを編集することができません。
管理者以外の管理画面でも「俺のメモ」を編集(書込み)できるようにする方法あればご教授ください。※WPバージョン:3.6
よろしくお願いします。
キキさん、こんにちは。
ダッシュボードの設定を行うには、「edit_dashboard」という権限が必要になります。
この権限を与えると設定が可能な全ての項目に影響を与えてしまいますが、編集者で表示している「現在の状況」「下書き」には、元々設定するものがないため、この権限変更で対応できるのではないかと思います。
User Role Editor を使って、編集者に当該権限の追加をしてみてください。
jim912さん、早々のご回答「ありがとうございます」。
アドバイスの手順でうまくいきました!
感謝いたします。
追伸:
「俺のメモ」の”俺の”部分は取りました (*^m^*)