J'ai une boucle qui génère des champs <option>
pour un groupe <select>
. Il contient les noms de nombreuses villes pour de nombreux packs de voyage que je publie. L'astuce est que j'ai besoin d'éviter les valeurs répétées.
Par exemple: j'ai 4 packs de voyages au départ de Chicago, 5 d’Orlando, 3 de Los Angeles et 2 de New York.
Donc, il génère:
Sélectionnez votre ville
Chicago
Chicago
Chicago
Chicago
Orlando
Orlando
Orlando
Orlando
Orlando
Los Angeles
Los Angeles
Los Angeles
New York
New York
J'aurais besoin d'en imprimer qu'un seul!
<select name="nDep" id="iDep" onchange="this.form.submit();">
<option selected disabled>Outras saídas disponíveis</option>
<?php
$args = array(
'post_type' => 'packs',
'order' => 'ASC'
);
$the_query = new WP_Query( $args );
if(have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post();
?>
<option value="<?php the_field('departures'); ?>"><?php the_field('departures'); ?></option>
<?php endwhile; endif; ?>
</select>
Je ne connais aucun moyen spécifique à WordPress d'exclure les posts de titre en double d'une requête et je suis sûr qu'il existe plusieurs moyens de résoudre ce problème. La solution qui s'impose est de stocker chaque titre de publication dans un tableau, puis de vérifier si ce titre existe déjà avant de publier la publication.
Un code rapide non testé:
<?php
$args = array(
'post_type' => 'packs',
'order' => 'ASC',
'orderby' => 'title'
);
$the_query = new WP_Query( $args );
// array to store cities
$unique_cities = array();
if( $the_query->have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post();
$city = get_the_field('departures');
// only create option if city hasn't been added yet
if( ! in_array( $city, $unique_cities ) ) :
// add city to array so it doesn't repeat
$unique_cities[] = $city;
?>
<option value="<?php echo $city; ?>"><?php echo $city; ?></option>
<?php
endif;
endwhile; endif; ?>
De plus, notez deux autres modifications mineures que je pense que vous aviez prévues:
orderby
à WP_Query afin que les villes soient répertoriées de A à Z.have_posts()
afin qu'il teste votre requête personnalisée