Détecter une page sans enfant sous WordPress

Mis à jour le :

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.

Avatar de Aurélien Denis

Protégez votre site WordPress

Vos données sont précieuses,
ne prenez pas le risque de tout perdre.
Confiez-moi votre maintenance !

Ces articles devraient t’intéresser…

Une réponse
  1. Avatar de colonelMoutarde
    colonelMoutarde

    bonjour,
    le @ est une mauvaise pratique il vaut mieux utiliser un error handler http://php.net/manual/fr/function.set-error-handler.php mais sinon le script est très intéressant. merci.