我错过了一些东西。重置查询以使其不干扰可能嵌套在其中的任何其他查询的正确方法是什么?
This is the kind of result I\'m going for:
主页
这是主页内容。现在,让我们显示一些自定义嵌套查询。
Outer page 1
Inner post 1
Inner post 2
外部第1页内容(续)
Outer page 2
Inner post 1
Inner post 2
外部第2页内容(续)
。。。等
但我不能得到Outer Page X content continued
零件加工它总是还原为内部查询或主页查询。
Here\'s my page template. 它是用我在每个重置函数中得到的行为进行注释的(wp_reset_postdata()
, wp_reset_query()
, $query->reset_query()
, 和$query->reset_postdata()
).
// BEGIN PAGE TEMPLATE
while ( have_posts() ) : the_post();
the_title(); // "Main page"
/* --------- OUTER QUERY --------- */
$outer_query = new WP_Query( [ \'post_type\' => \'page\' ] );
if ($outer_query->have_posts()) :
while ($outer_query->have_posts()) : $outer_query->the_post();
the_title(); // "Outer page 1", "Outer page 2", etc.
/* --------- INNER QUERY --------- */
$inner_query = new WP_Query( [ \'post_type\' => \'post\', \'posts_per_page\' => 2 ] );
if ($inner_query->have_posts()) :
while ($inner_query->have_posts()) : $inner_query->the_post();
the_title();
endwhile;
endif;
/**
* Now I\'m done with the inner query.
* How do I get back to the outer query?
*
* Desired value of the_title():
* "Outer page 1" on first iteration, "Outer page 2" on second, etc.
*/
// wp_reset_postdata(); // Nope! Results in "Main page"
// wp_reset_query(); // Nope! Results in "Main page"
// $inner_query->reset_postdata(); // Nope! Results in "Inner post 1"
// $inner_query->reset_query(); // Nope! Results in "Inner post 2"
// If no reset is used: // Nope! Results in "Inner post 2"
the_title();
endwhile;
endif;
wp_reset_postdata();
// Now back to the main page
the_title(); // Works
endwhile;
// END OF PAGE TEMPLATE
正确的方法是什么?我正在寻找一个可概括的答案,它不依赖于知道查询的深度有多深,也不依赖于使用它的上下文。i、 例如,可以提取成短代码的东西。