0

「Portfolio」という投稿タイプと、それを処理するための single-portfolio.php ファイルがあります (WordPress です)。そのようなものを使用すると、期待どおりに機能します。

$post_id = $post->ID; //returns ID of current portfolio post. Good!

しかし、途中でこのような短いクエリを投稿すると:

$post_id = $post->ID; //returns ID of current portfolio post. Good!
wp_reset_query();
query_posts('posts_per_page=4');
    if ( have_posts() ) : while ( have_posts() ) : the_post();
            the_id(); //returns ID of standard blog post
        endwhile;
    endif; 
wp_reset_query();
$post_id = $post->ID; //returns ID of last BLOG post. Wrong!

$post_id上記の例の変数だけが心配です。現在のPORTFOLIO投稿の正しいIDを常に返し、他のクエリに依存しないようにしたい. どうすればそれを達成できますか?

4

2 に答える 2

3

wp_reset_postdata()あなたが求めている結果が得られると信じています。

$the_query = new WP_Query( 'posts_per_page=4' );

if ( $the_query->have_posts() ) :
    while ( $the_query->have_posts() ) : $the_query->the_post();
        // output
    endwhile;
endif;

wp_reset_postdata();

別の質問で文書化した別のアプローチがあることに注意してください。違いは何ですか、それぞれをいつ使用する必要があるかを尋ねます。

于 2013-02-14T01:13:10.313 に答える
0

wp_reset_query関数はグローバル変数もリセットしますが、グローバル$post変数にのみ基づいてい$wp_queryます。おそらくWordpressの小さな欠陥の1つが原因で、それはまだ変更されています. あなたの場合、私は単純WP_Query::rewind_posts()にそれを行うべきだと言います:

wp_reset_query();
$wp_query->rewind_posts();
$post_id = $post->ID;

また、最初のループを上書きするのではなく、2 番目のループを作成することを検討する必要があります。

同様に参照してください:

于 2012-06-27T10:13:49.227 に答える