Question

Je reçois un peu frustré ici après avoir passé quelques heures à essayer d'accomplir cette tâche assez simple sans chance.

Essentiellement, j'ai 5 types de poste personnalisé que j'ai créé et tout ce que je veux faire est de montrer chacun d'entre eux dans un ordre spécifique directement sous la « tableau de bord » .

De la documentation de WordPress, il semble que vous ne pouvez pas vraiment faire cela parce que l'ordre de menu plus haut semble être « 5 ». Et ci-dessus L

Je devine que certains experts lisant cela peut me montrer le chemin simple que je peux commander le menu admin exactement la façon dont je veux en utilisant le fichier fonctions et sans utiliser un plugin (que je sais existe).

S'il vous plaît aller de l'avant et essayer de créer 5 types de postes séparés et de les inclure dans un ordre spécifique directement sous le tableau de bord ... il semble que ce n'est pas possible. ?? ... est-il un certain type de hack jquery pour faire de cette travail que quelqu'un pourrait partager avec moi ou, de préférence sans utiliser jQuery?

Était-ce utile?

La solution

Salut @BinaryBit:

Il est pas étonnant que vous êtes un peu frustré; le menu d'administration est l'un des plus obtus implémentations et frustrant par coeur WordPress. Honnêtement, je ne sais pas ce qu'ils pensaient quand ils ont conçu cette façon.

@EAMann a fait un excellente emploi d'expliquer le fonctionnement des menus admin dans WordPress (Je voudrais avoir pu lire à ce sujet il y a 4 mois ... :)

Pourtant, après avoir tout compris comment cela fonctionnait j'étais encore à une perte de travailler avec elle sans y consacrer suffisamment de temps pour garder ma tête droite pendant que j'essayé de faire des choses simples. Voilà pourquoi je construit une API Menu qui permet de simplifier et rationalise travaillant avec le menu admin WordPress.

Ils sont 100% compatibles avec WordPress' les structures existantes et encore très en alpha depuis que je suis le seul à l'utiliser. Je suis sûr qu'il ya des cas d'utilisation, ils ne traitent pas encore. Mais je vais poster le code ici pour vous et les autres à 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 fichier functions.php 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
}

Quoi de plus, ces fonctions sont encore à l'étude (comme base) pour l'inclusion dans WordPress 3.1 donc si nous sommes chanceux ceux-ci pourraient même devenir la norme!

Autres conseils

Voici une soluce rapide de la façon dont le menu admin WordPress est construit - Je ne parle pas l'API add_menu_page, je veux dire le menu WordPress par défaut réelle

.

Appeler le menu Fichier

Le menu est, évidemment, chargé par wp-admin/admin.php. Mais ce n'est pas chargé par l'API standard, nous sommes habitués à utiliser en fonction de la documentation de WordPress. Au contraire, le menu complet (toutes les options possibles, sous-menus, etc) sont chargés par un simple tableau qui est défini dans wp-admin/menu.php.

pour charger le système de menu, admin.php juste requires menu.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 menu a ces éléments:

The elements in the array are:
    *     0: Menu item name
    *     1: Minimum level or capability required.
    *     2: The URL of the item's file
    *     3: Class
    *     4: ID
    *     5: Icon for top level menu

Le tableau de bord, par exemple, est la suivante:

$menu[2] = array( __('Dashboard'), 'read', 'index.php', '', 'menu-top menu-top-first menu-icon-dashboard', 'menu-dashboard', 'div' );

Le fichier passe par et charges chaque élément de menu dans le tableau et les charges de tous leurs sous-menus dans un tableau appelé $submenu qui indexe basés sur l'URL du menu parent. Ainsi, le sous-menu de Dashboard appelé « Tableau de bord » est:

 $submenu[ 'index.php' ][0] = array( __('Dashboard'), 'read', 'index.php' );

