web-dev-qa-db-fra.com

Faites des éléments de sous-menu un lien principal dans le menu admin en utilisant functions.php

J'essaie de personnaliser la zone d'administration à l'aide du fichier functions.php afin de simplifier les choses pour mes clients. Une demande que j’ai reçue auparavant et que j’espère pouvoir accomplir est de déplacer certains des sous-menus dans la navigation principale.

Par exemple, j'aimerais que les widgets et les menus apparaissent dans la navigation principale au lieu d'être un sous-menu pour les apparences. Je finirais alors par supprimer l'onglet Apparences tous ensemble.

J'ai pu supprimer l'onglet, mais je n'ai pas pu créer les nouveaux boutons pour les widgets et les menus. Même si je peux obtenir de l'aide pour ne pas les déplacer techniquement, mais pour créer un nouveau bouton et définir le lien moi-même (par exemple, pour Menus -> /nav-menus.php).

Est-ce que cela est possible?

Merci

3
Adam

OK, c'est un peu brouillon, mais ça marche. Regarde

function remove_submenus() {
  global $submenu;
  unset($submenu['themes.php'][10]); // Removes Menu  
}
add_action('admin_menu', 'remove_submenus');



function new_nav_menu () {
    global $menu;
    $menu[99] = array('', 'read', 'separator', '', 'menu-top menu-nav');
    add_menu_page(__('Nav Menus', 'mav-menus'), __('Nav Menus', 'nav-menus'), 'edit_themes', 'nav-menus.php', '', 99);
}
add_action('admin_menu', 'new_nav_menu');

Essentiellement, il supprime les paramètres du menu de navigation du sous-panneau Apparence, puis l'ajoute à nouveau en tant que page de niveau supérieur (similaire à un plugin). Vous pouvez également y définir une URL d’icône. La seule chose que je ne peux pas faire fonctionner comme je le veux, c'est le positionnement.

3
Norcross

C'est encore plus simple si, comme le PO, vous voulez seulement déplacer les menus et les widgets hors de l'apparence et au niveau supérieur. C'est ce dont j'avais besoin aussi.

Étant donné que nous ne faisons que déplacer les éléments de menu principaux WP, nous n'avons pas besoin d'utiliser add_menu_page pour ajouter les éléments de menu - nous n'ajoutons aucun nouvel élément de menu. Désactivez-les simplement du tableau $ submenu et redéfinissez-les ailleurs dans le tableau $ menu.

function re_sort_menu() {
  global $menu;
  global $submenu;
  // Note: find the position of every submenu in Appearance by uncommenting the following: 
  // print_r($submenu['themes.php'];
  unset($submenu['themes.php'][10]); // Unsets Appearance -> Menu (position 10)
  unset($submenu['themes.php'][7]); // Unsets Appearance -> Widgets

  // Add Menu and Widgets back at top level with some dashicons
  // Be careful not to give menu positions (array keys) that conflict with other menu items
  // TIP: print_r($menu); to see existing menu positions and also to check out the proper order of these array values. WP docu seems to list them in the incorrect order.
  $menu[31] = array( __( 'Menus', 'theme-slug' ), 'edit_themes', 'nav-menus.php', __( 'Menus', 'theme-slug' ), 'menu-top menu-nav', 'menu-nav', 'dashicons-menu');  
  $menu[32] = array( __( 'Widgets', 'theme-slug' ), 'edit_themes', 'widgets.php', __( 'Widgets', 'theme-slug' ), 'menu-top menu-nav', 'menu-nav', 'dashicons-admin-generic');  
}
add_action( 'admin_menu', 're_sort_menu' );

La réponse de Norcross ci-dessus m'a mis sur la bonne voie, mais pour une raison quelconque, l'utilisation de add_menu_item n'a pas régénéré une section "Menu Nav" opérationnelle en tant qu'élément de menu de niveau supérieur de l'administrateur pour moi dans WP 4.1. Le problème semblait résider dans l’ordre des valeurs de tableau transmises à cette fonction, mais quelle que soit la façon dont j’ai réordonné les choses, j’ai travaillé directement avec le nouveau WP Article de l’API de développeur , je ne l’ai jamais fait fonctionner .

0
nimmolo

Bon article à ce sujet, ancien lien pouvant vous aider, http://wpengineer.com/475/top-level-menu-in-wordpress-27/

De plus, la solution proposée par @Norcross fonctionne très bien, mais l'icône 99 affichera une erreur, vous pouvez la laisser vide, par exemple. '' au lieu de 99. Vous pouvez aussi avoir votre propre icône personnalisée en utilisant basename(__FILE__) et le nom du fichier.

0
Drew Dello Stritto

Quant à Wordpress 4.4, je dois utiliser le code suivant pour que cela fonctionne:

function adjust_admin_menu() {
  global $menu;

  remove_submenu_page( 'themes.php', 'nav-menus.php' );

  // Add nav menu as top element
  $menu[31] = array( __( 'Menus', 'theme-slug' ), 'edit_theme_options', 'nav-menus.php', __( 'Menus', 'theme-slug' ), 'menu-top menu-nav', 'menu-nav', 'dashicons-menu');  
}
add_action( 'admin_menu', 'adjust_admin_menu' );
0
jmarceli

Vous pouvez modifier l'ordre en utilisant le filtre menu_order:

function custom_menu_order($menu_ord) {  
if (!$menu_ord) return true;  

return array(  
    'index.php', // Dashboard  
    'edit.php', // Posts 
    'upload.php', // Media
    'edit.php?post_type=page', // Pages
    'edit-comments.php', // Comments 
    'link-manager.php', // Links 
    'separator1', // First separator  
    'nav-menus.php', // Navigation
    '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');

Ceci a été pris de cet article ici: personnaliser votre admin wordpress

Notez que le fichier nav-menu.php a été ajouté au menu de niveau supérieur. Pour repositionner chaque élément de menu, il suffit de les réorganiser.

0
Steven