Kategorie und Anzahl der Kinder

Ich habe eine Situation, in der ich keine korrekte Anzahl von Posts bekommen kann … und ich habe alles versucht außer wp_list_categories mit Walker anzupassen.

Also ich habe Kategoriehierarchie:

cat1 cat2 (total 8) cat3 (total 5) cat4 (total 3) 

Alle Beiträge stehen unter cat2 und cat3-cat4. Ich zeige cat1 an und möchte die Anzahl der Posts anzeigen.

Wenn ich folgende function verwende:

 function wp_get_postcount($id) { //return count of post in category child of ID 15 $count = 0; $taxonomy = 'category'; $args = array('child_of' => $id); $tax_terms = get_terms($taxonomy,$args); foreach ($tax_terms as $tax_term) { $count +=$tax_term->count; } return $count; } 

Ich erhalte insgesamt 16 Punkte. Das ist das Doppelte der tatsächlichen Menge, offensichtlich doppelt gezählt.

Vorher habe ich versucht:

 $children_cats = get_categories(array( 'hide_empty' => 0, 'taxonomy' => 'category', )); 

Und verwendet foreach auf Array und Echo-Out-Count. Aber es würde 0 zurückgeben, offensichtlich, weil die Elternkatze keine Beiträge darunter ausgewählt hat …

wp_list_categories zeigt tatsächlich den korrekten Wert an. Aber ich konnte es nicht mit Walk erweitern, also würde ich mein kompliziertes HTML bekommen:

 
  • <a class="subcatimg" href="https://wordpress.stackexchange.com/questions/90344/category-and-children-post-count/">cat_ID );?>

    <a href="https://wordpress.stackexchange.com/questions/90344/category-and-children-post-count/">name; ?>

    cat_ID); ?>

  • Ich habe wirklich keine Optionen mehr. Irgendein Rat?

    Solutions Collecting From Web of "Kategorie und Anzahl der Kinder"

    Als ich den Code von Daniel Llewellyn und die WP_Query-Referenz von WordPress prüfte, erkannte ich, dass wir innerhalb des Parameters tax_query ein Array-Array übergeben mussten. Ansonsten würde es nur alle Post-Zählungen zurückgeben.

    Hier ist der kleine modifizierte Code:

     if ( ! function_exists( 'ipt_kb_total_cat_post_count' ) ) : /** * Simple function to get category post count including all subcategories * * @link http://wordpress.stackexchange.com/a/91551 Stackexchange * @param int $cat_id Category ID * @return int Total post count */ function ipt_kb_total_cat_post_count( $cat_id ) { $q = new WP_Query( array( 'nopaging' => true, 'tax_query' => array( array( 'taxonomy' => 'category', 'field' => 'id', 'terms' => $cat_id, 'include_children' => true, ), ), 'fields' => 'ids', ) ); return $q->post_count; } endif; 

    Hoffe es hilft jemandem wie mir.

    Ich erhalte insgesamt 16 Punkte. Das ist das Doppelte der tatsächlichen Menge, offensichtlich doppelt gezählt.

    Die Eigenschaft count gibt die Anzahl der Posts in dieser bestimmten Kategorie zurück. Sie erhalten 16, weil diesen Beiträgen sowohl cat3 oder cat4 als auch die übergeordnete Kategorie ( cat2 ) zugewiesen sind und Sie die cat2 der Zählungen addieren.

    Angenommen, Sie verwenden diese function wie wp_get_postcount($id_of_cat2) , geben Sie einfach die Eigenschaft count zurück:

     $term = get_term((int)$id, $taxonomy); if(!($term instanceof WP_Error)) return (int)$term->count; // or show the error... return 0; 

    (Dies ist das gleiche wie $child->count in Ihrem Code unten zählen)

    Wenn Sie jedoch versuchen, die Post-Anzahl aller cat1 Kategorien von cat1 , wie wp_get_postcount($id_of_cat1) B. wp_get_postcount($id_of_cat1) , denen gemäß dieser Kategoriehierarchie keine Posts zugewiesen sind, addieren Sie die Counts der zweiten Ebene . Deine function scheint genau das zu tun.

    Versuchen:

     function wp_get_postcount($id) { //return count of post in category child of ID 15 $q = new WP_Query(array( 'nopaging' => true, 'tax_query' => array( 'taxonomy' => 'category', 'field' => 'id', 'terms' => $id, 'include_children' => true, ))); return $q->post_count; } 

    Vorbehalt: Ich habe das nicht getestet.

    Dies ist nicht die perfekte Lösung, kann aber je nach Bedarf als schnelle Lösung dienen.

    Leider, wie WordPress diese Mathematik macht, glaube ich nicht, dass “child_of” so ist, wie du es willst. Sie könnten jedoch einfach cat1 als Kategorie für die fraglichen Posts auswählen.

    Bearbeiten Sie zuerst Beiträge in den Kategorien 3 und 4 und ändern Sie sie wie folgt:

     cat1 [] cat2 [x] cat3 [x] cat4 [] 

    zu diesem:

     cat1 [x] cat2 [x] cat3 [x] cat4 [] 

    Dann fixiere deinen Code so, dass er nur die Anzahl der Beiträge in cat1 und nicht alle seiner untergeordneten Elemente zählt.

    Ich hatte ein ähnliches Problem und triggerse es auf diese Weise. Es wird nicht in jeder Situation empfohlen, da es bricht, wenn der Benutzer die Kategorien nicht richtig auswählt. Wird jedoch ordnungsgemäß verwendet, und Ihr Problem wird behoben.

    Zusätzlich – wenn alle Posts standardmäßig untergeordnete Elemente von cat1 sind, können Sie die Standardkategorie für alle neuen Posts in ‘cat1’ ändern, um dem Benutzer in dieser Instanz zu helfen.

     Settings > Writing. 

    Mein Verständnis ist, dass alle Beiträge der Kategorie der dritten Ebene (dh cat3 & und cat4) und ihrem unmittelbaren Elternteil (dh cat2) zugeordnet sind. Die Posts sind jedoch nicht der Kategorie der ersten Ebene (dh cat1) zugeordnet.

    Jetzt möchten Sie Beiträge basierend auf der Top- / First-Level-Kategorie zählen. Wenn mein Verständnis stimmt, können Sie mir bitte sagen, was mit der Verwendung des folgenden Codes falsch ist?

     function wp_get_postcount($id) { //return count of post in category child of ID 15 $count = 0; $taxonomy = 'category'; $args = array('child_of' => $id); $tax_terms = get_terms($taxonomy,$args); foreach ($tax_terms as $tax_term) { if ($tax_term->parent == $id) { $count +=$tax_term->count; } } return $count; } 

    Für diejenigen, die ihre Taxonomien über get_terms() , können Sie das Argument 'pad_counts' => true , um die Anzahl der 'pad_counts' => true in die 'pad_counts' => true .

    Beispielsweise :

     $my_taxonomy_terms = get_terms( ['my_taxonomy'], ['orderby' => 'count', 'hide_empty' => false, 'order' => 'DESC', 'pad_counts' => true] ); /* Assuming you have at least one term, this will show you the number of objects that use your most popular term. */ echo $my_taxonomy_terms[0]->count; 

    Quelle: hier

    Funtion, um Post zu erhalten von gegebenem Begriff oder Begriffen und seinen / ihren Kindern

    Zählen Sie Beiträge in der Kategorie mit untergeordneten Kategorien