WP_QUERY内函数内的WP_QUERY

时间:2013-11-04 作者:eskimo

我有一个如下查询:

$args = arguments for the query
$query = new WP_Query($args);

while ($query->have_posts()): $query->the_post();
$post_id = get_the_ID();
echo my_function($post_id);
endwhile; wp_reset_query(); endif;
然后在my_function 还有另一个带有第二个函数的查询。第二个函数使用post_id 作为输入:

$args = arguments for the query, using `$post_id` as input
while ($query->have_posts()): $query->the_post();
// Do stuff
endwhile; wp_reset_query(); endif;
问题是第一个查询的输出(使用my_function) 不正确。中的查询my_function 似乎打乱了循环。

如你所见,我使用wp_reset_query() 我也试过了wp_reset_postdata(). my_function 输出一些帖子信息,其中包括标题。它显示当前页面(查询所在的页面)的标题,而不是所查询帖子的标题,因此我认为我在重置查询方面遗漏了一些内容。

2 个回复
SO网友:Nicolai Grossherr

使用wp_reset_query() 如果你正在使用query_posts(), 你不需要也不应该这样做-看 When should you use WP_Query vs query_posts() vs get_posts()? .

这意味着你应该WP_Querywp_reset_postdata() 相反除此之外,您还应该为自定义的辅助查询提供一个对象,该对象的名称不同于$query - 像这样:

$your_custom_query = new WP_Query($args);
while ($your_custom_query->have_posts()): $your_custom_query->the_post();
    //post stuff
endwhile; wp_reset_postdata(); endif;

SO网友:eskimo

请注意:下面的答案确实解决了如上所述的问题,但它不会纠正循环,因此它会停止更改查询的数据。

问题是在第二次查询之后使用的函数(如get_the_title()) 返回查询所在的当前页面的标题,而不是所查询帖子的标题。

例如,我最终将所有需要的值存储在变量中$title = get_the_title() 在第二个查询之前。在第二次查询之后,可以使用这些变量,因为它们不会被第二次查询更改。

我仍然不知道为什么第二个查询会更改数据。我尝试重命名第二个查询并使用wp_reset_postdata 正如建议的那样,但这并没有解决问题。

结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post