J'ai une taxonomie personnalisée avec plusieurs citations attribuées à chaque terme. Deux termes (general
et yoga
) partagent le même pool de trois guillemets. Sur mon front-page.php
, je tire au hasard une citation de chaque terme et l’affiche en guise d’introduction à chaque section. Dans le cas des termes general
et yoga
, j'ai inclus une valeur intrinsèque, la variable $do_not_duplicate
, afin d'éviter que, lors du deuxième tirage, le même guillemet soit repris et que le même guillemet apparaisse deux fois sur une seule page. Le code du premier bloc est:
<blockquote class="container" style="color:#287da2;">
<?php
$args = array(
'post_type' => 'quotes',
'thesections' => 'general',
'posts_per_page' => 1,
'orderby' => 'Rand'
);
$the_query = new WP_Query( $args );
if ( $the_query->have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post(); $do_not_duplicate = $post->ID; ?>
<q><?php the_field( 'quote_text' ); ?></q><br><cite><?php the_field( 'quote_Origin' ); ?></cite>
<?php endwhile;
wp_reset_postdata();
else: ?>
<p>DB error</p>
<?php endif; ?>
</blockquote>
Le code du deuxième bloc est:
<blockquote class="container" style="color:#1f8665;">
<?php
$args = array(
'post_type' => 'quotes',
'thesections' => 'yoga',
'posts_per_page' => 1,
'orderby' => 'Rand'
);
$the_query = new WP_Query( $args );
if ( $the_query->have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post(); if( $post->ID == $do_not_duplicate ) continue; ?>
<q><?php the_field( 'quote_text' ); ?></q><br><cite><?php the_field( 'quote_Origin' ); ?></cite>
<?php endwhile;
wp_reset_postdata();
else: ?>
<p>DB error</p>
<?php endif; ?>
</blockquote>
Le problème, c’est que cela fonctionne la plupart du temps, mais après deux ou trois rechargements de page, où les guillemets sont mis à jour correctement et où aucun doublon ne s’affiche, il arrive que le deuxième bloc reste vide sans sortie tandis que le premier bloc affiche un guillemet. Aucune erreur php dans les journaux n'est affichée, pas plus que les erreurs en mode débogage wp - rien. Est-ce dû au petit nombre de guillemets dans le terme (3 guillemets) ou existe-t-il une erreur dans le code? Je n'ai littéralement aucune idée du problème dans ce cas et de ce qui mène à ces défections dans le deuxième bloc tous les quelques recharges. :/Meilleures salutations Ralf
Le problème est comment vous faites l'exclusion. Cela se produit après vous avez saisi votre deuxième citation. Si elle correspond à la première citation, elle n'apparaîtra pas en silence.
Essayez ceci pour votre 2e bloc:
<blockquote class="container" style="color:#1f8665;">
<?php
$args = array(
'post_type' => 'quotes',
'thesections' => 'yoga',
'posts_per_page' => 1,
'post__not_in' => array( $do_not_duplicate ),
'orderby' => 'Rand'
);
$the_query = new WP_Query( $args );
if ( $the_query->have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
<q><?php the_field( 'quote_text' ); ?></q><br><cite><?php the_field( 'quote_Origin' ); ?></cite>
<?php endwhile;
wp_reset_postdata();
else: ?>
<p>DB error</p>
<?php endif; ?>
</blockquote>
Le paramètre post__not_in
empêchera WP_Query
de sélectionner votre publication $do_not_duplicate
en premier lieu.