web-dev-qa-db-ja.com

$ post> IDに誤った投稿IDが表示される

私は前にすべてのサブページをリストすることについて質問をしました:

すべてのサブページを一覧表示する

しかし、すべての質問は間違っていました。

とにかく、私は今より簡単な質問をしています。

global $post;
echo $post>ID

完全にうまくいきますが、ページ上にはサイドバーしかありません。ブログのループの隣(ブログセクション内)にいると、頭がおかしくなります。たとえば、BlogのIDは216(およびloop.phpの$ post> IDは216)ですが、サイドバーの$ post> IDは87です。なんでこんなことが起こっているの?それを修正するには?

ありがとうございました!

[編集]

私は、ループとサイドバーが両方ともインデックスページに別々に含まれていて、ループがサイドバーとは異なる投稿IDを取得しているのではないかと疑っています。大きな問題はそれをどう変えるかです。

[Rarst用に編集]

 wp_reset_postdata();

                global $post;

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

同じ結果が得られます。ブログではなくページで動作します。例えば二十から十のように、私は通常のループを持っています。

4
Wordpressor

もし私が正しく理解しているなら、あなたはウィジェットのページの子ページのリストを表示しようとしています、そうなら最初にあなたがコンディショナルタグis_page()を使っているページ上にいるかどうか確認してください。あなたのウィジェットの表示機能はこのようになるはずですので指摘しています:

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;
}

あなたがページにいる場合にのみ、このコードが実行されます

5
Bainternet

the_post()またはsetup_postdata()が使用されるたびに$postが変わります - これはほとんどのループにあります。

元のデータに戻すにはwp_reset_postdata()を使用してください。

編集

$postは、ループ中に設定された individual postのデータを保持します。その文脈の外でそれを使うのは意味がありません。

複数のページを処理するには、それらを(たとえばget_pages()を使って)問い合わせてそれを処理する必要があります。

5
Rarst