web-dev-qa-db-fra.com

Réorganiser les widgets du tableau de bord

J'ai récemment essayé de réorganiser les widgets de tableau de bord en écrivant un plugin. J'ai accompli ceci:

 enter image description here 

avec le code suivant:

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

Comme vous pouvez le voir sur la capture d'écran que j'ai faite, il semble que le plug-in ne regarde que la première lettre de$ left_column_widgetset$ right_column_widgets, ce qui cause les erreurs (parce que 'd' n'est pas un slug de widget valide). Y a-t-il un moyen de résoudre ce problème?

À votre santé

3
Steef

Whoop, je l'ai compris. :) Bien que je l'ai compris avant kaiser a répondu à ma question, je voudrais quand même le remercier pour sa réponse claire et géniale. Vous trouverez ci-dessous le code que j'ai écrit pour réorganiser les widgets du tableau de bord.

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

Veuillez noter que ce code n'utilise pas tous les widgets de tableau de bord disponibles.

1
Steef

Éclaircir les choses

Premièrement, il y a un léger malentendu. wp_dashboard_setup est unactionet non un filtre. S'il s'agissait d'un filtre, il aurait un ou plusieurs arguments et devrait renvoyer le premier.

How-To # 1

Pour un exemple de cette action, voir le plug-in mu que j'utilise:

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

Après avoir supprimé ces widgets, vous pouvez les rajouter à l'aide de

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

Pour plus d'informations, consultez le Codex et l'API Dashboard Widgets . Pour voir les valeurs par défaut, regardez dans /wp-admin/includes/dashboard.php -> wp_setup_dashboard() . Ensuite, ajoutez-les simplement à votre guise/besoin.

Comment-faire # 2

Vous avez également différentes options: Filtres.

Mais d’abord, nous devrions clarifierle// tableau de bord que vous ciblez. Tous ceux-ci auront dans certains cas (plugins, etc.) différents tableaux de bord et différents filtres

  • Administrateurs de réseau (super-administrateurs) -> wp_network_dashboard_widgets
  • Administrateur de site -> wp_user_dashboard_widgets
  • Utilisateur -> wp_dashboard_widgets

Tous ces filtres filtrent le tableau $dashboard_widgets (et devraient le renvoyer).

Extension des valeurs par défaut

Si vous souhaitez étendre les widgets par défaut, vous voudrez utiliser le crochet 'do_meta_boxes', qui comporte trois arguments (ID d'écran, emplacement comme côté, normal, etc.) et un troisième argument vide.

Inconvénients et limites

Vous devrez accepter le fait que les utilisateurs peuvent réorganiser ces widgets (ou même les désactiver). C’est quelque chose qui devrait être ainsi et maintenu ainsi.

1
kaiser