it-swarm.com.de

Dashboard-Widgets neu anordnen

Ich habe kürzlich versucht, die Dashboard-Widgets durch Schreiben eines Plugins neu zu ordnen. Ich habe folgendes erreicht:

 enter image description here 

mit folgendem Code:

<?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');

Wie Sie auf dem Screenshot sehen können, sieht es so aus, als würde das Plugin nur den ersten Buchstaben von$ left_column_widgetsund$ right_column_widgetsanschauen, was die Fehler verursacht (weil 'd' kein gültiger Widget-Slug ist). Gibt es eine Möglichkeit, dieses Problem zu lösen?

Prost

3
Steef

Hoppla, ich habe es herausgefunden. :) Obwohl ich es herausgefunden habe, bevor kaiser meine Frage beantwortet hat, möchte ich ihm trotzdem dafür danken, dass es eine klare und großartige Antwort ist. Unten finden Sie den Code, den ich geschrieben habe, um die Dashboard-Widgets neu zu ordnen.

<?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');

Beachten Sie, dass dieser Code nicht alle verfügbaren Dashboard-Widgets verwendet.

1
Steef

Dinge aufräumen

Erstens gibt es ein leichtes Missverständnis. wp_dashboard_setup ist einactionund kein Filter. Wenn es ein Filter wäre, hätte er ein oder mehrere Argumente und müsste das erste zurückgeben.

Anleitung # 1

Ein Beispiel für diese Aktion finden Sie im folgenden Mu-Plugin, das ich verwende:

<?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' );

Nachdem Sie diese Widgets entfernt haben, können Sie sie wieder hinzufügen

add_dashboard_widget( $widget_id, $widget_name, $callback );

Weitere Informationen finden Sie im Codex und in der Dashboard Widgets API . Die Standardeinstellungen finden Sie unter /wp-admin/includes/dashboard.php -> wp_setup_dashboard() . Dann fügen Sie sie einfach wieder hinzu, wie Sie möchten/brauchen.

Anleitung # 2

Es gibt auch verschiedene andere Optionen: Filter.

Aber zuerst sollten wirklären, auf welchesDashboard Sie abzielen. Alle diese haben in einigen Fällen (Plugins usw.) unterschiedliche Dashboards und unterschiedliche Filter

  • Netzwerkadministratoren (a.k.a. Super-Admins) -> wp_network_dashboard_widgets
  • Site Administrator -> wp_user_dashboard_widgets
  • Benutzer -> wp_dashboard_widgets

Alle diese Filter filtern das $dashboard_widgets-Array (und sollten es zurückgeben).

Erweitern der Standardeinstellungen

Wenn Sie die Standard-Widgets erweitern möchten, müssen Sie den Hook 'do_meta_boxes' verwenden, der drei Argumente (Bildschirm-ID, Position wie Seite, Normal usw.) und ein leeres drittes Argument enthält.

Nachteile und Grenzen

Sie müssen akzeptieren, dass Benutzer diese Widgets neu anordnen (oder sogar deaktivieren) können. Das sollte so sein und so bleiben.

1
kaiser