Получите пользовательские термины таксономии с подсчетом дубликатов

У меня есть пользовательский запрос WordPress для пользовательского типа сообщений с пользовательской таксономией. Я пытаюсь вывести список связанных терминов (тегов). Для повторяющихся терминов я хотел бы показать количество повторяющихся терминов. К сожалению, я не могу понять, как считать элементы и сохранять информацию, прежде чем вызывать array_unique(). Любые предложения будут ценны. Вот мой запрос Wordpress:

//Begin Custom Query
    $args=array(
      'post_type' => 'gw_activity',
      'post_status' => 'publish',
      'orderby' => 'date',
      'meta_query' => array(
         'relation' => 'AND',
          array(
             'key' => 'activity_category',
             'value' => 'mindful_life',
             'compare' => '='
          )
       ), 
      'posts_per_page' => -1
    );
    $my_query = null; 
    $my_query = new WP_Query($args);

Вот как я строю свой массив терминов:

    if( $my_query->have_posts() ) { 
     $all_terms = array();
     $all_slugs = array();
      while ($my_query->have_posts()) : $my_query->the_post(); ?>      
      <?php $terms = wp_get_post_terms( $my_query->post->ID, array( 'gw_activity_tag' ) ); ?>
      <?php       
            foreach ( $terms as $term ) {
                $all_terms[] = $term->name; // Used for Display Purposes
                $all_slugs[] = $term->slug; // Used in the Final Permalink of the term
            }        
      ?>                                            
      <?php endwhile; }
      wp_reset_query();
      // End Custom Query

Вот как я создаю уникальный массив терминов и слагов:

     $unique_terms = array_unique( $all_terms ); // Eliminate Duplicate Terms
     $unique_slugs = array_unique( $all_slugs );    // Eliminate Duplicate Slugs

        $final_term_list = array(); //Build Array of Unique Terms
        $i = 0;
        foreach ($unique_terms as $value) { // Build a Unique Array of Terms
            $final_term_list[$i] = $value;
            $i++;
        }

        $final_slug_list = array(); //Build Array of Unique Slugs
        $s = 0;
        foreach ($unique_slugs as $slug_value) { // Build a Unique Array of Slugs
            $final_slug_list[$s] = $slug_value;
            $s++;
        }           

Вот как я вывожу данные

     $fl = 0; //Create a counter to index the array  
     foreach($final_slug_list as $final_slug) {                        
             echo '<a href="'. get_bloginfo('url') .'/activity-category/'. $final_slug_list[$fl] .'/">'.$final_term_list[$fl].'</a>';
             $fl++;
                } // End foreach

person TripsLeft    schedule 08.04.2014    source источник


Ответы (2)


Вот кое-что, что вы можете попробовать...

$count_terms = array_count_values($all_terms);
$count_slugs = array_count_values($all_slugs);
person Robert Lee    schedule 09.04.2014

Вы можете сделать это, немного короче.

$all_terms = array();
$all_slugs = array();
foreach ( $myMapPosts as $post ) : setup_postdata( $post );
    $terms = wp_get_post_terms( $post->ID, array( 'listing_category' ) );    
    foreach ( $terms as $term ) {        
        $all_terms[$term->slug] = array('name' => $term->name, 'slug' => $term->slug, 'count'=>0); // Used for Display Purposes
        $all_slugs[] = $term->slug;
    } 
endforeach;

$terms = array_count_values($all_slugs);
foreach ($terms as $key => $value) {
    $all_terms[$key]['count'] = $value;
}

var_dump($all_terms);

таким образом, вам не нужно беспокоиться об удалении дубликатов

Результаты

array(3) {
  ["restaurants-cafes"]=>
  array(3) {
    ["name"]=>
    string(23) "Restaurants & Cafes"
    ["slug"]=>
    string(17) "restaurants-cafes"
    ["count"]=>
    int(20)
  }
  ["food-stores-markets"]=>
  array(3) {
    ["name"]=>
    string(25) "Food Stores & Markets"
    ["slug"]=>
    string(19) "food-stores-markets"
    ["count"]=>
    int(8)
  }
  ["other"]=>
  array(3) {
    ["name"]=>
    string(5) "Other"
    ["slug"]=>
    string(5) "other"
    ["count"]=>
    int(2)
  }
}

Надеюсь, это поможет!

person Kangulo    schedule 15.12.2017