Menú de navegación con niños mostrados solo para la página actual

3

He estado jugando con la funcionalidad del menú de Wordpress '(wp_nav_menu y wp_list_pages) para crear un menú para mi sitio. Viene a lo largo, pero todavía tengo algunos problemas para obtener el comportamiento que me gustaría.

Lo que me gustaría es algo como el menú de la barra lateral de este sitio web (no WP): enlace

Al hacer clic en una subpágina que tiene hijos, el menú muestra esos hijos: enlace

Actualmente tengo este código:

            <?php // sidebar menu
        if ($post->post_parent) {
            $ancestors=get_post_ancestors($post->ID);
            $root=count($ancestors)-1;
            $parent = $ancestors[$root];
        } else {
            $parent = $post->ID;
        }

        $children = wp_list_pages("title_li=&child_of=". $parent ."&echo=0");

        if ($children) { ?>
        <ul id="subnav">
        <?php echo $children; ?>
        </ul>
        <?php } ?>

Esto funciona, pero muestra a los hijos que tienen todas las subpáginas, no solo a los hijos de la página actual. Un ejemplo de lo que quiero decir: enlace

¿Alguna idea para hacer que esto funcione?

    
pregunta 23.02.2011 - 12:39

1 respuesta

0

Si no te importa usar un complemento, puedo decirte cómo he conseguido que esto funcione en el pasado.

  1. Agregue el siguiente código a sus funciones.php
    function get_root_parent($page_id) {
    global $wpdb;
    $parent = $wpdb->get_var("SELECT post_parent FROM $wpdb->posts WHERE post_type='page' AND ID = '$page_id'");
    if ($parent == 0) return $page_id;
    else return get_root_parent($parent);
    }
    
  2. Agregue lo siguiente a header.php entre el cierre de la cabeza y el cuerpo abierto en un contenedor php
    <?php
    $GLOBALS["parentId"] = get_root_parent($post->ID);
    ?>
    
  3. Descargue e instale el complemento de páginas plegadas: enlace

  4. Agregue el siguiente código a su barra lateral.php
    <ul>
    <?php
    $thispage = $wp_query->post;
    if ($thispage->post_parent!=0) {
            wswwpx_fold_page_list("sort_column=menu_order&child_of=".$GLOBALS["parentId"]."&title_li=&amp;child_of=".$thispage->post_parent);
          } else {
            wswwpx_fold_page_list("sort_column=menu_order&child_of=".$GLOBALS["parentId"]."&title_li=&amp;child_of=".$thispage->ID);
          }?>
        </ul>
    
    
respondido por el PNMG 23.02.2011 - 15:01

Lea otras preguntas en las etiquetas