2010-02-22 6 views
7

Sous menu Pages dans la page Wordpress Admin, je suis cette mise en page:surbrillance manuellement Wordpress élément de menu admin

Pages

  • Modifier(url: modifier-pages.php)
  • Ajouter nouveau(url: page-new.php)
  • Pages spéciales (url: modifier-pages.php pages spéciales = true)

comme vous pouvez le voir, j'ai ajouté un nouvel élément de sous-menu appelé Pages spéciales qui est à peu près un lien à Modifier la page avec un filtre personnalisé. Étant donné que Wordpress utilise le nom de fichier pour identifier et mettre en surbrillance l'élément de sous-menu, chaque fois que je clique sur Pages spéciales, l'élément de sous-menu Modifier est sélectionné. Y at-il de toute façon forcer Wordpress à sélectionner l'élément de menu Pages spéciales à la place?

Vive

Répondre

3

Solution: utilisez $ submenu_file variables

$ submenu_file = "edit-pages.php spécial pages = true"

+0

u peut poster s'il vous plaît un exemple sur la façon de l'utiliser? Je ne peux pas le faire fonctionner – bluantinoo

5

Pour clarifier la réponse de Ken Vu, éditez les variables globales $submenu_file et $parent_file. Par exemple, pour mettre en évidence votre page:

global $submenu_file; 
$submenu_file = "edit-pages.php?special-pages=true"; 

Si vous devez changer l'élément de niveau supérieur en surbrillance, utilisez $parent_file. Par exemple, mettez en surbrillance la page de réglage "Écriture":

global $parent_file; 
global $submenu_file; 
$parent_file = 'options-general.php'; 
$submenu_file = 'options-writing.php'; 
+1

Pouvez-vous me dire où placer ces codes idéalement? Je ne pouvais pas les faire travailler. – Musa

+0

J'ai essayé de l'implémenter dans la fonction callaback du 'add_meta_boxes()', mais il ne met pas en surbrillance mon menu admin de plus haut niveau. Je peux ajouter que je n'ai aucun sous-menu, seulement un menu d'administration de niveau supérieur. –

+1

Je l'ai fait fonctionner correctement. Je vais écrire une autre réponse pour que les autres puissent la trouver plus facilement. –

2

Merci Ken Vu et Jonathan Brinley. En utilisant vos réponses, j'ai finalement obtenu la mise en évidence de mon menu d'administration pour fonctionner correctement. Comme je me suis un peu battu pour le faire fonctionner, je pense que je publierais le résultat entier ici, donc d'autres personnes peuvent le trouver plus facilement:

L'idée est d'appeler le filtre parent_file (non documenté, autant de parties Wordpress malencontreusement). Dans mon cas, j'ajoutais un menu personnalisé au lieu du menu par défaut généré lors de la création d'un type de message personnalisé.

Dans mon code postal personnalisé, j'appelle l'action add_meta_boxes. Au sein de ce crochet, je lance mon appel au filtre parent_file:

add_filter('parent_file',  array(&$this, 'highlight_admin_menu')); 

_

Alors voici comment ma fonction hightlight_admin_menu ressemble à:

function highlight_admin_menu($some_slug){ 

    global $parent_file; 

    $parent_file = 'post.php?post=149&action=edit'; 

    return $parent_file; 
} 

_

Ceci a obtenu mon menu pour mettre en évidence correctement. Essayez de jouer avec votre propre code pour savoir où émettre le code add_filter('parent_file', ...).Trouver un peu de code exécuté uniquement sur ce chargement de page particulier, mais assez tôt qu'il est toujours possible de modifier la variable $parent_file.

J'espère que cela aide!

3

meilleure solution:

add_filter('parent_file', 'my_plugin_select_submenu'); 
function my_plugin_select_submenu($file) { 
     global $plugin_page; 
     if ('__my-current-submenu-slug__' == $plugin_page) { 
      $plugin_page = '__my-submenu-slug-to-select__'; 
     } 
     return $file; 
} 
+0

Dans mon cas, je faisais un lien vers la page de gestion de taxonomie d'administration, la taxonomie n'était attachée à aucun type de publication. Votre code a fonctionné parfaitement. Je vous remercie. – wesamly

1

Pour changer l'élément de menu mis en surbrillance pour un élément de sous-menu, le filtre approprié est submenu_file.

add_filter('submenu_file', 'menuBold'); 

static function menuBold($submenu_file) 
{ 
    if (checkProperPage($_GET)) { 
     // The address of the link to be highlighted 
     return 'post-new?post_type=foobar&foo=bar'; 
    } 

    // Don't change anything 
    return $submenu_file; 
} 

Le contrôle se produit dans le fichier ~/wp-admin/menu-header.php de WP sur la ligne 194 (Wordpress 4.5.3):

if (isset($submenu_file)) { 
    if ($submenu_file == $sub_item[2]) 
     $class[] = 'current'; 
... 
} 
Questions connexes