web-dev-qa-db-fra.com

$ post> ID affiche un mauvais identifiant

J'ai déjà posé une question sur la liste de toutes les sous-pages:

Liste de toutes les sous-pages?

Mais toutes les questions étaient fausses.

Quoi qu'il en soit, j'ai maintenant une question plus simple.

global $post;
echo $post>ID

Fonctionne parfaitement bien, mais sur les pages des barres latérales uniquement. Quand il se trouve à côté de la boucle du blog (dans une section de blog), il devient fou, par exemple, Blog a un ID de 216 (et $ post> ID dans loop.php 216), mais $ post> ID dans la barre latérale en indique 87. Pourquoi cela arrive-t-il? Comment résoudre ce problème?

Je vous remercie!

[modifier]

Je soupçonne que la boucle et la barre latérale sont toutes deux incluses dans la page d'index séparément et que la boucle reçoit un ID de post différent de celui de la barre latérale. La grande question est de savoir comment changer cela.

[modifier pour Rarst]

 wp_reset_postdata();

                global $post;

                $children = wp_list_pages('title_li=&child_of='.$post->ID.'&echo=0');
                echo $children;

Donne le même résultat. Cela fonctionne avec les pages, pas le blog. J'ai une boucle normale, comme dans Twenty Ten par exemple.

4
Wordpressor

Si je comprends bien, vous essayez d'afficher la liste des pages enfant d'une page d'un widget. Si c'est le cas, vérifiez d'abord si vous êtes sur une page en utilisant la balise conditionnelle is_page(), puis vous pouvez utiliser $ wp_query-> get_queried_object_id () comme t31os. a fait remarquer que votre fonction d'affichage de widget devrait ressembler à ceci:

if (is_page()){
    Global $wp_query;
    $current_page_id = $wp_query->get_queried_object_id();
    $children = wp_list_pages('title_li=&child_of='.$current_page_id.'&echo=0');
    echo $children;
}

Donc, seulement si vous êtes sur une page, ce code sera exécuté

5
Bainternet

$post change à chaque fois que the_post() ou setup_postdata() sont utilisés - ce qui se trouve dans la plupart des boucles.

Utilisez wp_reset_postdata() pour rétablir les données d'origine.

Modifier

$post contient les données de individual post, configurées pendant la boucle. Cela n'a aucun sens de l'utiliser en dehors de ce contexte.

Pour traiter plusieurs pages, vous devez les interroger (avec get_pages() par exemple) et les utiliser.

5
Rarst