web-dev-qa-db-fra.com

Supprimer les métaboxes personnalisés du type de publication personnalisé

Existe-t-il un moyen de créer un type de message personnalisé dans wordpress qui n'inclura que les métaboxes par défaut et non les autres métabox ajoutés par d'autres plugins.

L'idée est d'utiliser la publication personnalisée pour développer un plug-in. Ce plug-in doit disposer de toutes les fonctions de type de publication personnalisées, mais avec tous les métaboxes que le plug-in ajoute, comme all-in-seo.

Je veux créer une interface propre pour l'utilisateur et ces metabox supplémentaires sont dans le chemin :-)

3
Bob Tolbert

De mémoire, sans le tester, cela devrait marcher. Vous voulez tester is_admin pour éviter d'exécuter le code sur le serveur frontal, puis de tester également si le type de publication est égal à son slug. Edité cela parce que j'ai commis une erreur stupide avant.

Faites référence à cette page du Codex: http://codex.wordpress.org/Function_Reference/remove_meta_box

if( is_admin() ) {
    remove_meta_box('linktargetdiv', '$posttype', 'normal');
    remove_meta_box('linkxfndiv', '$posttype', 'normal');
    remove_meta_box('linkadvanceddiv', '$posttype', 'normal');
    remove_meta_box('postexcerpt', '$posttype', 'normal');
    remove_meta_box('trackbacksdiv', '$posttype', 'normal');
    remove_meta_box('postcustom', '$posttype', 'normal');
    remove_meta_box('commentstatusdiv', '$posttype', 'normal');
    remove_meta_box('commentsdiv', '$posttype', 'normal');
    remove_meta_box('revisionsdiv', '$posttype', 'normal');
    remove_meta_box('authordiv', '$posttype', 'normal');
    remove_meta_box('sqpt-meta-tags', '$posttype', 'normal');
}
4
Imperative Ideas

Vous pouvez trouver la meilleure réponse ici: http://codex.wordpress.org/Function_Reference/remove_meta_box

Certaines méta-boîtes peuvent être supprimées en ajoutant quelque chose comme le code ci-dessous au fichier functions.php de votre thème WordPress:

 // masque certaines méta-boîtes dans le type de message personnalisé "YOUR_CUSTOM_POST_TYPE" 
 add_filter ('add_meta_boxes', 'hide_meta_boxes_YOUR_CUSTOM_POST_TYPE'); 
 function hide_meta_boxHoi remove_meta_box ('postexcerpt', 'YOUR_CUSTOM_POST_TYPE', 'normal'); 
 remove_meta_box ('trackbacksdiv', 'YOUR_CUSTOM_POST_TYPE', 'normal'); 
 remove_meta_box ('postcustom', 'post-custom' 'normal'); 
 remove_meta_box ('slugdiv', 'YOUR_CUSTOM_POST_TYPE', 'normal'); 
 remove_meta_box ('commentstatusdiv', 'YOUR_CUSTOM_POST_TYPE', 'normal'), 
 remove_meta_box ('commentsdiv', 'YOUR_CUSTOM_POST_TYPE', 'normal'); 
 remove_meta_box ('revisionsdiv', 'YOUR_CUSTOM_POST_TYPE', 'normal'); 
} 
2
sanchu

Tout d'abord, vous ne devriez pas le faire. Si un utilisateur a installé d’autres plugins, c’est parce qu’il/elle veut l’utiliser, même si votre plugin fournit toutes les fonctionnalités de ce plugin, qui dit que pour les utilisateurs, votre plugin est meilleur que les autres?

Et si ces utilisateurs ont déjà des tonnes de paramètres avec d’autres plugins et les voient disparaître lors de l’installation de votre plugin? Je parie que les utilisateurs désinstallent immédiatement votre plugin (et s'il y a une possibilité, des votes très bas viendront dans ce cas).

Considérez également qu'un autre plugin peut utiliser la même technique pour supprimer vos métaboxes. Un autre plugin supprimera les métaboxes de ce plugin, et ainsi de suite ...

Qu'est-ce que ce sera, la guerre des métaboxes ?

Ma suggestion est d'ajouter vos métaboxes et de laisser les utilisateurs décider quels métaboxes laisser et quels supprimer (plugin unistalling ou décocher la métabox à partir de l'onglet "Aide à l'écran").

Enfin, notez que vous ne pouvez pas supprimer les métaboxes d'un plug-in si vous ne connaissez pas l'id de ces métaboxes. Donc, pour faire ce que vous voulez, vous devez installer tous vos plugins " concurrents ", regarder l'id de leurs metaboxes et les supprimer en utilisant remove_meta_box.

Et si un plugin est mis à jour et modifie l'identifiant de ses métaboxes?

Croyez-moi, c'est un travail dur, sale et sans avantages.

0
gmazzap

Avec les autres réponses, j’ai trouvé que si vous créez votre type de message personnalisé avec

$args = array(
    ...
    public => false
    ...
) 

Certains métaboxes ne seront pas inclus tels que Wordpress Seo de Yoast par exemple. Dans mon cas, utiliser le cpt pour un popup, donc les autres métaboxes ne sont pas nécessaires et le cpt n'est pas nécessaire pour être public.

0
chifliiiii