web-dev-qa-db-fra.com

Afficher uniquement le 2e niveau de navigation en fonction de la navigation active

Par exemple, supposons un menu comme celui-ci:

Parent 1
  Child A
  Child B
Parent 1
  Child C
  Child D
  Child E
Parent 2
  Child F

Dans une certaine partie de mon modèle, je veux quelque chose à afficher en fonction de "l'emplacement" actuel dans le menu. Si l'utilisateur est sur les pages Parent 1, Child C, Child D ou Child E, je souhaite l'affichage d'un petit menu indiquant Parent 1 en-tête et les enfants en tant que liens. J'ai essayé diverses choses (créer un objet de type marcheur personnalisé, écrire des CSS pour ne pas afficher les éléments à ne pas montrer, etc.). Par ailleurs, s'il n'y a aucun enfant, je ne souhaite pas afficher le parent même sur sa propre page. Est-ce que ça a du sens?

Je ne veux pas de plugin qui aide/aide avec ça (je n'aime pas que mon template "dépende" d'un plugin)

4
Matthew

Essayez ceci - je ne l’ai pas encore complètement mis en œuvre, mais je l’ai testé et cela semble fonctionner. Placez-le dans votre fichier functions.php et appelez <?php list_child_pages(); ?> dans votre modèle ou utilisez le shortcode [childpages] dans votre éditeur.

<?php
// List Child pages of a parent. 
function list_child_pages() {

global $post;

if ( is_page() && $post->post_parent )
    $childpages = wp_list_pages( 'sort_column=menu_order&title_li=&child_of=' . $post->post_parent . '&echo=0' );
else
    $childpages = wp_list_pages( 'sort_column=menu_order&title_li=&child_of=' . $post->ID . '&echo=0' );

if ( $childpages ) { ?>
    <menu>
        <ul class="side-nav">
            <?php echo $string = $childpages; ?>
        </ul>
    </menu>
<?php   
}

return $string;

}
// Add Shortcode for additional support, not just in the theme template
add_shortcode('childpages', 'list_child_pages');

?>
1
Greg McMullen