menus – Agregue la clase 'has_children' al li principal al modificar Walker_Nav_Menu

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 ) {
            // ...
        }
    }

Leave a Comment

Your email address will not be published. Required fields are marked *

web tasarım