Gruppieren Sie Beiträge, die einem Begriff in einer Schleife entsprechen

Ich arbeite an einer Website, die viele Produkte zeigt, und das ist meine Struktur:

  • Produkt (benutzerdefinierter Beitragstyp)
  • -> Marke (benutzerdefinierte Taxonomie)
  • ——> Marke A (benutzerdefinierter Begriff)
  • ——> Marke B (benutzerdefinierte Bezeichnung)
  • -> Abteilung (benutzerdefinierte Taxonomie).
  • ——> Abteilung A (benutzerdefinierter Begriff)
  • ——> Abteilung B (benutzerdefinierte Bezeichnung)

Ich muss zeigen, welche Marken in jeder Abteilung sind, und die einzige Möglichkeit, sie zu verknüpfen, ist die Verwendung meiner Produkte (da jede benutzerdefinierte Taxonomie unabhängig voneinander ist). Ich bin in der Lage, dies zu tun, indem ich alle Produkte einer bestimmten Abteilung befragt und die Marke jedes Produkts (anstelle des Namens) zurückerhalte. Dies ist der Code, den ich verwende, um diese Aufgabe auszuführen:

 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); } ?>
  • Da einige meiner Produkte jedoch dieselbe Marke haben, muss ich sie gruppieren, wenn dies geschieht. Also meine Ausgabe sollte etwas wie: ABTEILUNG A: Marke A hat 3 Produkte, Marke B hat 1 Produkt, Marke C hat 2 Produkte, etc.

    Hast du eine Idee, wie ich das erreichen kann? Vielen Dank.

    BEARBEITEN

    Capiadge Antwort lassen Sie mich wissen, wie viele Produkte sind in einer Marke, aber ich kann nicht auf diese Produkte zugreifen. Ich habe ein Dropdown-Menü erstellt, das alle meine Bedürfnisse mit Brands deckt (es prüft, ob meine Marke ein oder mehrere Produkte hat, wenn es eins ist, setzt es ein href-Attribut, das ich über ajax und jquery erhalte, damit der Benutzer die Produktseite aufrufen kann Wenn es mehr ist, legt es einen Wert fest, den ich bekomme, wenn der Benutzer klickt, kann er sehen, welche Produkte in dieser Marke sind. Das einzige, was ich brauche und das ich nicht erreichen kann, ist dasselbe zu tun, aber nicht alle Marken, sondern die Marken, die Produkte in nur einer bestimmten Abteilung haben. (zB: ein Dropdown wie folgt, aber nur für Abteilung 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 "Gruppieren Sie Beiträge, die einem Begriff in einer Schleife entsprechen"

    Dies ist meine beste array_count_values : Speichern Sie die Werte in einem Array während der while-Schleife und verwenden Sie dann die php-function array_count_values , um die gewünschte Ausgabe zu erhalten.

    Es ist nicht getestet, aber ich denke, es sollte funktionieren:

     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.
    '; }

    Ich hoffe es hilft!