web-dev-qa-db-fra.com

Comment supprimer certaines options d'écran et boîtes méta de l'ajout/la modification d'un type de message?

Désormais, lorsque vous ajoutez ou modifiez un message particulier dans le type de message souhaité, d'autres options sont également disponibles à l'écran. Bien que ces options d’écran affichent/cachent des boîtes méta. J'aimerais pouvoir obtenir par programme une liste de toutes ces options d'écran enregistrées dans les boîtes de méta afin de pouvoir vérifier à nouveau si un certain tableau d'options d'écran existe et, le cas échéant, je prévois de les supprimer par programme.

WordPress - Screen Options - Add or Edit Post - Meta Boxes Cliquez ici pour une capture d'écran en taille réelle

Question Comment puis-je obtenir par programme une liste de toutes les options d'écran enregistrées (méta-boîtes) sur les types d'article, dans laquelle vous souhaitez ajouter ou modifier un article particulier dans votre type d'article souhaité.

En fin de compte, le but ici est de supprimer ces options et pas simplement de les désactiver. Je cherche à faire quelque chose dans le sens de ce que j'ai accompli pour supprimer les méta-boîtes inutiles du tableau de bord .

10
Michael Ecklund

Ce dont vous avez besoin est dans le $wp_meta_boxes global indexé par get_current_screen()->id. Supprimer les options d’écran supprimera également les métaboxes que vous pouvez faire juste avant d’afficher les options d’écran à l’aide du crochet 'in_admin_header'.

Supposons donc que vous souhaitiez vous débarrasser de l'option "Envoyer les rétroliens"screen que vous voyez dans cette capture d'écran:

Déposez la classe suivante dans le fichier functions.php de votre thème ou dans un plug-in que vous êtes en train de créer. Le code supprimera le option "Envoyer des rétroliens"screen (et sa metabox associée, ce que vous vouliez aussi, non? ):

class Michael_Ecklunds_Admin_Customizer {
  function __construct() {
    add_action( 'in_admin_header', array( $this, 'in_admin_header' ) );
  }
  function in_admin_header() {
    global $wp_meta_boxes;
    unset( $wp_meta_boxes[get_current_screen()->id]['normal']['core']['trackbacksdiv'] );
  }
}
new Michael_Ecklunds_Admin_Customizer();

Et voici à quoi cela ressemble après avoir ajouté le code ci-dessus à un site WordPress 3.4:

En utilisant le débogueur Zend dans PhpStorm voici l’inspection de $wp_meta_boxes[get_current_screen()->id] afin que vous puissiez voir les valeurs d’une installation par défaut de WordPress 3.4 dans l’écran de modification postérieur (j’ai encerclé les index du tableau J'ai référencé dans mon exemple, ie $wp_meta_boxes[get_current_screen()->id]['normal']['core']['trackbacksdiv']:

J'espère que c'est ce que vous cherchiez?

13
MikeSchinkel

Désolé, c’est un peu la piste secondaire, mais j’ai trouvé que c’était utile quand il s’agissait de supprimer les méta-boîtes wp out of box, mais pas beaucoup pour les méta-boîtes personnalisées ou à thème personnalisé. Pour illustrer un peu plus: j'ai installé un nouveau thème qui a introduit une méta-boîte personnalisée chaque fois que vous créez un article/une page qui apparaît dans les options de l'écran. (Je suis nouveau sur wp so) Pour une raison quelconque utilisant l'approche de Mike, je n'ai pas pu supprimer cette boîte méta personnalisée, mais cela a fonctionné pour tout ce qui n'est pas personnalisé. Pour ma stupidité, j'ai continué à frapper le mur pendant des heures, je ne pouvais toujours pas comprendre, alors j'ai dû revenir à ceci:

if (is_admin()) :
function my_remove_meta_boxes() 
{
  if(!current_user_can('administrator')) 
  {
    remove_meta_box('theme_custom_meta_box', 'post', 'side');
  }
}
add_action( 'add_meta_boxes', 'my_remove_meta_boxes' );
endif;
0
Yinnie