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?
Réponses:
L'ID de page (ou ID d'objet, car un élément de menu peut être lié à n'importe quel objet) est stocké dans le
postmeta
tableau, avec la clé_menu_item_object_id
. Ainsi, vous pouvez obtenir l'ID de page avec le code suivant:la source
$pageid = $wp_query->post->ID;
en haut de la page pour$pageid = get_post_meta( $item->ID, '_menu_item_object_id', true );
Je ne pouvais pas regarder votre code en profondeur, mais pour créer un menu, vous devriez peut-être utiliser get_pages ..
http://codex.wordpress.org/Function_Reference/get_pages
la source