Znalazłem rozwiązanie na tej stronie za pomocą niestandardowego chodzika .
Dwa kroki: zastąp domyślny kod wp_nav_menu edytowanym, a następnie dodaj kod do functions.php motywu.
Najpierw zamień domyślny kod wp_nav_ na następujący (kod jest kopiowany z powyższej strony):
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())
);
Następnie dodaj następujący kod do functions.php. W ten sposób możesz faktycznie dodać klasę do łączy menu:
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';
}
}
}
Pod koniec kodu znajduje się kilka wierszy rozpoczynających się od $ item_output. W szczególności chcesz obejrzeć ten kawałek:
$item_output .= '<a'. $attributes .'>';
Ponieważ ten wiersz określa dane wyjściowe dla początku html łącza. Jeśli zmienisz to na coś takiego:
$item_output .= '<a'. $attributes . 'class="abc"' .'>';
Następnie wszystkie linki w menu będą miały dodane class = "abc".
To powiedziawszy, nie pozwala na niestandardową klasę dla każdego linku (a przynajmniej nie wiem, jak go kodować). To dla mnie problem.
Dla tych, którzy pytają, dlaczego chcesz to zrobić? Chcę, aby moje linki menu były otwarte lightboxy (a konkretnie colorboxy) i do tego wymagają klas na linkach. Na przykład:
<a class="lightbox1" href="#">Photo</a>
Czy jest jakiś sposób na dynamiczne generowanie klas, takich jak „lightbox1” dla pierwszego łącza, „lightbox2” dla drugiego łącza i tak dalej?