Como redefinir corretamente uma consulta WP_Query aninhada

Estou faltando alguma coisa aqui. Qual é a maneira correta de redefinir uma consulta para que ela não interfira em nenhuma outra consulta em que possa ser aninhada?

Este é o tipo de resultado que eu vou para:

Página principal

Este é o conteúdo da página principal. Agora, vamos exibir algumas consultas aninhadas personalizadas.

Outer page 1

Inner post 1 Inner post 2 

Conteúdo continuado da página 1 continuado …

Outer page 2

  Inner post 1 Inner post 2 

Conteúdo externo continuado …

… etc

Mas não consigo Outer Page X content continued trabalhando o Outer Page X content continued do Outer Page X content continued – sempre reverte para a consulta interna ou a consulta da página principal.

Aqui está o meu modelo de página. É comentado com o comportamento que recebo com cada uma das funções de reboot ( wp_reset_postdata() , wp_reset_query() , $query->reset_query() e $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 

Qual é a maneira correta de fazer isso? Estou à procura de uma resposta generalizável que não confie em saber quantos níveis de profundidade a consulta é ou o contexto em que está sendo usado. ou seja, algo que pode ser extraído para um shortcode.

Solutions Collecting From Web of "Como redefinir corretamente uma consulta WP_Query aninhada"