web-dev-qa-db-fra.com

Menu de navigation avec les enfants affichés uniquement pour la page en cours

Je me suis amusé avec les fonctionnalités du menu de Wordpress (wp_nav_menu et wp_list_pages) pour créer un menu pour mon site. Ça avance, mais j'ai toujours du mal à adopter le comportement que je voudrais.

Ce que j'aimerais, c'est quelque chose comme le menu de la barre latérale de ce site Web (pas WP): http://www.fairfood.org/facts/sustainability-agenda/

Lorsque vous cliquez sur une sous-page comportant des enfants, le menu les affiche: http://www.fairfood.org/facts/production-chains/

J'ai actuellement ce code:

            <?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 } ?>

Cela fonctionne, mais cela montre aux enfants que toutes les sous-pages ont, pas seulement les enfants de la page en cours. Un exemple de ce que je veux dire: http://test.fairfood.org/facts/

Avez-vous une idée pour faire ce travail?

3
user3201

Si cela ne vous dérange pas d'utiliser un plugin, je peux vous dire comment j'ai réussi à faire fonctionner cela par le passé.

  1. Ajoutez le code suivant à votre functions.php
    function get_root_parent ($ page_id) {
     global $ wpdb; 
     $ parent = $ wpdb-> get_var ("SELECT post_parent FROM $ wpdb-> messages WHERE post_type = 'page' AND ID = '$ page_id '"); 
     if ($ parent == 0) retourne $ page_id; 
     sinon return get_root_parent ($ parent); 
    } 
    
  2. Ajoutez ce qui suit à header.php entre la fermeture de head et open de body dans un wrapper php
     <? php 
     $ GLOBALS ["parentId"] = get_root_parent ($ post-> ID); 
    ?> 
    
  3. Téléchargez et installez le plug-in fold pages: http://www.webspaceworks.com/resources/wordpress/30/

  4. Ajoutez le code suivant à votre sidebar.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); 
    } {
     w. "sort_column = menu_order & child_of =". $ GLOBALS ["parentId"]. "& title_li = & amp; child_of =". $ thispage-> ID); 
    }?> 
     </ ul> 
    
0
PNMG