Salut @BinaryBit:
Il n'est pas étonnant que vous soyez un peu frustré; le menu d'administration est l'une des implémentations les plus obtus et les plus frustrantes de WordPress core. Honnêtement, je ne sais pas ce qu'ils pensaient quand ils l'ont conçu de cette façon.
@EAMann a fait un excellent travail pour expliquer comment les menus d'administration fonctionnent dans WordPress (j'aurais aimé pouvoir le lire il y a environ 4 mois ... :)
Pourtant, après avoir compris comment cela fonctionnait, j'étais toujours à court de travailler avec elle sans consacrer suffisamment de temps à garder la tête droite pendant que j'essayais de faire des choses simples. C'est pourquoi j'ai construit une API de menu qui simplifie et rationalise le travail avec le menu d'administration WordPress.
Ils sont 100% compatibles avec les structures existantes de WordPress et toujours très bien en alpha depuis que je suis le seul à l'utiliser. Je suis sûr qu'il existe des cas d'utilisation qu'ils ne gèrent pas encore. Mais je posterai le code ici pour que vous et les autres puissiez l'essayer.
Vous pouvez télécharger le fichier à déposer dans le répertoire de votre thème ici: wp-admin-menu-classes.php et ce qui suit montre comment vous pouvez appeler les fonctions dans le functions.php
fichier de votre thème :
<?php
require_once('wp-admin-menu-classes.php');
add_action('admin_menu','my_admin_menu');
function my_admin_menu() {
swap_admin_menu_sections('Pages','Posts'); // Swap location of Posts Section with Pages Section
rename_admin_menu_section('Media','Photos & Video'); // Rename Media Section to "Photos & Video"
delete_admin_menu_section('Links'); // Get rid of Links Section
$movie_tags_item_array = get_admin_menu_item_array('Movies','Movie Tags'); // Save off the Movie Tags Menu
update_admin_menu_section('Movies',array( // Rename two Movie Menu Items and Delete the Movie Tags Item
array('rename-item','item'=>'Movies','new_title'=>'List Movies'),
array('rename-item','item'=>'Add New','new_title'=>'Add Movie'),
array('delete-item','item'=>'Movie Tags'),
));
copy_admin_menu_item('Movies',array('Actors','Add New')); // Copy the 'Add New' over from Actors
renamed_admin_menu_item('Movies','Add New','Add Actor'); // Rename copied Actor 'Add New' to 'Add Actor
add_admin_menu_item('Movies',array( // (Another way to get a 'Add Actor' Link to a section.)
'title' => 'Alt Add Actor ',
'slug' => 'post-new.php?post_type=actor',
), array(// Add Back the Movie Tags at the end.
'where'=>'end'
));
add_admin_menu_item('Movies',$movie_tags_item_array,array(// Add Back the Movie Tags at the end.
'where'=>'end'
));
delete_admin_menu_section('Actors'); // Finally just get rid of the actors section
}
De plus, ces fonctions sont même à l'étude (en tant que base) pour inclusion dans WordPress 3.1, donc si nous sommes chanceux, elles pourraient même devenir standard!
Voici une présentation rapide de la façon dont le menu d'administration WordPress est construit - je ne parle pas de l'
add_menu_page
API, je veux dire le menu WordPress par défaut réel.Appel du fichier de menu
Le menu est, évidemment, chargé par
wp-admin/admin.php
. Mais il n'est pas chargé via l'API standard que nous avons l'habitude d'utiliser sur la base de la documentation WordPress. Au contraire, l'ensemble du menu (toutes les options possibles, sous-menus, etc.) est chargé via un tableau simple défini danswp-admin/menu.php
.Donc, pour charger le système de menus, il
admin.php
suffit derequire
smenu.php
... autour de la ligne 99 dans WordPress 3.0.Chargement du menu
Le menu lui-même est stocké dans le tableau global
$menu
. Selon la documentation en ligne, le tableau de menus comprend les éléments suivants:Le tableau de bord, par exemple, est:
Le fichier parcourt et charge chaque élément de menu dans le tableau et charge tous leurs éléments de sous-menu dans un tableau appelé
$submenu
index en fonction de l'URL du menu parent. Ainsi, l'élément de sous-menu du tableau de bord appelé "Dashboard" est:Une fois que le système a terminé de charger tous les menus (il n'y en a pas beaucoup, mais le système parcourt l'index au moment de 5 ou 10 ... notez que le tableau de bord, même s'il s'agit du premier élément de menu, est toujours indexé comme item "2" (les tableaux PHP commencent à l'index 0 ... donc cela vous donne une certaine marge de manœuvre).
À ce stade, le système appelle
wp-admin/includes/menu.php
.Parcourir le menu
Ce troisième fichier parcourt chaque élément de menu et, en fonction des privilèges attribués à l'utilisateur actuel, utilise le menu ou le supprime. Tout d'abord, il parcourt tous les sous-menus et supprime les pages auxquelles l'utilisateur ne peut pas accéder. Ensuite, il parcourt les pages parent et fait la même chose. Ensuite, il supprime tous les séparateurs en double qui restent après avoir supprimé les menus.
Enfin, il trie les menus en fonction de leur ordre de menu attribué.
Commande de menus personnalisés
Le hook
admin_menu
est appelé après la configuration des menus mais avant toute commande. Il est donc possible de commander l'intégralité du système de menus WordPress sans "pirater" l'API.Une fois l'action
admin_menu
déclenchée, vos pages personnalisées sont chargées dans le système. La prochaine chose qui se passe, c'est que WordPress vérifie un filtre appelécustom_menu_order
... ce filtre est toujours renvoyéfalse
et indique à WordPress si vous souhaitez ou non utiliser une commande personnalisée.Ajoutez ce qui suit à votre thème pour définir le drapeau à la
true
place et définir votre ordre de menu explicite:Spécifiez l'ordre que vous souhaitez pour tous les menus (j'ai fourni des références au fichier de chargement de menu afin que vous puissiez obtenir une liste de noms de fichiers) et cela devrait s'en occuper.
EDIT (9/2/2010):
Pour spécifier l'ordre de l'écran d'édition d'un type de publication personnalisé à l'aide de cette méthode, vous devez connaître l'URL de l'écran d'édition. Dans la plupart des cas, ce sera le cas
http://blog.url/wp-admin/edit.php?post_type=POST_TYPE
. Cela dépend de la configuration de WordPress sur votre site (s'il est installé à la racine ou dans un sous-dossier) et du slug du type de publication personnalisé que vous utilisez.Par exemple...
Supposons que vous ayez un type de publication personnalisé pour «Stack Exchange Questions» et que vous souhaitiez que l'éditeur apparaisse dans la même section que le tableau de bord directement sous l'icône du tableau de bord. Vous utiliseriez le code suivant dans le
functions.php
fichier de votre thème :Le reste du menu ne sera pas affecté, mais votre page d'édition personnalisée sera déplacée vers la même section que le tableau de bord et apparaîtra immédiatement en dessous. Vous pouvez l'utiliser pour déplacer vos types de publication personnalisés vers n'importe quelle section du menu d'administration et les placer dans n'importe quel ordre. Vous pouvez également déplacer les éléments de menu standard de la même manière.
Assurez-vous simplement de spécifier l'ordre de tous les éléments de menu dans la section donnée , sinon votre menu pourrait être sujet à une bizarrerie inattendue.
la source
$
sur le nom de la variable ... (Excellente réponse cependant) ..Je me rends compte que c'est un vieux fil, mais je pense qu'il vaut la peine d'être mis à jour avec une solution BEAUCOUP plus facile. Veuillez noter que cela fonctionne avec 3.5 et n'a été testé avec aucune autre version. Le code suivant peut être placé dans un plugin ou dans le fichier functions.php.
Voir: http://codex.wordpress.org/Plugin_API/Filter_Reference/menu_order . Modifié légèrement pour répondre aux besoins de l'affiche originale (cependant, j'espère qu'il a trouvé une solution maintenant ...).
Tous les éléments du menu d'administration qui ne sont pas répertoriés ici ne seront pas supprimés. Ils seront ajoutés en bas du menu.
la source
Je comprends que vous ne voulez pas utiliser de plugin, mais pour plus de simplicité, essayez le plugin Admin Menu Editor de Janis Elsts. Réorganisez vos menus d'administration comme bon vous semble; peut également masquer les éléments de menu.
la source
Pour déplacer des éléments de menu, j'aime utiliser la
$menu
variable Global .Par exemple, si je voulais déplacer le menu "Pages" en bas des menus, j'utiliserais ceci dans
functions.php
ou un plugin:et si je voulais échanger les menus Messages et Liens:
J'utilise cette astuce depuis un petit moment, je viens de la tester avec WP 3.4.1
la source
admin_menu_items
fonction qui a été corrigée en la remplaçant parunset($menu[20]);
Impressionnant. Merci beaucoup. Je viens de mettre quelques lignes de code dans mes fonctions.php
De plus, en plaçant le wp-admin-menu-classes.php dans mon dossier de thème et maintenant le bouton «posts» est remplacé par le bouton «pages».
J'espère que cela fera bientôt partie du noyau de manière à ce que nous n'ayons pas besoin d'écrire tout le menu dans une fonction pour simplement réorganiser deux boutons.
En fait, il était un peu difficile d'obtenir un ordre plus précis pour 4 boutons. Afin de changer les 4 boutons en: Pages, Post, Media, Links, j'avais besoin d'utiliser le code suivant:
la source