私は最近、プラグインを書いてダッシュボードウィジェットを並べ替えることを試みました。私はこれを達成しました:
次のコードで:
<?php
/*
* Plugin Name: Custom Dashboard
* Description: Custom dashboard for Avare sites.
* Author: Avare
* Version: 1.0
*/
function sort_dashboard_widgets() {
$left_column_widgets[] = 'dashboard_right_now';
$left_column_widgets[] = 'dashboard_recent_comments';
$left_column_widgets[] = 'dashboard_incoming_links';
$right_column_widgets[] = 'dashboard_quick_press';
$right_column_widgets[] = 'dashboard_recent_drafts';
$right_column_widgets[] = 'dashboard_primary';
$right_column_widgets[] = 'dashboard_secundary';
// Global the $wp_meta_boxes variable (this will allow us to alter the array)
global $wp_meta_boxes;
// We then unset that part of the array
unset($wp_meta_boxes['dashboard']['normal']['core']);
unset($wp_meta_boxes['dashboard']['side']['core']);
// Then we make a backup of the widget areas
$left_dashboard = $wp_meta_boxes['dashboard']['normal']['core'];
$right_dashboard = $wp_meta_boxes['dashboard']['side']['core'];
// Then we merge them in some sort of way (is this necessary?)
$sorted_left_dashboard = array_merge((array)$left_column_widgets, (array)$left_dashboard);
$sorted_right_dashboard = array_merge((array)$right_column_widgets, (array)$right_dashboard);
// Now we add the sorted widgets back in
$wp_meta_boxes['dashboard']['normal']['core'] = $sorted_left_dashboard;
$wp_meta_boxes['dashboard']['side']['core'] = $sorted_right_dashboard;
}
add_filter('wp_dashboard_setup', 'sort_dashboard_widgets');
私が作ったスクリーンショットでわかるように、プラグインは$ left_column_widgetsと$ right_column_widgetsの最初の文字だけを見るように見えます。エラー( 'd'は有効なウィジェットスラッグではないため)。この問題を解決する方法はありますか?
乾杯
おお、私はそれを考え出した。 :)私はkaiserが私の質問に答える前にそれを考え出しましたが、私はまだ彼に感謝したいと思います。以下に、ダッシュボードウィジェットを並べ替えるために私が書いたコードがあります。
<?php
/**
* Plugin Name: Custom Dashboard
* Description: Custom dashboard for Avare sites.
* Author: Avare
* Version: 1.0
*/
function sort_dashboard_widgets() {
// Global the $wp_meta_boxes variable (this will allow us to alter the array)
global $wp_meta_boxes;
// Then unset everything in the array
unset($wp_meta_boxes['dashboard']['normal']['core']);
unset($wp_meta_boxes['dashboard']['side']['core']);
// Add widgets to left column
add_meta_box('dashboard_right_now', __('Right Now'), 'wp_dashboard_right_now', 'dashboard', 'normal', 'core');
add_meta_box('dashboard_recent_comments', __('Recent Comments'), 'wp_dashboard_recent_comments', 'dashboard', 'normal', 'core');
// Add widgets to right column
add_meta_box('dashboard_quick_press', __('QuickPress'), 'wp_dashboard_quick_press', 'dashboard', 'side', 'core');
add_meta_box('dashboard_recent_drafts', __('Recent Drafts'), 'wp_dashboard_recent_drafts', 'dashboard', 'side', 'core');
}
add_action('wp_dashboard_setup', 'sort_dashboard_widgets');
このコードはすべての利用可能なダッシュボードウィジェットを使用するわけではないことに注意してください。
まず、少し誤解があります。 wp_dashboard_setup
はactionであり、フィルタではありません。それがフィルタであるならば、それは1つまたは複数の引数を持ち、最初のものを返す必要があるでしょう。
このアクションの例については、私が使用している次のmu-pluginを参照してください。
<?php
/**
* Plugin Name: Remove Dashboard Widgets
* Description: Removes all Dashboard Widgets
*/
function dashboard_widgets()
{
remove_meta_box( 'dashboard_browser_nag', 'dashboard', 'normal' );
remove_meta_box( 'dashboard_right_now', 'dashboard', 'normal' );
remove_meta_box( 'dashboard_recent_comments', 'dashboard', 'normal' );
remove_meta_box( 'dashboard_plugins', 'dashboard', 'normal' );
remove_meta_box( 'dashboard_quick_press', 'dashboard', 'side' );
remove_meta_box( 'dashboard_recent_drafts', 'dashboard', 'side' );
remove_meta_box( 'dashboard_primary', 'dashboard', 'side' );
remove_meta_box( 'dashboard_secondary', 'dashboard', 'side' );
}
add_action( 'wp_dashboard_setup', 'dashboard_widgets' );
これらのウィジェットを削除した後、それらを使用してそれらを再び追加することができます。
add_dashboard_widget( $widget_id, $widget_name, $callback );
詳細については、Codexと Dashboard Widgets API を参照してください。デフォルトを見るには、 /wp-admin/includes/dashboard.php
- > wp_setup_dashboard()
を調べてください。それからあなたがそれらを好き/必要に応じてそれらを単に追加しなおしてください。
他にもさまざまなオプションがあります。フィルタ。
しかし、最初にwhichをターゲットにしているダッシュボードを整理する必要があります。すべてのものはいくつかのケースでは(プラグインなど)別のダッシュボードと別のフィルタがあります
wp_network_dashboard_widgets
wp_user_dashboard_widgets
wp_dashboard_widgets
これらのフィルタはすべて$dashboard_widgets
配列をフィルタリングします(そしてそれを返すべきです)。
デフォルトのウィジェットを拡張したい場合は、3つの引数(Screen ID、sideなどの位置、normalなど)と空の3番目の引数を持つ'do_meta_boxes'
フックを使用します。
あなたは、ユーザーがそれらのウィジェットを並べ替えることができる(あるいはそれらを無効にする)ことができるという事実を受け入れる必要があります。これはそのようにしてこのようにしておくべきものです。