Je veux lister les pages enfants de ma page actuelle dans l'encadré du thème. Cependant, ma barre latérale (côté gauche) se trouve avant la boucle dans le modèle et le post-> ID ne renverra rien si c'est avant la boucle.
Mon code actuel:
<?php
wp_list_pages('title_li=&child_of='.$post->ID);
?>
J'ai lu quelque chose à propos de l'appel d'une variable globale pour accéder à cela, mais je n'ai pas eu de chance jusqu'à présent.
Toute aide serait appréciée.
... le post-> ID ne retournera rien si c'est avant la boucle
De manière générale, c'est faux. La variable $post
est définie bien avant le début de la boucle dans votre thème, pour la plupart des pages. La requête principale "amorce" cette variable à la première publication de la boucle. Cela dit, dépendre de cette variable en dehors de la boucle n’est pas l’approche la plus fiable. Plus fiable, consisterait à utiliser get_queried_object
.
$qobj = get_queried_object();
wp_list_pages('title_li=&child_of='.$qobj->ID);
Étant donné que get_queried_object
renvoie des informations différentes en fonction de la page sur laquelle vous vous trouvez, il est également préférable de vérifier le type de page avant de l'utiliser.
if (is_page()) {
$qobj = get_queried_object();
wp_list_pages('title_li=&child_of='.$qobj->ID);
}
Ou vérifiez l'objet lui-même.
$qobj = get_queried_object();
if (isset($qobj->post_type) && 'page' == $qobj->post_type) {
wp_list_pages('title_li=&child_of='.$qobj->ID);
}
Ce ne sont que des exemples. Je ne sais pas quelles sont vos conditions précises.
Essaye ça:
// get the post id
$post_id = get_queried_object_id();
// get the children
$children = get_pages('child_of' => $post_id);
//output them
if( count( $children ) != 0 ) {
echo "<ul>";
foreach ($children as $child) {
// if we only want children, not grandchildren
if ($child->post_parent == $post_id) {
echo "<li><a href=\"" . get_permalink($child->ID) . "\">";
echo $child->post_title;
echo "</a></li>";
}
}
echo "</ul>";
}
essayez de faire du code comme
global $post;
var_dump($post);//test values in $post
wp_list_pages('title_li=&child_of='.$post->ID);
Il n’ya vraiment pas assez d’informations pour donner une réponse précise ici, mais si vos soupçons sont fondés, essayez de remplacer $post->ID
par get_the_ID()
.