Posts de grupo que correspondem a um termo em um loop

Estou trabalhando em um site que mostra muitos produtos e esta é a minha estrutura:

  • Produto (tipo de postagem personalizado)
  • -> Marca (taxonomia personalizada)
  • ——> Marca A (termo personalizado)
  • ——> Marca B (termo personalizado)
  • -> Departamento (taxonomia personalizada).
  • ——> Departamento A (termo personalizado)
  • ——> Departamento B (termo personalizado)

Eu preciso mostrar quais marcas estão em cada departamento, e a única maneira de vinculá-los é usar meus produtos (porque cada taxonomia personalizada é independente um do outro). Posso fazê-lo consultando todos os produtos de um departamento específico e retriving a marca de cada produto (em vez de seu nome). Este é o código que uso para realizar esta tarefa:

 array( array( 'taxonomy' => 'department', 'field' => 'slug', 'terms' => array( 'department-a' ) ), ), 'orderby' => 'title', 'order' => 'ASC', 'post_type' => 'prod' ); $query = new WP_Query( $args ); if ( $query->have_posts() ) { $term = $query->queried_object; while ( $query->have_posts() ) : $query->the_post(); ?> 
  • ID , 'brand' ); foreach( $terms as $term ) { print $term->name . '
    '; unset($term); } ?>
  • No entanto, como alguns dos meus produtos têm a mesma marca, eu preciso agrupá-los se isso acontecer. Então, minha saída deveria ser algo como: DEPARTAMENTO A: A Marca A tem 3 produtos, a Marca B possui 1 produto, a Marca C possui 2 produtos, etc.

    Você tem alguma idéia de como posso conseguir isso? Obrigado.

    EDITAR

    Capiadge responde, deixe-me saber quantos produtos estão em uma marca, mas não consigo acessar esses produtos. Eu fiz um menu suspenso que corresponde a todas as minhas necessidades com as marcas (verifica se a minha marca tem um ou mais produtos, se for um, ele define um atributo href que recebo via ajax e jquery para que o usuário possa seguir a página do produto , se é mais, ele define um valor que eu recebo, então, se o usuário clica, pode ver quais produtos estão nessa marca). A única coisa que eu preciso e não posso conseguir é fazer o mesmo, mas não obter todas as marcas, mas as marcas que possuem produtos em apenas um departamento específico. (ou seja: um menu suspenso como este, mas apenas para o Departamento a).

         'ASC', 'hide_empty' => true, 'cache_domain' => 'core' ); $terms = get_terms('brand', $args); foreach ($terms as $item) { if ($item->count == 1) { $tax_query = ''; $tax_query[] = array('taxonomy' => 'brand','field' => 'term_id','terms' => $item->term_id); $term_post = get_posts(array('post_type' => 'prod','tax_query' => $tax_query)); if (!empty($term_post)) { $term_post_link = get_permalink($term_post[0]->ID); $id_prod = url_to_postid($term_post_link); $nombre_prod = get_the_title($term_post[0]->ID); echo ''.$item->name.''; } } else { echo 'term_id.'" label="'.$item->name.'">'.$item->name.''; } } ?>  

    Solutions Collecting From Web of "Posts de grupo que correspondem a um termo em um loop"

    Esta é a minha melhor abordagem: array_count_values os valores em uma matriz durante o ciclo de vida e, em seguida, use a function php de array_count_values , você obtém a saída desejada.

    Não é testado, mas acho que deveria funcionar:

     if ( $query->have_posts() ) { //in this variable, declared as an array, we will store the values $products_array = array(); while ( $query->have_posts() ) : $query->the_post(); $terms = get_the_terms( $post->ID , 'brand' ); if ( $terms && ! is_wp_error( $terms ) ) { $brand_name = $terms[0]->name; } $products_array[] = $brand_name; endwhile; wp_reset_query(); } //At this point, the $products_array, should be more or less: //array(brandA, brandB, brandC, brandB, brandB, brandB, brandA); //array_count_values does the magic $result = array_count_values($products_array); foreach ($result as $key => $value) { echo $key . ' has ' . $value . ' products.
    '; }

    Espero que ajude!