Question

J'utilise le code suivant pour récupérer les 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 placer?

Était-ce utile?

La solution

Salut @janoChen:

La réponse est simple:. pas

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 par la suite appelé. Vous pouvez voir que c'est principalement au sujet de la modification des variables globales.

Lorsque vous utilisez new WP_Query($args) vous serez assignez la valeur de retour des valeurs à une variable locale, sauf si vous faites quelque chose si complexe que vous auriez déjà connaître la réponse à cette question alors non, vous n'avez pas besoin de appel 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('d.m.y', $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, '<!--nextpage-->' ) ) {
    if ( $page > 1 )
      $more = 1;
    $multipage = 1;
    $content = str_replace("\n<!--nextpage-->\n", '<!--nextpage-->', $content);
    $content = str_replace("\n<!--nextpage-->", '<!--nextpage-->', $content);
    $content = str_replace("<!--nextpage-->\n", '<!--nextpage-->', $content);
    $pages = explode('<!--nextpage-->', $content);
    $numpages = count($pages);
  } else {
    $pages = array( $post->post_content );
    $multipage = 0;
  }

  do_action_ref_array('the_post', array(&$post));

  return true;
}

-Mike

Autres conseils

Il ne faut pas pour WP_Query par lui-même, mais il est nécessaire (ou au moins une bonne chose à faire) si vous utilisez des fonctions / méthodes connexes (telles que the_post() ou setup_postdata()) pour remplir global variables avec vos données.

créer Fondamentalement nouvel objet WP_Query est simplement la récupération de données, mais l'utiliser pour exécuter la boucle active et rendre les données accessibles aux balises de modèle ne environnement et modify il est bon de tout remis à zéro après.

Dans l'ensemble -. Il n'est pas la peine de performance significative pour l'appeler, il est donc plus facile d'appeler toujours que de décider si vous devez ou oublier et avoir quelque chose mystérieusement brisé

Mise à jour

wp_reset_postdata() fonction semble plus choix judicieux. wp_reset_query() remet à zéro $wp_query global (qui objet WP_Query personnalisé ne touche pas) et $post (qu'elle pourrait comme ci-dessus) des variables. wp_reset_postdata() restaure uniquement $post, ce qui devrait être suffisant.

Non

. Si vous instanciez votre propre objet WP_Query, est la vôtre à faire avec ce que vous voulez. Toutefois, si vous tentez de forcer la variable global $wp_query, eh bien, alors votre dans l'espace de noms global affectant le script de quelqu'un qui utilise simultanément cette variable. Et si vous faites quelque chose pour changer les données, vous devez également réinitialiser après votre fait de l'utiliser.

Si vous utilisez requête personnalisée comme ceci

$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(); 

Ensuite, vous ne rencontrerez pas de problèmes. Dans le cas contraire, si sur la même page il y a une autre boucle que vous êtes lié pour obtenir des résultats inattendus. Je ne l'ai pas utilisé wp_reset_query () dans le code ci-dessus (qui a été placé dans mon fichier header.php. Puis, quand je suis entré dans single.php la plupart du temps je reçois les pages de détail d'autres catégories qui était frustrant. Plus tard, je réalisais que je a oublié de réinitialiser la requête en haut. Bientôt, il a commencé à travailler comme un charme.

Licencié sous: CC-BY-SA avec attribution
Non affilié à wordpress.stackexchange
scroll top