web-dev-qa-db-ja.com

$ post-> IDが間違ったIDを表示する

これはかなり変です。

このコード:

$post->ID

ブログページ(/wp-admin/options-reading.phpでブログとして設定されているページ)を除くたびに正しいIDを表示します。

そのページで$ post-> IDは与えられたページの最初のブログ投稿のIDを返します。

厄介なことに、すべてのページからすべてのループを削除しようとしました。完全に消去されたloop.phpファイルで、$ postに影響を与えていた可能性のあるすべてのウィジェットを無効にしました。

何かヒントは?

私のindex.phpはかなり標準的です:

<?php get_header();?> 

    <?php get_template_part( 'loop', 'index' ); ?>

<?php get_footer(); ?>

そしてloop.phpは:

<?php while ( have_posts() ) : the_post(); ?>
 contents
<?php endwhile; ?>

多分問題は私がheader.phpのIDを取得しようとしているということですか?

そして、はい、wp_reset_postdata()はそれほど役に立ちません:/

2
Wordpressor

そのページで$ post-> IDは与えられたページの最初のブログ投稿のIDを返します。

それはそれがどのように機能するかです。 $postはループの最初の投稿に設定されます。単一の投稿およびページでは、投稿またはページと同じです。アーカイブページでは、結果セットの最初の投稿です。そして、あなたがそれについて考えるならば、両方とも本当に同じものです。単一の投稿とページは、セット内に1つの結果しかありません。これは、予想される投稿またはページと一致することが起こります。

厄介なことに、すべてのページからすべてのループを削除しようとしました。完全に消去されたloop.phpファイルで、$ postに影響を与えていた可能性のあるすべてのウィジェットを無効にしました。

メインクエリはテンプレートがロードされる前に実行され、そのプロセスで$postが設定されます。テンプレートからものを削除してもそれは変わりません。

何かヒントは?

はい。適切なループの内側を除いて$postに頼らないでください。あなたがページ自体についての情報を必要とするならば:

$pobj = get_queried_object();
var_dump($pobj); // debugging

参照:

http://codex.wordpress.org/Function_Reference/get_queried_object

10
s_ha_dum