web-dev-qa-db-fra.com

La boucle semble collée à un seul post (maintenant supprimé)

Au début, je pensais que c’était un problème d’ACF, mais l’impression de certaines valeurs m’a permis de découvrir que ma boucle semblait bloquée sur un seul poste, mais seulement lorsque certains champs étaient concernés.

Pour résumer ma configuration: j'ai installé le plugin Advanced Custom Fields et défini certains champs personnalisés (principalement numériques) sur lesquels j'ai construit des types de publication personnalisés.

La première occurrence du problème est apparue alors que je développais une page d’archive pour un type de publication personnalisé: tout fonctionnait, mais quelques champs étaient renvoyés toujours avec les mêmes valeurs, celles liées à un type de message. poste spécifique (numéro de poste 50). Après quelques tentatives pour corriger le code (ce qui a conduit à cette question ), j'ai quitté la page d'archive et commencé à travailler sur une seule page. Ensuite, encore une fois, la plupart des champs fonctionnaient bien, mais quelques-uns (les mêmes quelques pages de l'archive) retournaient toujours les mêmes valeurs (encore une fois, les valeurs du numéro d'article 50 ). J'ai donc commencé à imprimer l'ID de l'article et chaque fois que j'appelle get_the_ID(), j'en ai toujours 50, même après avoir supprimé ledit article, dans une tentative plutôt inutile de se débarrasser de ses valeurs.

Je pense que c'est un peu étrange, mais d'après le comportement, je dirais que la boucle est bloquée sur le même message, peu importe comment je l'appelle.

1
frollo

J? ai compris! Pour tout le monde à l'avenir avec le même problème:

La get_field_object() d’ACF crée apparemment un WP_Query et ne nettoie pas après, alors, comme je l’appelais pour chaque message, j’ai toujours eu le même message après un certain point dans l’élaboration. J'ai trouvé la solution dans cette question .

Un code pour plus de clarté:

<?php while ( $query->have_posts() ) : $query->the_post();?>
 <h1><?php the_title();?></h1>
 //Some more prints
 <?php $field = get_field_object('my_field');
   $value = intval($field["value"]);
   $label = $field["choices"][$value];
   echo $label;
  //From this point on every custom field or other data came from the same post
 ?>

Il existe probablement de meilleurs moyens de résoudre ce problème, mais c'est simple et cela fonctionne bien:

<?php while ( $query->have_posts() ) : $query->the_post();?>
 <h1><?php the_title();?></h1>
 //Some more prints
 <?php 
   $backup = $post; //Backing up the current post
   $field = get_field_object('my_field');
   $value = intval($field["value"]);
   $label = $field["choices"][$value];
   echo $label;
   $post = $backup; //Restoring the post
 ?>
0
frollo

Avez-vous essayé d'utiliser wp_reset_query () avant la boucle.

0
david_nash