Je serais ravi de pouvoir masquer les méta-boîtes à l'aide des options d'écran, au lieu de les supprimer ou de les restreindre aux rôles d'utilisateur, le but est de simplement "décocher" la méta-boîte pour l'utilisateur.
Je vois comment cela serait délicat car tout code qui ferait un changement de base de données pour un utilisateur ne serait pas autorisé à s'exécuter à chaque fois qu'il accède à la page, car il se réinitialiserait simplement. Mais les gens plus intelligents que moi codent le noyau, alors peut-être qu'il y a un moyen. Et s'il y en a, je meurs d'envie de savoir.
Des idées?
Réponses:
Vous faites référence aux métaboxes sur l'écran de publication d'administrateur à droite?
Pour cela, vous n'avez pas besoin d'un plugin, déposez simplement ce qui suit dans votre fichier functions.php.
Fondamentalement, ce qui se passe, c'est que pour l'utilisateur actuellement connecté, vous modifiez des méta_valeurs enregistrées dans la table wp_usermeta.
Il existe deux façons d'utiliser cette fonction, vous pouvez soit vous connecter à 'user_register', soit vous connecter à 'admin_init'.
L'avantage d'utiliser 'user_register' est que cette fonction ne se déclenchera que lorsqu'un nouvel utilisateur sera enregistré (donc une surcharge plus faible). Cependant, cela ne fonctionnera pas pour les utilisateurs qui existent déjà.
Si vous souhaitez que cela fonctionne pour les utilisateurs qui existent déjà, connectez-vous à «admin_init». L'inconvénient est bien sûr que cette fonction se déclenche à chaque fois qu'un utilisateur accède à la page d'administration.
la source
functions.php
fichier de mon thème car les options par défaut sont pour un projet spécifique, qui est représenté / hébergé par le thème que je développe.Il y a un
default_hidden_meta_boxes
filtreget_hidden_meta_boxes()
qui permet de modifier qui ne sont pas affichés tant que l'utilisateur n'a pas modifié ses préférences dans les options d'écran.la source
J'ai des commentaires de code sur trois solutions déjà publiées, mais aussi un commentaire général
Ils présentent un choix sous-optimal: soit remplacer le choix de la case Options d'écran de l'utilisateur; ou respectez-le mais faites ignorer votre code si l'utilisateur a déjà modifié les cases à cocher, même pour d'autres méta_boxes, ou avant que votre code ne soit dans WP. Il semble que le choix respectueux ne soit utile que si tous vos utilisateurs sont nouveaux. La meilleure solution serait de définir une option utilisateur personnalisée pour déterminer si vos paramètres par défaut meta_box spécifiques ont été modifiés par l'utilisateur, et respecter cela. Non, je n'ai pas écrit ce code! Ça devrait être facile ... :)
Les trois solutions proposées:
1. La
hidden_meta_boxes
solution de WraithKenny est celle qui remplace l'option user_option. Notez qu'il couvre tous les types de publication («publication», «page», «lien», «pièce jointe» et tous les types de publication personnalisés). C'est bien, sauf si vous voulez que ce soit précis. Vous avez spécifié les post_type dans vosadd_meta_box()
appels. Vous pouvez essayer de faire correspondre ceux-ci, ou tout simplement le faire car ceux qui ne correspondent pas seront ignorés. Si vous voulez connaître le post_type dans le filtre, vous pouvez utiliser lescreen
paramètre supplémentaire :2. Comme le dit Rarst,
default_hidden_meta_boxes
respecte l'option user_option. Comme avechidden_meta_boxes
, vous pouvez utiliser le paramètre $ screen pour distinguer les post_types.3. La fonction set_user_metaboxes () de Drebabels respecte également l'option user_option. Notez qu'il est codé en dur pour l'écran d'édition «post». Pour gérer l'écran d'édition de la page et d'autres post_types, encapsulez le code dans cette boucle:
Ouais, ça
get_user_meta
devrait l'êtreget_user_option
. Pour un site unique, cela n'a pas d'importance, et même pour plusieurs sites, cela n'a probablement pas d'importance. Voir wp-admin / includes / ajax-actions.php pour savoir pourquoi:update_user_option
a le "vrai" paramètre global.la source
Il existe également un
hidden_meta_boxes
filtre qui "décocherait" la métaboxe (la rendant masquée) à chaque chargement de page (mais n'aurait pas du tout à mettre à jour la base de données). Si vous voulez simplement le désactiver pour les nouveaux utilisateurs jusqu'à ce qu'ils cochent la case eux-mêmes, utilisez la réponse de Rarst.la source