Encontré una solución en este sitio mediante el uso de un andador personalizado .
Dos pasos: reemplace el código predeterminado wp_nav_menu con uno editado, y luego agregue el código a functions.php del tema.
Primero, reemplace el wp_nav_code predeterminado con lo siguiente (el código se copia del sitio anterior):
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())
);
A continuación, agregue el siguiente código a functions.php. Al hacer esto, puede agregar una clase a los enlaces del menú:
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';
}
}
}
Hacia el final del código hay varias líneas que comienzan con $ item_output. En particular, desea ver esta pieza:
$item_output .= '<a'. $attributes .'>';
Porque esta línea determina la salida para el comienzo del enlace html. Si lo cambia a algo como esto:
$item_output .= '<a'. $attributes . 'class="abc"' .'>';
Entonces todos sus enlaces en el menú tendrán class = "abc" agregado a ellos.
Dicho esto, no permite una clase personalizada para cada enlace (o al menos no sé cómo codificarlo). Este es un problema para mí.
Para aquellos que preguntan ¿por qué quieres hacer esto? Quiero que mis enlaces de menú abran cajas de luz (cajas de colores, para ser más específicos), y requieren clases en los enlaces para hacerlo. Por ejemplo:
<a class="lightbox1" href="#">Photo</a>
¿Hay alguna manera de generar dinámicamente las clases, como "lightbox1" para el primer enlace, "lightbox2" para el segundo enlace, y así sucesivamente?