Ich habe an dieser Stelle eine Lösung gefunden, indem ich einen benutzerdefinierten Walker verwendet habe .
Zwei Schritte: Ersetzen Sie den Standardcode wp_nav_menu durch einen bearbeiteten und fügen Sie dann der Datei functions.php des Themas Code hinzu.
Ersetzen Sie zunächst den Standard-wp_nav_code durch den folgenden (der Code wird von der obigen Site kopiert):
wp_nav_menu( array(
'menu' => 'Main Menu',
'container' => false,
'menu_class' => 'nav',
'echo' => true,
'before' => '',
'after' => '',
'link_before' => '',
'link_after' => '',
'depth' => 0,
'walker' => new description_walker())
);
Fügen Sie als Nächstes den folgenden Code zu functions.php hinzu. Auf diese Weise können Sie den Menü-Links tatsächlich eine Klasse hinzufügen:
class description_walker extends Walker_Nav_Menu
{
function start_el(&$output, $item, $depth, $args)
{
global $wp_query;
$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="' . esc_attr( $item->url ) .'"' : '';
$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 .'>';
$item_output .= $args->link_before .$prepend.apply_filters( 'the_title', $item->title, $item->ID ).$append;
$item_output .= $description.$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 des Codes befinden sich mehrere Zeilen, die mit $ item_output beginnen. Insbesondere möchten Sie sich dieses Stück ansehen:
$item_output .= '<a'. $attributes .'>';
Weil diese Zeile die Ausgabe für den Anfang des Links HTML bestimmt. Wenn Sie es in so etwas ändern:
$item_output .= '<a'. $attributes . 'class="abc"' .'>';
Dann wird allen Ihren Links im Menü class = "abc" hinzugefügt.
Das heißt, es erlaubt keine benutzerdefinierte Klasse für jeden Link (oder zumindest weiß ich nicht, wie man ihn codiert). Das ist ein Problem für mich.
Für diejenigen, die fragen, warum Sie dies tun möchten? Ich möchte, dass meine Menü-Links Leuchtkästen öffnen (genauer gesagt Farbfelder), und dazu sind Klassen für die Links erforderlich. Beispielsweise:
<a class="lightbox1" href="#">Photo</a>
Gibt es möglicherweise eine Möglichkeit, die Klassen dynamisch zu generieren, z. B. "lightbox1" für den ersten Link, "lightbox2" für den zweiten Link usw.?