dropdown – ¿Cómo usar wp_nav_menu para crear un menú desplegable de selección?

Pregunta:

Estoy usando lo siguiente dentro de la función wp_nav_menu para crear un menú desplegable de selección donde cada elemento del menú es una opción en el menú desplegable de selección …

'items_wrap' => '<select>%3$s</select>'
'before'     => '<option value="">'
'after'      => '</option>'

¿Cómo agrego el valor del enlace en la declaración 'before' ? ¿Existe una mejor manera de hacer esto? Sé acerca de wp_dropdown_pages , pero eso no funciona porque quiero que los usuarios puedan controlar el menú desde la página "Menús".

Respuesta:

No puede hacer esto con wp_nav_menu, porque genera elementos de lista y generará un marcado no válido con su código.

Intente usar wp_get_nav_menu_items () en su lugar.


Una solución rápida para un menú desplegable con un andador personalizado:

class Walker_Nav_Menu_Dropdown extends Walker_Nav_Menu{

    // don't output children opening tag (`<ul>`)
    public function start_lvl(&$output, $depth){}

    // don't output children closing tag    
    public function end_lvl(&$output, $depth){}

    public function start_el(&$output, $item, $depth, $args){

      // add spacing to the title based on the current depth
      $item->title = str_repeat("&nbsp;", $depth * 4) . $item->title;

      // call the prototype and replace the <li> tag
      // from the generated markup...
      parent::start_el(&$output, $item, $depth, $args);
      $output = str_replace('<li', '<option', $output);
    }

    // replace closing </li> with the closing option tag
    public function end_el(&$output, $item, $depth){
      $output .= "</option>\n";
    }
}

En sus plantillas utilícelo así:

wp_nav_menu(array(
  'theme_location' => 'primary', // your theme location here
  'walker'         => new Walker_Nav_Menu_Dropdown(),
  'items_wrap'     => '<select>%3$s</select>',
));

Leave a Comment

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

web tasarım