web-dev-qa-db-fra.com

Supprimer les widgets de tableau de bord personnalisés

Voici le code sur la façon de supprimer tous les widgets de tableau de bord - les widgets par défaut et de plugin, mais je souhaite modifier le code pour ne supprimer que les widgets de tableau de bord personnalisés et non ceux par défaut.


// Create the function to use in the action hook
function remove_dashboard_widgets() {
    global $wp_meta_boxes;
    if ( !array( $wp_meta_boxes ) ) return;
    foreach ( $wp_meta_boxes as $widget_section => $widget_locations ) {
        if ( $widget_section == 'dashboard' ) {
            foreach ( $widget_locations as $widget_location => $widget_types ) {
                foreach ( $widget_types as $widget_type => $widgets ) {
                    foreach ( $widgets as $widget_name => $widget ) {
                        remove_meta_box( $widget_name, $widget_section, $widget_location );
                    }               
                }
            }
        }
    }
} 
// Hook into the 'wp_dashboard_setup' action to register our function
add_action('wp_dashboard_setup', 'remove_dashboard_widgets', 11 );
3
Jessica

Les widgets de tableau de bord intégrés ne sont pas marqués d'une manière ou d'une autre, vous devez utiliser une liste fixe:

'dashboard_right_now',
'dashboard_plugins',
'dashboard_quick_press',
'dashboard_recent_drafts',
'dashboard_recent_comments',
'dashboard_incoming_links',
'dashboard_primary',
'dashboard_secondary'

Donc, votre code doit tester si le widget actuel est dans cette liste et le supprimer, si ce n’est pas le cas:

add_action(
    'wp_dashboard_setup',
    't5_remove_custom_dashboard_widgets',
    11
);

function t5_remove_custom_dashboard_widgets()
{
    global $wp_meta_boxes;

    $builtin = array (
        'dashboard_right_now',
        'dashboard_plugins',
        'dashboard_quick_press',
        'dashboard_recent_drafts',
        'dashboard_recent_comments',
        'dashboard_incoming_links',
        'dashboard_primary',
        'dashboard_secondary'
    );

    if ( empty ( $wp_meta_boxes['dashboard'] ) )
        return;

    $widget_groups = $wp_meta_boxes['dashboard'];

    foreach ( $widget_groups as $section => $widget_group )
        foreach ( $widget_group as $widgets )
            foreach ( $widgets as $id => $widget )
                if ( ! in_array( $id, $builtin ) )
                    remove_meta_box( $id, 'dashboard', $section );
}
3
fuxia

WordPress enregistre ses widgets avec le préfixe dashboard_ afin que vous puissiez vérifier ce préfixe avant de supprimer un widget.

// Create the function to use in the action hook
function remove_dashboard_widgets() {
  global $wp_meta_boxes;
    if ( !array( $wp_meta_boxes ) ) return;
      foreach ( $wp_meta_boxes as $widget_section => $widget_locations ) {
        if ( $widget_section == 'dashboard' ) {
           foreach ( $widget_locations as $widget_location => $widget_types ) {
               foreach ( $widget_types as $widget_type => $widgets ) {
                 foreach ( $widgets as $widget_name => $widget ) {
                    preg_match('/^dashboard_/',$widget_name,$matches);
                    if ('dashboard_' !== $matches[0]) {
                       remove_meta_box( $widget_name, $widget_section, $widget_location );
                    }
                  }               
               }
           }
        }
    }
} 
// Hook into the 'wp_dashboard_setup' action to register our function
add_action('wp_dashboard_setup', 'remove_dashboard_widgets', 11 );

Bien sûr, rien n'empêche un plugin ou un thème d'enregistrer un widget avec le même préfixe.

2
s_ha_dum