Quando usar wp_reset_postdata ();

4

Eu criei um tema filho para o modelo de tema tweentysixteen. Eu vejo o loop principal localizado em index.php, mas notei que após a instrução while, não há exibição de wp_reset_postdata(); Se eu fosse colocá-lo lá, o loop ganharia algum benefício?

Para fins de teste, quero exibir um segundo loop sob o primeiro, com limites de página. Eu estou supondo que deveria ser assim ...

$mposts = new WP_Query('posts_per_page=3');
    while ( $mposts->have_posts() ) : $mposts->the_post();
        get_template_part( 'template-parts/content', get_post_format() );
    endwhile;

e se isso estiver correto, eu coloco um wp_reset_query , antes deste processo ou depois dele? se é útil tê-lo, por que importa onde é colocado?

Obrigado!

    
por klewis 05.10.2016 / 16:51

1 resposta

2

Primeiro, devemos falar sobre por que você precisa usar wp_reset_query() no primeiro lugar.

O que wp_reset_query() faz é redefinir o objeto global $wp_query de volta ao seu estado original. Como você está criando um objeto / instância new WP_Query , não substitui o objeto global $wp_query . O único caso real que você precisaria chamar essa função é se você está usando query_posts() que você deveria esteja em 99% dos casos.

Sempre que você percorrer uma WP_Query personalizada (usando The Loop como você tem acima), ela substituirá o objeto global $post que significa que devemos usar wp_reset_postdata() . Como isso só acontece durante o processo de Loop, devemos chamar a função depois do The Loop. Devemos estar verificando para garantir que temos postagens e, para garantir que não chamamos essa função desnecessariamente, queremos colocá-la dentro da condicional, como visto no exemplo abaixo:

$myquery = new WP_Query( $args );

if( $myquery->have_posts() ) {

    while( $myquery->have_posts() ) {
        $myquery->the_post();
        /** Content **/
    }

    wp_reset_postdata();
}
    
por Howdy_McGee 05.10.2016 / 17:17

Tags