¿Cómo obtener un menú secundario separado?

2

No pensé que tendría que hacer esta pregunta. Pero sí, es cierto. Parece que no puedes tener un menú secundario en Wordpress?

No soy un principiante en Wordpress. Han trabajado y desarrollado en él durante años.

Sin embargo, podría ser posible hacer un recorrido amplio para obtener el submenú / submenú separado. Pero lo que me gustaría obtener una respuesta aquí es más como;

¿Es realmente cierto que no hay una solución integrada simple?

Realmente he buscado en este sitio y en otros sitios en busca de respuestas, pero he luchado para encontrar una respuesta. Parece ser todo acerca de los menús desplegables. ¡Estoy tan cansado de caer ahora!

Puedo decir que también estoy ejecutando Woocommerce. Pero no, tampoco hubo respuesta en su documentación. Mucho de "menús secundarios". Pero eso no es lo mismo. Necesito la relación padre-hijo.

EDITAR:

El siguiente ejemplo de código y el ejemplo de salida se han agregado / cambiado para que funcione como un ejemplo de un caso de caso:

Aquí está mi código:

    <nav class="parent">
        <?php
        wp_nav_menu(
            array(
                'theme_location'  => 'primary',
                'container_class' => 'primary-navigation',
                )
        );
        ?>
    </nav><!-- #parent -->

    // Following menu should only be shown if the selected menu item from the above menu has child items. Show them here below. How do I make these two menus to have a connection to each other?
    <nav class="child">
        <?php
        wp_nav_menu(
            array(
                'theme_location'  => 'primary',
                'container_class' => 'primary-child-navigation',
                )
        );
        ?>
    </nav><!-- #child -->



El resultado de salida sería algo como esto:

Inicio | Bolsos | Zapatos | Sombreros

Mochilas | Bolsos de fin de semana | Estuches de viaje | Dispositivos de mano



¡Y ahora estamos en la página de Bolsa de fin de semana!



¡Tan simple como eso!

Edit 2:

El primer problema es que el atributo depth no parece funcionar para wp_nav_menu() . ¿No puedes tener solo el nivel superior?

    
pregunta Peter Westerlund 07.03.2017 - 07:59

3 respuestas

2

Encontré la solución . Ponga esto en su archivo function.php :

// add hook
add_filter( 'wp_nav_menu_objects', 'my_wp_nav_menu_objects_sub_menu', 10, 2 );
// filter_hook function to react on sub_menu flag
function my_wp_nav_menu_objects_sub_menu( $sorted_menu_items, $args ) {
  if ( isset( $args->sub_menu ) ) {
    $root_id = 0;

    // find the current menu item
    foreach ( $sorted_menu_items as $menu_item ) {
      if ( $menu_item->current ) {
        // set the root id based on whether the current menu item has a parent or not
        $root_id = ( $menu_item->menu_item_parent ) ? $menu_item->menu_item_parent : $menu_item->ID;
        break;
      }
    }

    // find the top level parent
    if ( ! isset( $args->direct_parent ) ) {
      $prev_root_id = $root_id;
      while ( $prev_root_id != 0 ) {
        foreach ( $sorted_menu_items as $menu_item ) {
          if ( $menu_item->ID == $prev_root_id ) {
            $prev_root_id = $menu_item->menu_item_parent;
            // don't set the root_id to 0 if we've reached the top of the menu
            if ( $prev_root_id != 0 ) $root_id = $menu_item->menu_item_parent;
            break;
          } 
        }
      }
    }
    $menu_item_parents = array();
    foreach ( $sorted_menu_items as $key => $item ) {
      // init menu_item_parents
      if ( $item->ID == $root_id ) $menu_item_parents[] = $item->ID;
      if ( in_array( $item->menu_item_parent, $menu_item_parents ) ) {
        // part of sub-tree: keep!
        $menu_item_parents[] = $item->ID;
      } else if ( ! ( isset( $args->show_parent ) && in_array( $item->ID, $menu_item_parents ) ) ) {
        // not part of sub-tree: away with it!
        unset( $sorted_menu_items[$key] );
      }
    }

    return $sorted_menu_items;
  } else {
    return $sorted_menu_items;
  }
}

Entonces utilízalo de esta manera:

<?php
wp_nav_menu(
    array(
        'theme_location'    => 'primary',
        'container_class'   => 'primary-navigation',
        'depth' => 1

        )
);
wp_nav_menu(
    array(
        'theme_location'    => 'primary',
        'container_class'   => 'primary-child-navigation',
        'sub_menu'       => true

        )
);
?>
    
respondido por el Peter Westerlund 07.03.2017 - 20:57
2

¿Qué quiere decir exactamente con menú secundario separado? ¿Podría proporcionar un caso de uso?

La forma en que entiendo su pregunta en este punto es que desea insertar un menú separado en su menú principal sin que los elementos se agreguen como elementos secundarios en el back-end.

Hace algunos años que hice algo similar, si entiendo su pregunta correctamente, por lo que es muy posible. Hay una manera de agregar un menú en combinación con el menú principal, sin embargo, necesitaría reconstruir el menú.

Vea lo siguiente:

enlace

    
respondido por el Svartbaard 07.03.2017 - 09:38
0

Tuve un problema similar, y me sorprendió igualmente que WP no lo haga tan fácil. Probé varios 'scripts de funciones' pero todos tenían problemas. Peter: pensé que su guión era aquí era lo que necesitaba, pero parecía ignorar la opción de" orden "que WP ofrece para cada página.

Terminé de hacer la mayoría con CSS, con solo un pequeño fragmento de PHP en page.php

<?php if(!$post->post_parent){
$children = wp_list_pages("title_li=&child_of=".$post->ID."&echo=0");
}else{
if($post->ancestors)
{
$ancestors = end($post->ancestors);
$children = wp_list_pages("title_li=&child_of=".$ancestors."&echo=0");
}
}
if ($children) {
?>
<ul> <?php echo $children; ?></ul>
<?php } ?>

Esto se basa en una publicación realizada por Mike Lee . Muy simple y funciona perfectamente para mí.

    
respondido por el Freize 20.04.2017 - 12:41

Lea otras preguntas en las etiquetas