start_el()
devrait obtenir ces informations dans son $args
paramètre, mais il semble que WordPress ne le remplisse que s'il $args
s'agit d'un tableau , tandis que pour les menus de navigation personnalisés, il s'agit d'un objet. Cela est rapporté dans un ticket Trac . Mais pas de problème, vous pouvez le remplir vous-même, si vous remplacez également la display_element()
méthode dans votre marchette personnalisée (car c'est l'endroit le plus simple pour accéder au tableau des éléments enfants):
class WPSE16818_Walker extends Walker_Nav_Menu
{
function display_element( $element, &$children_elements, $max_depth, $depth=0, $args, &$output )
{
$id_field = $this->db_fields['id'];
if ( is_object( $args[0] ) ) {
$args[0]->has_children = ! empty( $children_elements[$element->$id_field] );
}
return parent::display_element( $element, $children_elements, $max_depth, $depth, $args, $output );
}
function start_el( &$output, $item, $depth, $args ) {
if ( $args->has_children ) {
// ...
}
}
Mise à jour: Depuis WordPress 3.7 (octobre 2013), des classes CSS ont été ajoutées pour indiquer les éléments de menu enfant et les pages dans les menus de thème - pas besoin d'utiliser un marcheur personnalisé car il est pris en charge dans WordPress core.
Les classes CSS sont nommés
menu-item-has-children
etpage_item_has_children
.Pour une solution complète pour toute personne pressée (crédit à la réponse précédente de Jan Fabry), voir l'implémentation complète ci-dessous.
Générez la navigation dans le modèle de votre thème:
Ensuite, incluez les éléments suivants dans votre thème
functions.php
:La sortie HTML résultante ressemblera à ce qui suit:
Pour plus d'informations sur l'utilisation de la classe Walker de WordPress, voir Comprendre la classe Walker .
Prendre plaisir!
la source
Cette fonction est exactement ce que vous voulez avoir. Il vous montre également un moyen assez efficace de modifier les éléments du menu nav. De plus, vous pouvez l'ouvrir pour des fonctions plus avancées (par exemple, thème enfant) via le filtre d'élément:
Et oui, il n'y a - dans presque tous les cas - pas besoin d'un déambulateur personnalisé.
la source
si vous voulez faire dérouler, vous pouvez le faire uniquement avec css. faire une navigation personnalisée dans WP avec des enfants, WordPress attribue automatiquement la classe .sub-menu à l'enfant ul. Essayez ce CSS
Vous voudrez peut-être ajouter un peu de jQuery pour le pimenter un peu, mais cela devrait vous donner un menu déroulant fonctionnel.
la source
la source