Ich verwende derzeit einen benutzerdefinierten Walker, um die Ausgabe von anzupassen wp_nav_menu()
, und ich versuche, den <a>
Tags zusätzliche Informationen hinzuzufügen .
Ich möchte, dass die Ausgabe für jeden Menülink wie folgt aussieht:
<a class="boxPAGEID" href="#">About Me Page</a>
Wo PAGEID
ist die ID der Seite, auf die ich verlinke?
Der Grund dafür ist, dass ich ein Thema entwickle, das Seiteninhalte in Leuchtkästen öffnet, die von der Klasse im Tag ausgelöst werden.
Unten ist der Code des benutzerdefinierten Walkers in meiner functions.php
Datei (nach dem Code zeige ich auf den Bereich, in dem ich Probleme habe):
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';
}
}
}
Gegen Ende stehen ein paar Zeilen, die mit beginnen $item_output
. In der zweiten Zeile versuche ich, die Seiten-ID zu generieren:
$item_output .= '<a'. $attributes . 'class="box' . $pageid . '"' .'>';
Wo $pageid
ist nach:
global $wp_query;
$pageid = $wp_query->post->ID;
Dies gibt mir eine einzige feste ID für alle generierten Links.
Alternativ, anstatt $pageid
ich es zu versuchen $item->ID
, gab mir das stattdessen die ID des Menüpunkts.
Irgendwelche Vorschläge?
Antworten:
Die Seiten-ID (oder Objekt-ID, da ein Menüelement mit einem beliebigen Objekt verknüpft werden kann) wird
postmeta
mit dem Schlüssel in der Tabelle gespeichert_menu_item_object_id
. So können Sie die Seiten-ID mit dem folgenden Code erhalten:quelle
$pageid = $wp_query->post->ID;
das oben auf der Seite in$pageid = get_post_meta( $item->ID, '_menu_item_object_id', true );
Ich konnte Ihren Code nicht genau betrachten, aber zum Erstellen eines Menüs sollten Sie vielleicht get_pages verwenden.
http://codex.wordpress.org/Function_Reference/get_pages
quelle