J'ai un menu défini dans WP Admin qui ressemble à ceci:
Je veux pouvoir afficher tous les liens enfants dans la barre latérale chaque fois que je suis sur une page parent. Par exemple, si l'utilisateur se trouve sur ma page "À propos de nous", je souhaite qu'une liste des 4 liens surlignés en vert apparaisse dans la barre latérale.
J'ai consulté la documentation de wp_nav_menu () et il ne semble pas y avoir de moyen intégré pour spécifier un nœud particulier d'un menu donné à utiliser comme point de départ lors de la génération des liens.
J'ai créé une solution pour une situation similaire qui s'appuyait sur les relations créées par la page parent, mais je cherche une solution qui utilise spécifiquement le système de menus. Toute aide serait appréciée.
Réponses:
J'y pensais toujours, je l'ai donc revisitée et mise au point cette solution qui ne dépend pas beaucoup du contexte:
Usage
la source
Walker_Nav_Menu
classer ou utiliser des filtres en classe. Vous aimez trop les commentaires sur les menus - vous posez une nouvelle question à ce sujet?wp_filter_object_list
ligne parwp_filter_object_list( $items, array( 'object_id' => $args->submenu ), 'and', 'ID' );
@goldenapples: Votre Walker Class ne fonctionne pas. Mais l'idée est vraiment bonne. J'ai créé un walker basé sur votre idée:
Maintenant vous pouvez utiliser:
La sortie est une liste contenant l'élément racine actuel et ses enfants (pas leurs enfants). Def: Elément racine: = L'élément de menu de niveau supérieur qui correspond à la page en cours ou est le parent d'une page en cours ou le parent d'un parent ...
Cela ne répond pas exactement à la question initiale, mais presque, car il y a toujours l'élément de niveau supérieur. Cela me convient, car je souhaite que l’élément de niveau supérieur figure dans le titre de la barre latérale. Si vous souhaitez vous en débarrasser, vous devrez peut-être remplacer display_element ou utiliser un analyseur HTML.
la source
Bonjour @jessegavin :
Les menus de navigation sont stockés dans une combinaison de types de publication personnalisés et de taxonomies personnalisées. Chaque menu est stocké en tant que terme (c'est-à-dire "À propos du menu" , trouvé dans
wp_terms
) d'une taxonomie personnalisée (c'estnav_menu
-à- dire trouvé danswp_term_taxonomy
.)Chaque élément de menu de navigation est stocké sous forme de publication
post_type=='nav_menu_item'
(c.-à-d. "À propos de la société" , danswp_posts
), ses attributs étant stocké en tant que post meta (enwp_postmeta
) en utilisant unmeta_key
préfixe_menu_item_*
où_menu_item_menu_item_parent
est l'ID de l'élément de menu de navigation parent de votre élément de menu.La relation entre les menus et les éléments de menu est stockée dans
wp_term_relationships
où seobject_id
rapporte à l'$post->ID
élément de menu de navigation et se$term_relationships->term_taxonomy_id
rapporte au menu défini collectivement danswp_term_taxonomy
etwp_terms
.Je suis sûr qu'il serait possible de brancher deux
'wp_update_nav_menu'
et'wp_update_nav_menu_item'
pour créer des menus réels danswp_terms
et un ensemble parallèle de relations danswp_term_taxonomy
etwp_term_relationships
où chaque menu Nav Point qui a des éléments de menu sous-Nav devient également son propre menu de navigation.Vous voudriez également accrocher
'wp_get_nav_menus'
(que j’ai suggéré d’ajouter à WP 3.0 sur la base d’un travail similaire à celui que je faisais il ya quelques mois) pour vous assurer que vos menus de navigation générés ne sont pas affichés pour être manipulés par l’utilisateur dans l’administrateur, sinon ils ne seraient pas affichés. vous vous désynchroniseriez très vite et vous auriez un cauchemar de données sur votre main.C’est un projet amusant et utile, mais c’est un peu plus de code et de tests que je ne peux me permettre, en partie parce que tout ce qui synchronise les données a tendance à être un PITA quand il s’agit de résoudre tous les bugs (et parce que Les clients payants me poussent à faire avancer les choses. :) Mais armé des informations ci-dessus, je suis assez motivé pour qu'un développeur de plug-in WordPress puisse le coder s'il le souhaite.
Bien sûr, vous réalisez maintenant que si vous le codez, vous êtes obligé de le poster ici pour que nous puissions tous profiter de vos largesses! :-)
la source
wp_nav_menu()
vous devez cloner les menus car ilwp_nav_menu()
est étroitement lié à la structure du menu . L'autre option consiste à copier lewp_nav_menu()
code et à apporter les modifications nécessaires pour l'affichage sous forme de sous-menu.Ceci est une extension du marcheur qui devrait faire ce que vous cherchez:
Basé vaguement sur le code de mfields que j'ai mentionné dans mon commentaire plus tôt. Il suffit de vérifier dans le menu pour voir si l'élément en cours est (1) l'élément de menu en cours ou (2) un ancêtre de l'élément de menu en cours, et développe la sous-arborescence située en dessous uniquement si l'une de ces conditions est remplie. . J'espère que cela fonctionne pour toi.
Pour l'utiliser, ajoutez simplement un argument "walker" lorsque vous appelez le menu, c'est-à-dire:
la source
$top_level_elements
et d'ajouter votre propre test avant l'appel$this->display_element
.depth
paramètre à l'appelwp_nav_menu
, au cas où votre thème surpasserait la valeur par défaut de 0 (afficher tous les niveaux)?Mise à jour: je l'ai fait dans un plugin. Téléchargez ici .
J'avais besoin de résoudre ce problème moi-même et d'écrire un filtre sur les résultats de la recherche de menu. Il vous permet de l'utiliser
wp_nav_menu
normalement, mais choisissez une sous-section du menu en fonction du titre de l'élément parent. Ajoutez unsubmenu
paramètre au menu comme suit:Vous pouvez même aller à plusieurs niveaux en mettant des slash dans:
Ou si vous préférez avec un tableau:
Il utilise une version limace du titre, ce qui devrait lui permettre de pardonner des choses comme les majuscules et la ponctuation.
la source
$loc = split( "/", $loc );
dans le plugin avec$loc = preg_split( "~/~", $loc );
J'ai mis en place le cours suivant pour moi-même. Il trouvera le parent de navigation supérieur de la page actuelle ou vous pouvez lui attribuer un ID de navigation supérieur cible dans le constructeur du lecteur.
Appel de navigation:
la source
@davidn @hakre Bonjour, j'ai une solution laide sans HTML-Parser ni surcharger display_element.
la source
La sortie du menu de navigation inclut de nombreuses classes pour l'élément en cours, l'ancêtre de l'élément en cours, etc. Dans certaines situations, j'ai été en mesure de faire ce que vous voulez faire en laissant toute la sortie de l'arborescence de navigation, puis en utilisant css pour la réduire à seuls les enfants de la page en cours, etc.
la source
J'ai fait un marcheur modifié qui devrait aider! Pas parfait - il laisse quelques éléments vides, mais ça fait l'affaire. La modification concerne essentiellement les bits $ current_branch. J'espère que ça aide quelqu'un!
}
la source
Découvrez le code dans mon plugin ou utilisez-le à vos fins;)
Ce plugin ajoute un widget "Menu de navigation" amélioré. Il offre de nombreuses options qui peuvent être définies pour personnaliser la sortie du menu personnalisé via le widget.
Les fonctionnalités incluent:
élément sélectionné (option permettant d’inclure l’élément parent).
http://wordpress.org/extend/plugins/advanced-menu-widget/
la source