web-dev-qa-db-ja.com

ダッシュボードウィジェットの並べ替え

私は最近、プラグインを書いてダッシュボードウィジェットを並べ替えることを試みました。私はこれを達成しました:

enter image description here

次のコードで:

<?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'は有効なウィジェットスラッグではないため)。この問題を解決する方法はありますか?

乾杯

3
Steef

おお、私はそれを考え出した。 :)私は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');

このコードはすべての利用可能なダッシュボードウィジェットを使用するわけではないことに注意してください。

1
Steef

物事を片付ける

まず、少し誤解があります。 wp_dashboard_setupactionであり、フィルタではありません。それがフィルタであるならば、それは1つまたは複数の引数を持ち、最初のものを返す必要があるでしょう。

ハウツー#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() を調べてください。それからあなたがそれらを好き/必要に応じてそれらを単に追加しなおしてください。

ハウツー#2

他にもさまざまなオプションがあります。フィルタ。

しかし、最初にwhichをターゲットにしているダッシュボードを整理する必要があります。すべてのものはいくつかのケースでは(プラグインなど)別のダッシュボードと別のフィルタがあります

  • ネットワーク管理者(別名スーパーアドミン) - > wp_network_dashboard_widgets
  • サイト管理者 - > wp_user_dashboard_widgets
  • ユーザー - > wp_dashboard_widgets

これらのフィルタはすべて$dashboard_widgets配列をフィルタリングします(そしてそれを返すべきです)。

デフォルトを拡張する

デフォルトのウィジェットを拡張したい場合は、3つの引数(Screen ID、sideなどの位置、normalなど)と空の3番目の引数を持つ'do_meta_boxes'フックを使用します。

欠点と限界

あなたは、ユーザーがそれらのウィジェットを並べ替えることができる(あるいはそれらを無効にする)ことができるという事実を受け入れる必要があります。これはそのようにしてこのようにしておくべきものです。

1
kaiser