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)
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');
?>