J'utilise actuellement un déambulateur personnalisé pour personnaliser la sortie de wp_nav_menu()
, et j'essaie d'ajouter des informations supplémentaires aux <a>
balises.
À quoi je veux que la sortie de chaque lien de menu ressemble:
<a class="boxPAGEID" href="#">About Me Page</a>
Où PAGEID
est l'ID de la page vers laquelle je crée un lien.
La raison en est que je développe un thème qui ouvre le contenu de la page dans des boîtes à lumière, qui sont déclenchées par la classe dans la balise.
Vous trouverez ci-dessous le code du marcheur personnalisé dans mon functions.php
fichier (après le code, je pointerai vers la zone où j'ai des problèmes):
class description_walker extends Walker_Nav_Menu
{
function start_el(&$output, $item, $depth, $args)
{
global $wp_query;
$pageid = $wp_query->post->ID;
$indent = ( $depth ) ? str_repeat( "\t", $depth ) : '';
$class_names = $value = '';
$classes = empty( $item->classes ) ? array() : (array) $item->classes;
$class_names = join( ' ', apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item ) );
$class_names = ' class="'. esc_attr( $class_names ) . '"';
$output .= $indent . '<li id="menu-item-'. $item->ID . '"' . $value . $class_names .'>';
$attributes = ! empty( $item->attr_title ) ? ' title="' . esc_attr( $item->attr_title ) .'"' : '';
$attributes .= ! empty( $item->target ) ? ' target="' . esc_attr( $item->target ) .'"' : '';
$attributes .= ! empty( $item->xfn ) ? ' rel="' . esc_attr( $item->xfn ) .'"' : '';
$attributes .= ! empty( $item->url ) ? ' href="' . '#' .'"' : '';
$prepend = '<strong>';
$append = '</strong>';
$description = ! empty( $item->description ) ? '<span>'.esc_attr( $item->description ).'</span>' : '';
if($depth != 0)
{
$description = $append = $prepend = "";
}
$item_output = $args->before;
$item_output .= '<a'. $attributes . 'class="box' . $pageid . '"' .'>';
$item_output .= $args->link_before .$prepend.apply_filters( 'the_title', $item->title, $item->ID ).$append;
$item_output .= $args->link_after;
$item_output .= '</a>';
$item_output .= $args->after;
$output .= apply_filters( 'walker_nav_menu_start_el', $item_output, $item, $depth, $args );
if ($item->menu_order == 1) {
$classes[] = 'first';
}
}
}
Vers la fin, quelques lignes commencent $item_output
. La deuxième ligne est l'endroit où j'essaie de générer l'ID de page:
$item_output .= '<a'. $attributes . 'class="box' . $pageid . '"' .'>';
Où $pageid
est selon:
global $wp_query;
$pageid = $wp_query->post->ID;
Cela me donne un ID unique et fixe pour tous les liens générés.
Alternativement, au lieu d' $pageid
avoir essayé d'utiliser $item->ID
, mais cela m'a donné l'ID de l'élément de menu à la place.
Aucune suggestion?