Pregunta:
Estoy escribiendo una clase de caminante personalizada para wp_nav_menu y quiero poder especificar si un li contiene un submenú. Entonces quiero que mi marcado sea:
<li class="has_children [other-wordpress-classes]">
<a class="parent-link">Some item</a>
<ul class="sub-menu">
Sé cómo agregar y eliminar las clases bien, simplemente no puedo encontrar nada que me diga si el elemento actual tiene elementos secundarios.
¿Algunas ideas?
Gracias por adelantado.
Respuesta:
start_el()
debería obtener esta información en su parámetro $args
, pero parece que WordPress solo lo completa si $args
es una matriz , mientras que para los menús de navegación personalizados es un objeto. Esto se informa en un ticket de Trac . Pero no hay problema, puede completar esto usted mismo, si también anula el método display_element()
en su andador personalizado (porque este es el lugar más fácil para acceder a la matriz de elementos secundarios):
class WPSE16818_Walker extends Walker_Nav_Menu
{
function display_element( $element, &$children_elements, $max_depth, $depth=0, $args, &$output )
{
$id_field = $this->db_fields['id'];
if ( is_object( $args[0] ) ) {
$args[0]->has_children = ! empty( $children_elements[$element->$id_field] );
}
return parent::display_element( $element, $children_elements, $max_depth, $depth, $args, $output );
}
function start_el( &$output, $item, $depth, $args ) {
if ( $args->has_children ) {
// ...
}
}