web-dev-qa-db-ja.com

ループから重複した値を削除

<option>グループに対して<select>フィールドを出力するループがあります。それは私が出版している多くの旅行パックのための多くの都市の名前を含んでいます。トリックは、私は繰り返しの値を避ける必要があるということです。

たとえば、シカゴから5つ、オーランドから5つ、ロサンゼルスから3つ、ニューヨークから2つの旅行パックがあります。

だから、それは出力:
あなたの街を選択してください
シカゴ
シカゴ
シカゴ
シカゴ
オーランド
オーランド
オーランド
オーランド
オーランド
ロサンゼルス
ロサンゼルス
ロサンゼルス
ニューヨーク
ニューヨーク

私はそれらのうちの1つだけを印刷する必要があるでしょう!

<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

私は、重複するタイトルの投稿をクエリから除外するWordPress固有の方法を知りませんし、これに対処する方法が複数あると確信しています。頭に浮かぶ解決策は、各投稿のタイトルを配列に格納し、投稿を出力する前にそのタイトルがすでに存在するかどうかを確認することです。

テストされていない簡単なコード

<?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; ?>

また、私があなたが意図したと思う2つの他の小さな変更に注意してください。

  • 都市がAからZまでリストされるように、WP_Queryにorderbyパラメーターを追加しました。
  • 最初のhave_posts()を修正しましたのでカスタムクエリをテストしています
3
mrwweb