Détecter une page sans enfant sous WordPress

WordPress ne dispose d’aucune condition pour détecter une page sans enfant. Or, une telle information est particulièrement utile pour afficher ou masquer certains éléments qui respecteraient cette condition. Ce tutoriel vous explique comment utiliser une fonction PHP afin de tester le cas de figure et injecter le code de votre choix.

La technique employée ici repose sur le recours à la fonction get_post_ancestors de WordPress. Elle permet de retrouver les parents d’un contenu par rapport à son identifiant. Rappelons que WordPress offre la possibilité de hiérarchiser ses pages selon le principe des parents et des enfants.

Nous recherchons ainsi la présence d’enfants en passant l’identifiant du contenu parent dans l’argument child_of de la fonction wp_list_pages. À partir de là, une simple condition PHP fait l’affaire : si présence d’enfant alors on exécute le code sinon on fait autre chose.

<?php 	
$parent_ID = $post->post_parent ? @ array_pop(get_post_ancestors($post)) : $post->ID;
$children = wp_list_pages(
	array(
		'child_of' 	=> $parent_ID,
		'title_li' 	=> '',
		'echo'		=> false,
  	)
);

if ($children) { 
// Votre code à tester ici

} else {
  // Votre code à tester ici
}
?>

Un exemple d’application concrète : l’affichage d’un menu hiérarchique à la manière du sommaire d’un article de Wikipédia en cas de pages enfants. Voici le code utilisé :

<?php 
	$parent_ID = $post->post_parent ? @ array_pop(get_post_ancestors($post)) : $post->ID;
	$children = wp_list_pages(
		 array(
			 'child_of' => $parent_ID,
			 'title_li' => '',
			 'echo'		=> false,
		 )
	);
?>
<?php if ($children) : ?>
	<h3 class="widget-title"><?php _e('Read also in this section', 'textdomain'); ?></h3>
	
	<?php if ($post->post_parent) {
		$children = wp_list_pages(array(
			'depth'      => 1,
			'title_li'   => '',
			'child_of'   => $post->post_parent,
			'echo'       => 0
		));
	} else {
		$children = wp_list_pages(array(
			'depth'     => 1,
			'title_li'  => '',
			'child_of'  => $post->ID,
			'echo'      => 0
		));
	}
	?>
	<?php if ($children) : ?>
		<ul>
			<?php echo $children; ?>
		</ul>
	<?php endif; ?>
<?php endif ?>

Pour en savoir plus sur les marqueurs conditionnels avec WordPress, rendez-vous sur le Codex.

1 commentaire

Laisser un commentaire

Thèmes & Plugins
Premium By WP Channel

WP Alacarte propose des produits et services de qualité
made in France pour la plateforme WordPress.

Tout est prêt pour créer votre site à la carte !

  • Thèmes et extensions premium
  • Facilité d’utilisation garantie
  • Temps de chargement optimisé
  • Personnalisation avancée
Découvrir

Rejoignez la communauté WordPress !

Faites partie de l’aventure en devenant membre d’une association WordPress. Conférences, ateliers, BarCamp, WordCamp… Venez
partager votre passion pour WordPress !

Aurélien DENIS,
président des associations WordPress Francophone et WPMX