Estou usando o seguinte código para recuperar postagens:
<?php
$featuredPosts = new WP_Query();
$featuredPosts->query('showposts=5&cat=3');
while ($featuredPosts->have_posts()) : $featuredPosts->the_post(); ?>
<h1><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h1>
<div class="meta">
By <?php the_author() ?>
</div>
<div class="storycontent">
<?php the_excerpt(); ?>
</div>
<?php endwhile; ?>
Preciso usar wp_reset_query()
? Se sim, onde devo colocá-lo?
the_post()
método (ie.$my_custom_query->the_post()
), Você reabastece as variáveis de postagem que a consulta principal analisa, a redefinição reabastece esses vars com os dados anteriores quando você a chama. É uma boa prática usar redefinições após consultas personalizadas.Respostas:
Oi @janoChen:
Resposta simples: não.
O que se segue é o que o código PHP para a função
wp_reset_query()
de/wp-includes/query.php
no WordPress v3.0.4, bem como as funções posteriormente chamado. Você pode ver que se trata principalmente de modificar variáveis globais.Ao usar,
new WP_Query($args)
você atribuirá o valor de retorno dos valores a uma variável local; portanto, a menos que esteja fazendo algo tão complexo que já saiba a resposta para essa pergunta, não será necessário chamarwp_reset_query()
:-Mike
fonte
the_post()
em seu código, as práticas recomendadas determinam que ele deve usarwp_reset_postdata()
.wp_reset_query()
chamadaswp_reset_postdata()
, para que funcione, embora a outra coisa funcionewp_reset_query()
- redefinir a$wp_query
variável global - não é necessário, mas não é prejudicial nesse caso. Portanto, a resposta é SIMNão é necessário
WP_Query
por si só, mas é necessário (ou pelo menos uma coisa boa a fazer) se você usar quaisquer funções / métodos relacionados (comothe_post()
ousetup_postdata()
) para preencher variáveis globais com seus dados.Basicamente, criar um novo
WP_Query
objeto é apenas recuperação de dados, mas usá-lo para executar um loop ativo e tornar os dados acessíveis às tags de modelo modifica o ambiente e é bom redefinir tudo posteriormente.No geral - não é uma penalidade significativa de desempenho chamá-lo, por isso é mais fácil chamá-lo sempre do que decidir se deveria ou esquecê-lo e ter algo misteriosamente quebrado.
Atualizar
wp_reset_postdata()
A função parece ser uma escolha mais adequada.wp_reset_query()
redefine variáveis globais$wp_query
(queWP_Query
objeto personalizado não afeta) e$post
(que podem ser acima) variáveis.wp_reset_postdata()
apenas restaura$post
, o que deve ser suficiente.fonte
Não. Se você instanciar seu próprio objeto WP_Query, é seu o que você deseja. No entanto, se você adulterar a
global $wp_query
variável, bem, você estará no espaço de nomes global, afetando o script de qualquer pessoa que esteja usando simultaneamente essa variável. E se você fizer algo para alterar os dados nele, também deverá redefini-lo após concluir o uso.fonte
Se você estiver usando uma consulta personalizada como esta
Então você não terá problemas. Caso contrário, se na mesma página houver outro loop, você será obrigado a obter 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 no single.php, geralmente recebo as páginas de detalhes de outras categorias que eram frustrantes. Mais tarde, percebi que eu esqueci de redefinir a consulta no topo e logo começou a funcionar como um encanto.
fonte