hunterbrelsford
  • 0
Новичок

Удаление повторяющихся терминов пользовательской таксономии из раскрывающегося списка?

  • 0

У меня есть пользовательский тип записи, который включает пользовательскую таксономию, называемую client_name . Существует страница, которая загружает эти пользовательские типы сообщений и отображает их. Что мне нужно разработать, так это выпадающий список, отображающий всю пользовательскую таксономию этих пользовательских сообщений, что я и сделал, но мне нужно удалить дубликаты и расположить их в алфавитном порядке, и здесь у меня возникают проблемы.

Это то, что я пытаюсь удалить дубликаты (это не работает):

<?php
<form method="post" id="clientform" action="" onsubmit="return getURL(this.url.value)">
  <select name="url" id="client">
    <option selected="selected">By Client</option>
    <?php
      $args=array(    
        'post_type' => 'our_work',
        'post_status' => 'publish',
        'order' => 'ASC',
        'posts_per_page' => -1
      );
      $my_query = new WP_Query($args);
      $k=0;
      if( $my_query->have_posts() ) { 
        while ($my_query->have_posts()) : $my_query->the_post();
          $termArray[$k] = array (trim(get_the_term_list( $post->ID, 'client_name')));
          // $text = trim(get_the_term_list( $post->ID, 'client_name'));
          for ($i = 0; $i <= $termArray.count; $i++ ) {    
            for ($j = 0; $j <= $tempArray.count; $j++) {
              if ($tempArray[$i] == $tempArray[$j]) {        
                unset($tempArray[$k]); 
                $termArray = array_values($termArray);
              }
            } // end of for 
            $k++; 
        ?><option value="<?php bloginfo('url'); echo "/client_name/"; echo $termArray[$k]; ?>"><?php echo $termArray[$k]; ?></option><?php 
        } ?>    
        <?php 
        endwhile; 
      } 
      wp_reset_query(); 
    ?>
  </select>
  <input type="submit" id="clientsubmit" value="Search" />
</form>

Хорошо, на днях я наткнулся на эту PHP-функцию, и она делает то, что мне нужно, просто я не знаю, как ее правильно использовать.

array_unique($input);

Помогите мне, ребята…. Обратите внимание, что приведенный выше код — это только одна ветвь кода, которую я пробовал, а не весь файл.


ОБНОВИТЬ

Эй, это мне очень помогает, и я нашел это полезным, это делает меня примерно на 95% готовым, но еще не на 100%. Я попробовал ваш код, и я попробовал этот, который я использую, и он удаляет дубликаты, но все, что идет после него, не будет отображаться, хм….

Вот код WP:

<?php
if( $my_query->have_posts() ) { 
  while ($my_query->have_posts()) : $my_query->the_post();
    $termArray[$i] = trim(get_the_term_list( $post->ID, 'client_name'));
    $termArray = array_unique($termArray);
    $termArray = array_values($termArray);
    print_r($termArray);  
    print_r(sizeof($termArray));
    if ($termArray[$i] != '') { 
      ?><option value="<?php bloginfo('url'); echo "/client_name/"; echo $termArray[$i]; ?>"><?php echo $termArray[$i]; ?></option><?php 
    }// end of if $i++; 
  endwhile; 
} 
wp_reset_query();

А вот вывод из массива, он дублирует вывод массива, потому что он вызывается каждый раз, когда в цикле вызывается новый пост. Страница доступна здесь:

http://magicvideo.com/cms/work/

Просмотрите источник, чтобы понять, что я имею в виду.

Share
  1. Привет , @Hunter Brelsford:

    Рад видеть вас здесь из группы WordPress на LinkedIn.

    Может быть, я неправильно понимаю ваш вопрос, но похоже, что вы просто пытаетесь избавиться от дубликатов в массиве? Например, допустим, у вас есть массив клиентов:

    <?php
    $clients = array(
      'Jones Construction',
      'Smith Wholesale',
      'Smith Wholesale',
      'Williams Dry Cleaning'
    );
    

    И вы хотите преобразовать в такой массив?

    <?php
    $clients = array(
      'Jones Construction',
      'Smith Wholesale',
      'Williams Dry Cleaning'
    );
    

    ( Если да, то это вопрос PHP, а не вопрос WordPress, обычно мы что- то отправляем, но я все равно отвечу здесь. )

    Это легко; поскольку ключи массива уникальны в PHP, просто переверните массив (замените значения их ключами), затем верните ключи массива, и вы получите свой уникальный массив, например:

    <?php
    $clients = array(
      'Jones Construction',
      'Smith Wholesale',
      'Smith Wholesale',
      'Williams Dry Cleaning'
    );
    print_r(array_keys(array_flip($clients)));
    

    Этот код печатает:

    Array
    (
        [0] => Jones Construction
        [1] => Smith Wholesale
        [2] => Williams Dry Cleaning
    )
    

    Это то, чего вы добивались?

    ОБНОВИТЬ:

    Привет , @Hunter Brelsford :

    Я отвечаю на ваше обновление. Хорошо, почему бы нам не попытаться решить это по-другому? Вот отдельный пример, который вы можете скопировать в корень вашего веб-сайта, а test.php затем запустить его, http://magicvideo.com/test.php чтобы увидеть, как он работает:

    <?php
    include "wp-load.php";
    header('Content-Type:text/plain');
    global $wpdb;
    $sql = <<<SQL
    SELECT DISTINCT
      tt.term_id
    FROM {$wpdb->posts} p
      INNER JOIN {$wpdb->term_relationships} tr ON p.ID = tr.object_id
      INNER JOIN {$wpdb->term_taxonomy} tt ON tt.term_taxonomy_id = tr.term_taxonomy_id
    WHERE 1=1
      AND p.post_status='publish'
      AND p.post_type='our_work'
      AND tt.taxonomy='client_name'
    SQL;
    $terms = $wpdb->get_results($sql);
    $term_ids = array();
    foreach($terms as $term) {
      $term_ids[] = $term->term_id;
    }
    $terms = get_terms('client_name',array(
      'include'=> implode(',',$term_ids),
    ));
    print_r($terms);
    

    Мы используем необработанный SQL для запроса терминов в taxonomy='client_name' for, 'post_type='our_work' а затем собираем $term->term_id s для фильтрации списка терминов таксономии. Я использовал необработанный SQL, потому что WordPress не предоставляет хорошего способа получить эти данные через API, по крайней мере, не то, что я мог бы найти в короткие сроки ( если кто-то еще знает лучший способ через API, который не требует загрузки намного больше данных, чем необходимо, пожалуйста, дайте мне знать ).

    Надеюсь, это предложит подход, чтобы вы могли использовать этот код в своем примере? Дайте мне знать, если знаете, если нет.

    • 0

Оставить ответ

You must login to add an answer.