J'utilise le code suivant pour récupérer des messages:
<?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; ?>
Dois-je utiliser wp_reset_query()
? Si je le fais, où dois-je le placer?
the_post()
méthode (c'est-à-dire$my_custom_query->the_post()
), vous remplissez les variables de post que la requête principale examine, la réinitialisation remplit ces variables avec les données précédentes lorsque vous l'appelez. Il est recommandé d'utiliser des réinitialisations après des requêtes personnalisées.Réponses:
Salut @janoChen:
Réponse simple: non.
Ce qui suit est ce que le code PHP pour la fonction
wp_reset_query()
de/wp-includes/query.php
dans v3.0.4 WORDPRESS ainsi que les fonctions appelées par la suite. Vous pouvez voir qu'il s'agit principalement de modifier des variables globales.Lorsque vous utilisez,
new WP_Query($args)
vous affecterez la valeur de retour des valeurs à une variable locale, donc, à moins que vous ne fassiez quelque chose de si complexe que vous connaissiez déjà la réponse à cette question, alors non, vous n'avez pas besoin d'appelerwp_reset_query()
:-Mike
la source
the_post()
dans son code, les meilleures pratiques dictent qu'il doit utiliserwp_reset_postdata()
.wp_reset_query()
appelswp_reset_postdata()
, ce qui fonctionnera, bien que l'autre chosewp_reset_query()
- réinitialiser la$wp_query
variable globale - ne soit pas nécessaire, mais pas nuisible dans ce cas. La réponse est donc OUICe n'est pas nécessaire pour
WP_Query
lui-même, mais il est nécessaire (ou du moins une bonne chose à faire) si vous utilisez des fonctions / méthodes connexes (telles quethe_post()
ousetup_postdata()
) pour remplir des variables globales avec vos données.Fondamentalement, la création d'un nouvel
WP_Query
objet est simplement une récupération de données, mais son utilisation pour exécuter la boucle active et rendre les données accessibles aux balises de modèle modifie l'environnement et il est bon de tout réinitialiser par la suite.Dans l'ensemble - ce n'est pas une pénalité de performance significative de l'appeler, il est donc plus facile de toujours l'appeler que de décider si vous le devriez ou d'oublier et d'avoir quelque chose de mystérieusement cassé.
Mise à jour
wp_reset_postdata()
la fonction semble être un choix plus approprié.wp_reset_query()
réinitialise les variables globales$wp_query
(quelWP_Query
objet personnalisé n'affecte pas) et$post
(qu'il pourrait comme ci-dessus) variables.wp_reset_postdata()
restaure seulement$post
, ce qui devrait être suffisant.la source
Non. Si vous instanciez votre propre objet WP_Query, c'est à vous de faire ce que vous voulez. Cependant, si vous trafiquez la
global $wp_query
variable, eh bien, votre dans l'espace de noms global affecte le script de toute personne qui utilise simultanément cette variable. Et si vous faites quelque chose pour modifier les données, vous devez également les réinitialiser après avoir fini de les utiliser.la source
Si vous utilisez une requête personnalisée comme celle-ci
Vous ne rencontrerez alors aucun problème. Sinon, si sur la même page il y a une autre boucle, vous obtiendrez des résultats inattendus. Je n'ai pas utilisé wp_reset_query () dans le code ci-dessus (qui a été placé dans mon fichier header.php. Ensuite, quand je suis entré dans single.php, j'obtiens surtout les pages de détail d'autres catégories, ce qui était frustrant. Plus tard, j'ai réalisé que je J'ai oublié de réinitialiser la requête en haut. Bientôt, cela a commencé à fonctionner comme un charme.
la source