web-dev-qa-db-fra.com

Supprimer les valeurs dupliquées d'une boucle

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>
1
user3301994

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:

  • ajouté le paramètre orderby à WP_Query afin que les villes soient répertoriées de A à Z.
  • corrigé en premier have_posts() afin qu'il teste votre requête personnalisée
3
mrwweb