Удалить дубликаты в цикле foreach из пользовательской таксономии - PullRequest
0 голосов
/ 20 декабря 2018

Он показывает этот результат в цикле foreach и должен удалить все дубликаты

spain
philippines
spain

Я пытался использовать array_unique (), но он не работает для меня

Это код I 'Я использую и работаю нормально, просто он имеет дубликаты

<?php 
if (is_tax() || is_category() || is_tag() ){
    $qobj = get_queried_object();

    $args = array(
      'posts_per_page' => -1,
      'tax_query' => array(
        array(
          'taxonomy' => $qobj->taxonomy,
          'field' => 'slug', 
          'terms' => $qobj->slug
        )
      )
    );

    $random_query = new WP_Query( $args );

    if ($random_query->have_posts()) {
        while ($random_query->have_posts()) {
          $random_query->the_post();
            $term_list = wp_get_post_terms($post->ID, 'country', array("all"));
            foreach($term_list as $term_single) {
                echo '<a href="'.dirname(get_the_permalink()).'">';
                echo $term_single->slug;
                echo '</a><br>';
            }
        }
    }
    wp_reset_query();
} 
?>

, добавил это для отладки - var_dump ($ term_list);и это результат

array (size=1)
  0 => 
    object(WP_Term)[1464]
      public 'term_id' => int 2
      public 'name' => string 'Spain' (length=5)
      public 'slug' => string 'spain' (length=5)
      public 'term_group' => int 0
      public 'term_taxonomy_id' => int 2
      public 'taxonomy' => string 'country' (length=7)
      public 'description' => string '' (length=0)
      public 'parent' => int 0
      public 'count' => int 2
      public 'filter' => string 'raw' (length=3)

array (size=1)
  0 => 
    object(WP_Term)[1473]
      public 'term_id' => int 5
      public 'name' => string 'Philippines' (length=11)
      public 'slug' => string 'philippines' (length=11)
      public 'term_group' => int 0
      public 'term_taxonomy_id' => int 5
      public 'taxonomy' => string 'country' (length=7)
      public 'description' => string '' (length=0)
      public 'parent' => int 0
      public 'count' => int 2
      public 'filter' => string 'raw' (length=3)

array (size=1)
  0 => 
    object(WP_Term)[1475]
      public 'term_id' => int 2
      public 'name' => string 'Spain' (length=5)
      public 'slug' => string 'spain' (length=5)
      public 'term_group' => int 0
      public 'term_taxonomy_id' => int 2
      public 'taxonomy' => string 'country' (length=7)
      public 'description' => string '' (length=0)
      public 'parent' => int 0
      public 'count' => int 2
      public 'filter' => string 'raw' (length=3)    

Все, что мне нужно, это удалить дубликаты, и я настроен, я не очень знаком с этим и его очень сложно, я пытаюсь выяснить это со вчерашнего дня,Кто-нибудь, пожалуйста, помогите мне заставить его работать или просто в правильном направлении, спасибо

1 Ответ

0 голосов
/ 20 декабря 2018

Если вы сохраняете список уже отображенных, то перед отображением нового проверьте, есть ли он в этом списке (используя in_array()).После отображения добавьте его в уже отображаемый список, чтобы он больше не появлялся ...

$term_list = wp_get_post_terms($post->ID, 'country', array("all"));
foreach($term_list as $term_single) {
    if ( !in_array( $term_single->slug, $alreadyDisplayed) ) {
        echo '<a href="'.dirname(get_the_permalink()).'">';
        echo $term_single->slug;
        echo '</a><br>';
        $alreadyDisplayed[] =  $term_single->slug;
    }
}

Вам необходимо иметь ...

$alreadyDisplayed = [];

перед строкой

while ($random_query->have_posts()) {
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...