Por default, WordPress agrega a los menús de navegación atributos que no siempre necesitamos ya sea porque son muy específicos o porque nuestro menú no es tan complejo. Por otro lado, a pesar de tantos atributos existen algunos que nos serían muy útiles pero que no los incluye el menú, como por ejemplo la posibilidad de agregar una clase a los elementos que tengan descendientes. Para adaptar el menú a nuestras necesidades, podemos aplicar filtros o utilizar un Walker. De las dos opciones, la segunda es la que tiene posibilidades de personalización.
Creación del WalKer
El Walker es una extensión de la clase Walker_Nav_Menu
, así que crearemos un archivo dentro de un folder que podría ser functions
que se llame mi_menu_walker.php
y escribiremos el siguente código.
class Mi_menu_walker extends Walker_Nav_Menu
{
public function start_el( &$output, $item, $depth, $args )
{
/*
* Abrimos el elemento, por el momento si clases
*/
$output .= '<li>';
/*
* Atributos del enlace
*/
// Evitamos titulos redundantes
! empty ( $item->attr_title )
and $item->attr_title !== $item->title
and $attributes .= ' title="' . esc_attr( $item->attr_title ) .'"';
! empty ( $item->url )
and $attributes .= ' href="' . esc_attr( $item->url ) .'"';
//Mostramos el atributo rel
! empty( $item->xfn )
and $attributes .= ' rel="' . esc_attr( $item->xfn ) .'"';
$attributes = trim( $attributes );
$title = apply_filters( 'the_title', $item->title, $item->ID );
$anchor = "{$args->before}<a {$attributes}>{$args->link_before}{$title}</a>"
. $args->link_after . $args->after;
//Agregamos un filtro par si un plugin necesita acceso
$output .= apply_filters(
'walker_nav_menu_start_el'
, $anchor
, $item
, $depth
, $args
);
}
function end_el( &$output )
{
$output .= '</li>';
}
}
Con esto tenemos una estructura limpia a la que podemos agregar los atributos que necesitamos. Dentro de la función start_el
tenemos acceso a diferentes variables, la primera $output
debe incluirse como referencia1 porque se trata de el menú, así que debe incluirse el operador .=
para agreagr información. La variable $item
es un objeto que contiene la información del enlace, de forma similar a un post2, es de este objeto de donde tomaremos los datos para trabajar.
Lo que falta es incluir este archivo al tema: dentro de nuestro archivo functions.php
lo incluimos con include functions/mi_menu_walker.php