web-dev-qa-db-fra.com

Masquer tous les widgets de tableau de bord (ne pas supprimer)

Est-il possible de masquer tous les widgets de tableau de bord sans les supprimer? Je veux que mon widget soit le premier widget, mais selon la documentation, il n’est pas possible de spécifier l’affichage de votre widget car il est entièrement "essentiel". Ma solution serait donc de masquer tous les widgets au départ. J'ai rencontré cela mais cela ne fait que cacher le widget de bienvenue. J'ai essayé de dupliquer le masquage du widget de bienvenue, mais cela n'a pas fonctionné (rien ne s'est passé):

function remove_dashboard_widgets() {
    global $wp_meta_boxes;


    //unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_right_now']);
    //unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_quick_press']);
    //unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_primary']);
    update_user_meta( get_current_user_id(), 'show_welcome_panel', false );
    update_user_meta( get_current_user_id(), 'dashboard_right_now', false );
    update_user_meta( get_current_user_id(), 'dashboard_quick_press', false );
    //remove_meta_box( 'dashboard_activity', 'dashboard', 'normal');

}
add_action('wp_dashboard_setup', 'remove_dashboard_widgets' );
1
Howdy_McGee

Tout d’abord, je dois dire qu’après de brèves investigations, il semble qu’aucun 'dashboard_right_now' ou 'dashboard_quick_press' usermeta n’existe ... il est donc inutile de le définir sur false comme dans votre code.

Cela dit

en fonction de la documentation, il n'y a aucun moyen de spécifier où votre widget apparaît

Les docteurs mentent.

Lorsqu'un utilisateur se déconnecte puis se reconnecte, tous les widgets restent dans la même position et dans le même ordre. Une fois qu'il n'y a plus de magie, ces informations doivent être enregistrées quelque part.

Les commandes côté client ne sont pas une possibilité, car même si un utilisateur se connecte à un autre PC, la position des widgets ne change pas .. la position et la commande doivent être enregistrées dans la base de données.

Après une recherche rapide, il semble y avoir 2 options différentes qui contrôlent la position des widgets de tableau de bord:

  • meta-box-order_dashboard
  • metaboxhidden_dashboard

Le premier est un tableau où les clés sont:

'normal' , 'côté' , 'colonne3' et 'colonne4' .

Depuis WP 3.8, dashoard a 4 colonnes par défaut 1 , et chacune de ces clés fait référence à une colonne, la première s'appelle 'normale' et la deuxième 'côté' , je suppose, pour revenir en arrière compatibilité.

Chaque clé contient une chaîne séparée par des virgules des identifiants de widgets affichés dans cette colonne. Par conséquent, si vous souhaitez forcer votre widget à être le seul widget de la première colonne, vous devez faire en sorte que la colonne 'normal' contienne uniquement votre identifiant de widget, puis déplacez-la. tous les autres widgets dans une autre colonne, quelque chose comme ceci:

function order_dashboard_widgets() {
  $uid =  get_current_user_id();
  // hide welcome panel
  update_user_meta( $uid, 'show_welcome_panel', '0' );
  // add your widget
  wp_add_dashboard_widget(
    'unsocial_widget', 'Antisocial Dashboard Widget',
    function() {
      echo '<h1>I like to be the alone!</h1>';
    }
  );
  $order = (array) get_user_meta( $uid, 'meta-box-order_dashboard', true );
  if ( ! isset( $order['normal'] ) ) $order['normal'] = '';
  if ( $order['normal'] !== 'unsocial_widget' ) {
    $normal = explode( ',', $order['normal'] );
    $unsocial_key = array_search( 'unsocial_widget', $normal, true );
    if ( $unsocial_key !== false ) {
      unset( $normal[$unsocial_key] );
    }
    $order['side'] = implode( ',', $normal ) . ',' . $order['side'];
    $order['normal'] = 'unsocial_widget'; // yours is the only widget in 1st column
    update_user_meta( $uid, 'meta-box-order_dashboard', $order );
  }
}
add_action( 'wp_dashboard_setup', 'order_dashboard_widgets' );

Ainsi, votre widget sera toujours le premier et le seul widget dans la première colonne.

Maintenant, pour répondre à votre question, oui, il est également possible de masquer tous les autres widgets à l'aide de la méta 'metaboxhidden_dashboard' user: elle contient un tableau d'identifiants de widgets qui doivent être masqués afin que vous puissiez le remplir avec tous les widgets de tableau de bord.

function remove_dashboard_widgets() {
  // add your widget
  wp_add_dashboard_widget(
    'unsocial_widget', 'Antisocial Dashboard Widget',
    function() {
      echo '<h1>I like to be the alone!</h1>';
    }
  );
  $uid =  get_current_user_id();
  // hide welcome panel
  update_user_meta( $uid, 'show_welcome_panel', '0' );
  // get the current hidden metaboxes
  $hidden = get_user_meta( $uid, 'metaboxhidden_dashboard' );
  // the metaboxes to be hidden
  $to_hide = array(
    'dashboard_right_now',
    'dashboard_activity',
    'dashboard_quick_press',
    'dashboard_primary'
  );
  // if not already hidden, hide
  if ( $hidden !== $to_hide ) {
    update_user_meta( $uid, 'metaboxhidden_dashboard', $to_hide );
  }
}
add_action( 'wp_dashboard_setup', 'remove_dashboard_widgets' );

Cependant, de cette façon, les utilisateurs ne pourront plus masquer, afficher ou déplacer les widgets, car à chaque connexion, ils sont à nouveau tous masqués (sauf le vôtre, bien sûr ...), c'est la raison pour laquelle je préfère la solution précédente. ..

Peut-être, si vous souhaitez masquer tous les autres widgets, vous pouvez le faire uniquement lors de la première visite d'un utilisateur dans le tableau de bord, et pour toutes les visites de sous-requête, il vous suffit de commander les widgets à l'aide de la fonction précédente. (Vous pouvez d'abord enregistrer une méta utilisateur pour savoir si le tableau de bord actuel a déjà été visité).

Remarque: Bien sûr, tout autre plugin peut utiliser le même code, vous ne pouvez donc jamais être absolument certain que le vôtre est le premier widget ... après tout, cette réponse est maintenant publique;)


1 L'utilisation de quelques lignes de code est possible pour avoir à nouveau la possibilité d'utiliser un nombre personnalisé de colonnes mais même dans ce cas, le tableau reste le même: si vous autorisez moins de 4 colonnes, les clés supplémentaires ne sont pas supprimées.

2
gmazzap