É necessário usar wp_reset_query () em uma chamada WP_Query?

Estou usando o seguinte código para recuperar mensagens:

query('showposts=5&cat=3'); while ($featuredPosts->have_posts()) : $featuredPosts->the_post(); ?> 

<a href="https://wordpress.stackexchange.com//questions/8031/is-it-necessary-to-use-wp-reset-query-in-a-wp-query-call/">

By

Preciso usar wp_reset_query() ? Se eu fizer, onde devo colocá-lo?

Solutions Collecting From Web of "É necessário usar wp_reset_query () em uma chamada WP_Query?"

Oi @janoChen:

Resposta simples: não.

O que se segue é o que o código PHP para a function wp_reset_query() de /wp-includes/query.php no WordPRess v3.0.4, bem como as funções subsequentemente chamadas. Você pode ver que é principalmente sobre como modificar variables ​​globais.

Quando você usa o new WP_Query($args) você estará atribuindo o valor de retorno dos valores a uma variável local, então, a menos que você esteja fazendo algo tão complexo que você já conhece a resposta a esta pergunta, então não, você não precisa ligar para wp_reset_query() :

 function wp_reset_query() { unset($GLOBALS['wp_query']); $GLOBALS['wp_query'] =& $GLOBALS['wp_the_query']; wp_reset_postdata(); } function wp_reset_postdata() { global $wp_query; if ( !empty($wp_query->post) ) { $GLOBALS['post'] = $wp_query->post; setup_postdata($wp_query->post); } } function setup_postdata($post) { global $id, $authordata, $day, $currentmonth, $page, $pages, $multipage, $more, $numpages; $id = (int) $post->ID; $authordata = get_userdata($post->post_author); $day = mysql2date('dmy', $post->post_date, false); $currentmonth = mysql2date('m', $post->post_date, false); $numpages = 1; $page = get_query_var('page'); if ( !$page ) $page = 1; if ( is_single() || is_page() || is_feed() ) $more = 1; $content = $post->post_content; if ( strpos( $content, '' ) ) { if ( $page > 1 ) $more = 1; $multipage = 1; $content = str_replace("\n\n", '', $content); $content = str_replace("\n", '', $content); $content = str_replace("\n", '', $content); $pages = explode('', $content); $numpages = count($pages); } else { $pages = array( $post->post_content ); $multipage = 0; } do_action_ref_array('the_post', array(&$post)); return true; } 

-Mike

Não é necessário para WP_Query por si só, mas é necessário (ou, pelo menos, bom fazer) se você usar quaisquer funções / methods relacionados (como the_post() ou setup_postdata() ) para preencher variables ​​globais com seus dados.

Basicamente, criar um novo object WP_Query é meramente recuperação de dados, mas usá-lo para executar o loop ativo e tornar os dados acessíveis às tags de modelo modifica o ambiente e é bom redefinir tudo depois.

Em geral, não é uma penalidade de desempenho significativa chamá-lo, então é mais fácil sempre chamá-lo do que decidir se você deve ou esquecer sobre isso e ter algo misteriosamente quebrado.

Atualizar

wp_reset_postdata() function wp_reset_postdata() parece ser uma escolha mais apropriada. wp_reset_query() redefine globalmente $wp_query (o qual WP_Query personalizado não afeta) e as variables $post (que pode ser como acima). wp_reset_postdata() apenas restaura $post , o que deve ser suficiente.

Não. Se você instanciar seu próprio object WP_Query, é seu para fazer com o que você quer. No entanto, se você manipular a variável global $wp_query , bem, então, no seu espaço de nomes global que afete o script de qualquer pessoa que esteja simultaneamente usando essa variável. E se você fizer algo para alterar os dados nele, você também deve reiniciá-lo após o seu uso.

Se você estiver usando a consulta personalizada assim

 $cat = new WP_query(); $cat->query("cat=19,20,-23&showposts=5&orderby=rand"); while ($cat->have_posts()) : $cat->the_post(); $data = get_post_meta( $post->ID, 'key', true ); $img_arrays []= $data['productimage']; $lnk_arrays[] =get_permalink($post_ID); endwhile; wp_reset_query(); 

Então você não terá problemas. Caso contrário, se na mesma página há outro loop, você deve obter alguns resultados inesperados. Eu não usei wp_reset_query () no código acima (que foi colocado no meu arquivo header.php. Então, quando entrei em single.php, na maior parte, eu recebo as páginas de detalhes de outras categorias que foram frustrantes. Mais tarde, percebi que eu esqueceu de redefinir a consulta no topo. Em breve, começou a funcionar como um charme.