Taxonomie-Menü mit Post-Count und mehreren Eltern

Ich verwende WordPress 3.1.3 und versuche, ein “Produkt” -Menü mit Post-Count in jeder Kategorie zu machen. So was:

  • Neue Autos (4)
    • BMW (2)
    • Ford (1)
    • Nissan (1)
  • Gebrauchtwagen (10)
    • BMW (3)
    • Ford (1)
    • Nissan (6)

Dafür habe ich benutzerdefinierte Post-Typ Cars und Taxonomien Type und Brand . Nicht sicher, ob es der beste Weg ist, dies zu tun, aber hier ist mein Code:

  
  • <a href="https://wordpress.stackexchange.com/questions/18495/taxonomy-menu-with-post-count-and-multiple-parents/slug, 'type' ); ?>"> name; ?> (count; ?>) 0) : ?>
    • <a href="https://wordpress.stackexchange.com/?type=slug ?>&brand=slug ?>"> - - name; ?> (count; ?>)

Also meine Fragen sind:

  • Ist das ein guter Weg dies zu tun?
  • Wie filtere ich Post-Zählungen?

Bearbeiten – Ich habe es geschafft, mein zweites Problem zu lösen, aber ich bin mir immer noch nicht sicher, ob es ein guter Weg ist, es zu tun. Hier ist neuer Code:

  
  • <a href="https://wordpress.stackexchange.com/questions/18495/taxonomy-menu-with-post-count-and-multiple-parents/slug, 'type' ); ?>"> name; ?>
      'AND', array( 'taxonomy' => 'type', 'terms' => array($auto_type->slug), 'field' => 'slug', ), array( 'taxonomy' => 'brand', 'terms' => array($auto_brand->slug), 'field' => 'slug', ), ); $tax_query = new WP_Query($brand_filter); $count = 0; if ( $tax_query->have_posts() ) : while ( $tax_query->have_posts() ) : $tax_query->the_post(); $count++; endwhile; endif; wp_reset_postdata(); if ( $count > 0 ) : ?>
    • <a href="https://wordpress.stackexchange.com/?type=slug ?>&brand=slug ?>"> - - name; ?> ()

Edit 2 – Changed query_posts() -Methode zu wp_query() (dank VicePrez), aber ist es effizient, Abfrage zu verwenden, um nur korrekte Post-Anzahl zu erhalten, oder gibt es eine bessere Möglichkeit, dieses Menü zu erstellen?

Solutions Collecting From Web of "Taxonomie-Menü mit Post-Count und mehreren Eltern"

Ich habe Ihren Code ein wenig angepasst, um die class wp_query() anstelle von query posts() , die nur für das Ändern der Hauptschleife gedacht ist . Sie sollten immer wp_query() wenn Sie versuchen, sekundäre Schleifen zu erstellen.

Da wir wp_query() , müssen wir auch wp_reset_postdata() anstelle von wp_reset_query . Ich bin nicht sicher, ob das Ihr Problem beheben wird, aber passen Sie Ihren Code daran an, und wir werden Schritt für Schritt den Rest Ihrer Probleme angehen.

 < ?php $auto_types = get_terms('type', 'hide_empty=1'); ?> 
    < ?php foreach( $auto_types as $auto_type ) : ?>
  • < ?php echo $auto_type->name; ?> < ?php $auto_brands = get_terms('brand', 'parent=0' ); ?>
      < ?php foreach ($auto_brands as $auto_brand) : ?> < ?php $brand_filter['tax_query'] = array( 'relation' => 'AND', array( 'taxonomy' => 'type', 'terms' => array($auto_type->slug), 'field' => 'slug', ), array( 'taxonomy' => 'brand', 'terms' => array($auto_brand->slug), 'field' => 'slug', ), ); $tax_query = new WP_Query($brand_filter); if ( $tax_query->have_posts() ) : $count = 1; while ( $tax_query->have_posts() ) : $tax_query->the_post(); if ( $count >= 1 ) { ?>
    • - - < ?php echo $auto_brand->name; ?> (< ?php echo $count; ?>)
    • < ? } $count++; endwhile; wp_reset_postdata(); endif; endforeach ?>
  • < ?php endforeach ?>

UPDATE: Ich habe den Parameter posts_per_page hinzugefügt und auf -1 , um alle Posts posts_per_page . Ich habe es auf meiner Seite getestet. Es sollte Ihnen die Ergebnisse geben, nach denen Sie gesucht haben.

 < ?php $auto_types = get_terms('type', 'hide_empty=1'); ?> 
    < ?php foreach( $auto_types as $auto_type ) : ?>
  • < ?php echo $auto_type->name; ?> < ?php $auto_brands = get_terms('brand', 'parent=0' ); ?>
      < ?php foreach ($auto_brands as $auto_brand) : ?> < ?php $brand_filter = array( 'posts_per_page' => '-1', 'tax_query' => array( 'relation' => 'AND', array( 'taxonomy' => 'type', 'field' => 'slug', 'terms' => array($auto_type->slug), ), array( 'taxonomy' => 'brand', 'field' => 'slug', 'terms' => array($auto_brand->slug), ) ) ); $tax_query = new WP_Query($brand_filter); $count = 0; if ( $tax_query->have_posts() ) : while ( $tax_query->have_posts() ) : $tax_query->the_post(); $count++; endwhile; endif; wp_reset_postdata(); if ( $count > 0 ) : ?>
    • - - < ?php echo $auto_brand->name; ?> (< ?php echo $count; ?>)
    • < ?php endif; endforeach ?>
  • < ?php endforeach ?>