Changer l'ordre des sections du menu Admin?
5 réponses
- votes
-
- 2010-09-02
Bonjour @BinaryBit:
Iln'estpas étonnant que vous soyez unpeufrustré; lemenu d'administrationest l'une desimplémentations lesplus obtuseset lesplusfrustrantes du cœur de WordPress. Honnêtement,je ne saispas à quoiilspensaient quandils l'ont conçu de cettefaçon.
@EAMann afait un excellent travailpourexpliquer lefonctionnement desmenus d'administration dans WordPress (j'aurais aimépouvoir lire ça àpropos Il y a 4mois ... :)
Pourtant,après avoir compris comment celafonctionnait,j'étaistoujoursincapable detravailler avec sans consacrer suffisamment detempspourgarder latête droitependant quej'essayais defaire des choses simples. C'estpourquoij'ai créé une API demenu qui simplifieet rationalise letravail avec lemenu d'administration de WordPress.
Ils sont 100% compatibles avec les structuresexistantes de WordPresset toujourstrèsen alphapuisqueje suis le seul à l'utiliser. Je suis sûr qu'il y a des cas d'utilisation qu'ilsne gèrentpasencore. Maisje publierai le codeicipour que vouset d'autrespersonnespuissiez l'essayer.
Vouspouvez télécharger lefichier à déposer dans le répertoire de votrethèmeici: wp-admin -menu-classes.php et ce qui suitmontre comment vouspouvez appeler lesfonctions dans lefichier
functions.php
de votrethè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 }
Deplus,cesfonctions sontmême à l'étude (entant quebase)pourinclusion dans WordPress 3.1 donc sinous avons de la chance,ilspourraientmême devenir standard!
Hi @BinaryBit:
It's no wonder you are a bit frustrated; the admin menu is one of the most obtuse and frustrating implementations through WordPress core. Honestly, I don't know what they were thinking when they designed it that way.
@EAMann did an excellent job of explaining how the admin menus work in WordPress (I wish I had been able to read that about 4 months ago... :)
Still, after I figured it out how it worked I was still at a loss to work with it without devoting enough time to keep my head straight while I tried to do simple things. So that's why I built a Menu API that simplifies and streamlines working with the WordPress admin menu.
They are 100% compatible with WordPress' existing structures and still very much in alpha since I've been the only one using it. I'm sure there are use-cases they do not yet handle. But I'll post the code here for you and others to try out.
You can download the file to drop in your theme's directory here: wp-admin-menu-classes.php and what follows shows how you might call the functions in your theme's
functions.php
file:<?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 }
What's more, these functions are even under consideration (as a base) for inclusion in WordPress 3.1 so if we're lucky these might even become standard!
-
* Ajoutfantastique * à l'API!Ilm'afallu desmoispour ajoutermapremière section demenupersonnalisé avec leframeworkexistant (c'estpourquoij'aibeaucoup étudié le code) ...mais votre API semblebien plusintuitive à utiliser!*Fantastic* addition to the API! It took me months to add my first custom menu section with the existing framework (which is why I studied the code do much) ... but your API seems much more intuitive to use!
- 0
- 2010-09-02
- EAMann
-
* @ EAMann * - Merci!Si vous souhaitezproposer des suggestions oumême collaborerpour l'améliorer,j'aimeraisbien établir quelque chose quipourraitfaciliter latâche detout lemonde,saufpour les rarespersonnes qui voient ce Q&R.*@EAMann* - Thanks! If you want to offer any suggestions or even collaborate on improving it I'd love to get something established that could make it easier for everyone except for just the few who happen to see this Q&A.
- 0
- 2010-09-03
- MikeSchinkel
-
est-ce que cela afait lenoyau ouest-ce que cela ou quelque chose de similaireestencorenécessairepourmanipuler l'ordre des éléments demenu dans l'administrateur?did this make core or is this or something similar still required to manipulate the order of menu items in the admin?
- 0
- 2012-09-12
- Q Studio
-
Autant quej'aitrouvé,il a été reporté à WP 3.5As far as i have found, it's been postponed to WP 3.5
- 0
- 2012-09-22
- pixeline
-
Hey Mike - wp_debugjette uneerreur sur cettefonction: --------function swap_admin_menu_sections ($from_section,$to_section) { $from_section=get_admin_menu_section ($from_section); if ($from_section) $from_section-> swap_with ($ vers_section); return $ section; } --- Avis: Variablenon définie: sectionHey Mike - wp_debug throws an error on this function: -------- function swap_admin_menu_sections($from_section,$to_section) { $from_section = get_admin_menu_section($from_section); if ($from_section) $from_section->swap_with($to_section); return $section; } --- Notice: Undefined variable: section
- 0
- 2012-10-11
- Q Studio
-
- 2012-12-20
Jeme rends compte que c'est un vieuxfil de discussion,maisje pense qu'il vaut lapeine d'êtremis àjour avec une solution BEAUCOUPplus simple. Veuilleznoter que celafonctionne avec 3.5et n'a ététesté avec aucune autre version. Le code suivantpeut êtreplacé dans unplugin ou dans lefichierfunctions.php.
Voir: http://codex.wordpress.org/Plugin_API/Filter_Reference/menu_order . Modifié légèrementpour répondre auxbesoins de l'affiche originale (cependant,j'espère qu'il atrouvé une solutionmaintenant ...).
// Rearrange the admin menu function custom_menu_order($menu_ord) { if (!$menu_ord) return true; return array( 'index.php', // Dashboard 'edit.php?post_type=custom_type_one', // Custom type one 'edit.php?post_type=custom_type_two', // Custom type two 'edit.php?post_type=custom_type_three', // Custom type three 'edit.php?post_type=custom_type_four', // Custom type four 'edit.php?post_type=custom_type_five', // Custom type five 'separator1', // First separator 'edit.php?post_type=page', // Pages 'edit.php', // Posts 'upload.php', // Media 'link-manager.php', // Links 'edit-comments.php', // Comments 'separator2', // Second separator 'themes.php', // Appearance 'plugins.php', // Plugins 'users.php', // Users 'tools.php', // Tools 'options-general.php', // Settings 'separator-last', // Last separator ); } add_filter('custom_menu_order', 'custom_menu_order'); // Activate custom_menu_order add_filter('menu_order', 'custom_menu_order');
Tous les éléments dumenu d'administration quine sontpas répertoriésicine serontpas supprimés. Ils seront ajoutés aubas dumenu.
I realize this is an old thread, but I think it's worth updating with a MUCH easier solution. Please note that this works with 3.5 and has not been tested with any other version. The following code can be placed in a plugin or the functions.php file.
See: http://codex.wordpress.org/Plugin_API/Filter_Reference/menu_order. Modified slightly to suit the original poster's needs (though, I hope he found a solution by now...).
// Rearrange the admin menu function custom_menu_order($menu_ord) { if (!$menu_ord) return true; return array( 'index.php', // Dashboard 'edit.php?post_type=custom_type_one', // Custom type one 'edit.php?post_type=custom_type_two', // Custom type two 'edit.php?post_type=custom_type_three', // Custom type three 'edit.php?post_type=custom_type_four', // Custom type four 'edit.php?post_type=custom_type_five', // Custom type five 'separator1', // First separator 'edit.php?post_type=page', // Pages 'edit.php', // Posts 'upload.php', // Media 'link-manager.php', // Links 'edit-comments.php', // Comments 'separator2', // Second separator 'themes.php', // Appearance 'plugins.php', // Plugins 'users.php', // Users 'tools.php', // Tools 'options-general.php', // Settings 'separator-last', // Last separator ); } add_filter('custom_menu_order', 'custom_menu_order'); // Activate custom_menu_order add_filter('menu_order', 'custom_menu_order');
Any items in the admin menu that are not listed here won't be removed. They will be appended to the bottom of the menu.
-
Oui,c'estbeaucoupmieux,égalementpour réorganiser les éléments du sous-menu,vouspouvez les annuler,puis les réinitialiser.Yes this is much better, also to re-order submenu items you can unset and then reset them.
- 1
- 2012-12-20
- Wyck
-
- 2010-09-04
Je comprends que vousne voulezpas utiliser deplugin,maispourplus de simplicité,essayez leplugin Admin Menu Editor de Janis Elsts.Réorganisez vosmenus d'administration comme vous le souhaitez;peut égalementmasquer les éléments demenu.
I understand you don't want to use a plugin, but for pure simplicity, try the Admin Menu Editor plugin by Janis Elsts. Rearrange your admin menus any way you like; can also hide menu items.
-
J'aiessayé ceplugin dans uneinstallationmultisite. Ilfonctionnemieux,maisnous devons configurermanuellement les optionspour chaque sous-site sinous avons uneinstallationmultisite.I tried this plugin in multisite installation .It works best.But we need to manually configure the options for every sub-site if we have multisite Installation.
- 0
- 2010-10-13
- user391
-
- 2012-11-08
Pour déplacer les éléments demenu,j'aime utiliser la variableglobale
$menu
.Parexemple,sije voulais déplacer lemenu "Pages" vers lebas desmenus,j'utiliserais ceci dans
functions.php
ou dans unplugin:function admin_menu_items() { global $menu; $menu[102]=$menu[20];//make menu 102 be the same as menu 20 (pages) $menu[20]=array();//make original pages menu disappear } add_action('admin_menu', 'admin_menu_items');
et sije voulaispermuter lesmenus Articleset Liens:
function admin_menu_items() { global $menu; $storemenu = $menu[15];//save links menu into $storemenu $menu[15] = $menu[5];//make links menu = posts menu $menu[5] = $storemenu; //make menu 5/posts = $storemenu/links } add_action('admin_menu', 'admin_menu_items');
J'utilise cette astuce depuis unpetit moment,justetesté avec WP 3.4.1
To move menu items around, I like using the Global
$menu
variable.For example, if I wanted to move the "Pages" menu to the bottom of the menus, I would use this in
functions.php
or a plugin:function admin_menu_items() { global $menu; $menu[102]=$menu[20];//make menu 102 be the same as menu 20 (pages) $menu[20]=array();//make original pages menu disappear } add_action('admin_menu', 'admin_menu_items');
and if I wanted to swap the Posts and Links menus:
function admin_menu_items() { global $menu; $storemenu = $menu[15];//save links menu into $storemenu $menu[15] = $menu[5];//make links menu = posts menu $menu[5] = $storemenu; //make menu 5/posts = $storemenu/links } add_action('admin_menu', 'admin_menu_items');
Been using this trick a little while, just tested with WP 3.4.1
-
Je sais que c'est un articleplus ancien,maisen ce qui concerne votrepremierextrait de code,j'ai rencontré unproblème avec la dernière ligne de lafonction `admin_menu_items` qui a été corrigéeen la remplaçantpar` unset ($menu [20]); `I know this is an older post but with regards to your first snippet I ran into an issue with the last line in the `admin_menu_items` function which was fixed by replacing it with `unset($menu[20]);`
- 0
- 2017-08-04
- hot_barbara
-
- 2012-03-05
Génial. Mercibeaucoup. Je viens demettre quelques lignes de code dansmonfunctions.php
require_once('/extras/wp-admin-menu-classes.php'); add_action('admin_menu','my_admin_menu'); function my_admin_menu() { swap_admin_menu_sections('Pages','Posts'); // Swop location of Posts Section with Pages Section }
Deplus,placer le wp-admin-menu-classes.php dansmon dossier dethèmeet maintenant le ' Lebouton "posts"est remplacépar lebouton "pages".
Enfait,il était unpeu difficile d'obtenir un ordreplusprécispour 4boutons. Pour changer les 4boutonsen: Pages,Post,Médias,Liens J'avaisbesoin d'utiliser le code suivant:
swap_admin_menu_sections('Pages','Posts'); swap_admin_menu_sections('Media','Links'); swap_admin_menu_sections('Posts','Links');
Awesome. Thank you so much. I just put some lines of code into my functions.php
require_once('/extras/wp-admin-menu-classes.php'); add_action('admin_menu','my_admin_menu'); function my_admin_menu() { swap_admin_menu_sections('Pages','Posts'); // Swop location of Posts Section with Pages Section }
Plus placing the wp-admin-menu-classes.php in my theme folder and now the 'posts' button is swopped with the 'pages' button.
I hope this will become part of the core soon and in a way so that we don't need to write the whole menu within a function to just reorder two buttons.
In fact it was a bit tricky to get a more specified order for 4 buttons. In order to change the of 4 buttons to: Pages, Post, Media, Links I needed to use the folowing code:
swap_admin_menu_sections('Pages','Posts'); swap_admin_menu_sections('Media','Links'); swap_admin_menu_sections('Posts','Links');
Je suis unpeufrustréici après avoirpassé quelques heures àessayer d'accomplir cettetâche assez simple sans aucune chance.
J'aiessentiellement 5types d'articlespersonnalisés quej'ai crééset tout ce queje veuxfaireest demontrer chacun d'eux dans un ordre spécifique directement sous le "tableau debord" .
D'après la documentation WordPress,il semble que vousne puissiezpas vraimentfaire cela car l'ordre leplus élevé dumenu semble être "5". Et ci-dessus L
Je suppose que certainsexperts lisant cecipeuventme montrer lamanière simple dontje peux ordonner lemenu d'administrationexactement commeje le souhaiteen utilisant lefichier defonctionset sans utiliser deplugin (dontje sais qu'ilexiste).
Allez-yet essayez de créer 5types depublication séparéset de lesinclure dans un ordre spécifique directement sous letableau debord ...il semble que cene soitpaspossible.?? ... y a-t-il untype de hackjquerypourfaire celatravail que quelqu'unpourraitpartager avecmoi ou depréférence sans utiliserjQuery?