web-dev-qa-db-fra.com

Accéder à post-> ID en dehors de la boucle pour lister les pages enfants

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.

1
rowefx

... 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.

1
s_ha_dum

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>";
}
1
crdunst

essayez de faire du code comme

global $post;
var_dump($post);//test values in $post
wp_list_pages('title_li=&child_of='.$post->ID);
0
Ravinder Kumar

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().

0
Matthew Boynes