Une fois le système de chargement fait tous les menus (il n'y a pas beaucoup, mais les étapes du système par l'indice au moment de 5 ou 10 ... Notez que le tableau de bord, même si elle est le premier élément de menu, est encore indexé comme élément « 2 » (tableaux PHP à partir de l'index 0 ... donc cela vous donne une certaine marge de manœuvre).

À ce stade, le système appelle wp-admin/includes/menu.php.

Parcourant le menu

Ce troisième marche fichier à travers chaque élément de menu et, en fonction des privilèges attribués à l'utilisateur actuel, soit utilise le menu ou le supprime. D'abord, il boucles à travers tous les sous-menus et supprime les pages que l'utilisateur ne peut pas accéder. Ensuite, il boucle à travers les pages parent et fait la même chose. Ensuite, il supprime les séparateurs en double qui restent d'avoir des menus éliminés.

Enfin, il trie les menus en fonction de leur ordre de menu attribué.

Commande des menus personnalisés

Le crochet admin_menu est appelé après les menus sont mis en place, mais avant quoi que ce soit est ordonné. Il est donc possible de commander l'ensemble du système de menu WordPress sans « piratage » l'API.

Après la admin_menu d'action est tiré, vos pages personnalisées sont chargés dans le système. La prochaine chose qui se passe, est vérifie WordPress un filtre appelé custom_menu_order ... ce filtre est toujours retourné false et dit WordPress si vous souhaitez utiliser une commande personnalisée.

Ajoutez ce qui suit à votre thème pour définir le drapeau à la place true et définir votre commande de menu explicite:

function custom_menu_order($menu_ord) {
       if (!$menu_ord) return true;
       return array('index.php', 'edit.php', 'edit-comments.php');
}

add_filter('custom_menu_order', 'custom_menu_order');
add_filter('menu_order', 'custom_menu_order');

Indiquez l'ordre que vous voulez pour tous les menus (je fournis les références au fichier menu de chargement de sorte que vous pouvez obtenir une liste des noms de fichiers) et cela devrait en prendre soin.


EDIT (9/2/2010):

Pour spécifier l'ordre d'un écran d'édition de poste personnalisée de type en utilisant cette méthode, vous devez connaître l'URL de l'écran d'édition. Je la plupart des cas, ce sera http://blog.url/wp-admin/edit.php?post_type=POST_TYPE. Cela dépend de la façon dont WordPress est mis en place sur votre site (si elle est installée dans la racine ou dans un sous-dossier) et la limace du type de poste personnalisé que vous utilisez.

Par exemple ...

Le mot Let vous avez un type de poste personnalisé pour « Questions Stack échange » et vous voulez 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 fichier functions.php de votre thème:

function custom_menu_order($menu_ord) {
       if (!$menu_ord) return true;
       return array('index.php', 'edit.php?post_type=stack_exchange_questions');
}

add_filter('custom_menu_order', 'custom_menu_order');
add_filter('menu_order', 'custom_menu_order');

Le reste du menu ne sera pas affecté, mais votre page d'édition personnalisée sera déplacé à 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 postes personnalisés à une section du menu d'administration et les placer dans un ordre quelconque. Vous pouvez également déplacer des éléments de menu standard autour de la même manière.

Assurez-vous you spécifier l'ordre de tous les éléments du menu dans la section donnée , sinon votre menu pourrait faire l'objet d'une bizarrerie inattendue.

Je sais que c'est un vieux fil, mais je pense qu'il est mise à jour vaut la peine avec une solution beaucoup plus facile. S'il vous plaît noter que cela fonctionne avec 3,5 et n'a pas été testé avec une autre version. Le code suivant peut être placé dans un plug-in ou le fichier functions.php.

Voir: http://codex.wordpress.org/Plugin_API/Filter_Reference/menu_order . Légèrement modifié pour répondre aux besoins de l'affiche originale (bien que, je l'espère, il a trouvé une solution maintenant ...).

  // 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 dans le menu d'administration qui ne figurent pas ici ne sera pas supprimé. Ils seront ajoutés au bas du menu.

Je comprends que vous ne voulez pas utiliser un plugin, mais pour la pure simplicité, essayez le plugin éditeur de menu Admin par Janis Elsts. Réorganiser votre admin menus comme vous le souhaitez; peuvent également des éléments de menu cacher.

Pour déplacer des éléments de menu autour, je comme l'utilisation de la variable $menu Global.

Par exemple, si je voulais passer le menu « Pages » au bas des menus, j'utiliser dans functions.php ou un plug-in:

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 si je voulais échanger les messages et les menus 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');

utilise cette astuce un peu de temps, juste testé avec WP 3.4.1

Impressionnant. Merci beaucoup. Je viens de mettre quelques lignes de code dans mon 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
}

De plus en plaçant wp-admin-menu classes.php dans mon dossier thématique et maintenant le ' messages de bouton est troqué avec les 'bouton pages.

J'espère que cela fera partie du noyau bientôt et d'une manière pour que nous ne avons pas besoin d'écrire le menu entier dans une fonction à deux boutons seulement Réorganiser.

En fait, il était un peu difficile d'obtenir un ordre plus indiqué pour 4 boutons. Pour changer les 4 boutons: Pages, Poste, Presse, Liens Je avais besoin d'utiliser le code folowing:

  swap_admin_menu_sections('Pages','Posts');                
  swap_admin_menu_sections('Media','Links');                 
  swap_admin_menu_sections('Posts','Links');
Licencié sous: CC-BY-SA avec attribution
Non affilié à wordpress.stackexchange
scroll top