J'ai trouvé une solution sur ce site via l'utilisation d'un déambulateur personnalisé .
Deux étapes: remplacez le code wp_nav_menu par défaut par un code modifié, puis ajoutez du code au functions.php du thème.
Tout d'abord, remplacez le wp_nav_code par défaut par le suivant (le code est copié à partir du site ci-dessus):
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())
);
Ensuite, ajoutez le code suivant à functions.php. En faisant cela, vous pouvez réellement ajouter une classe aux liens du 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';
}
}
}
Vers la fin du code, plusieurs lignes commencent par $ item_output. En particulier, vous voulez regarder cette pièce:
$item_output .= '<a'. $attributes .'>';
Parce que cette ligne détermine la sortie pour le début du lien HTML. Si vous le changez en quelque chose comme ceci:
$item_output .= '<a'. $attributes . 'class="abc"' .'>';
Ensuite, tous vos liens dans le menu auront la classe = "abc" ajoutée à eux.
Cela dit, il n'autorise pas de classe personnalisée pour chaque lien (ou du moins je ne sais pas comment le coder). C'est un problème pour moi.
Pour ceux qui demandent pourquoi voudriez-vous faire cela? Je veux que mes liens de menu ouvrent des lightboxes (colorboxes, pour être plus précis), et ils ont besoin de classes sur les liens pour le faire. Par exemple:
<a class="lightbox1" href="#">Photo</a>
Existe-t-il un moyen de générer dynamiquement les classes, telles que "lightbox1" pour le premier lien, "lightbox2" pour le deuxième lien, etc.?