Child-Begriffe von Eltern-Posts ausschließen

Wie kann ich ausschließen, dass die Einträge für die untergeordneten Terme im übergeordneten Term angezeigt werden? Im Moment dupliziert es sowohl in Eltern- als auch in Kind-Termausgaben.

//Function to display posts grouped by taxonomies function display_posts_per_taxonomies($parent_term, $post_type = 'beat_posts', $taxonomy = 'beats'){ $parent_posts = get_posts(array( 'tax_query' => array( array( 'taxonomy' => $taxonomy, 'field' => 'slug', 'terms' => $parent_term )), 'post_type' => $post_type )); echo '
    '; foreach($parent_posts as $post){ echo "
  • {$post->post_title}
  • "; } $children_terms = get_terms($taxonomy, array( 'parent' => get_term_by('slug', $parent_term, $taxonomy)->term_id )); foreach($children_terms as $term){ echo '
  • '; display_posts_per_taxonomies($term->slug, $post_type, $taxonomy); echo '
  • '; } echo '
'; }

Unten ist, was ich versuche loszuwerden.

 
  • adsf
  • ergerg
  • <---get rid of this one (duplicate)
  • asdfasdfsdf
  • <---get rid of this one (duplicate)
  • rthhdhdfhdhdfhdfg
    • ergerg
    • asdfasdfsdf

Solutions Collecting From Web of "Child-Begriffe von Eltern-Posts ausschließen"

get_terms() Sie in get_terms() Aufruf get_terms() , die hierarchical Option auf false :

 $children_terms = get_terms($taxonomy, array( 'parent' => get_term_by('slug', $parent_term, $taxonomy)->term_id, 'hierarchical' => false )); 

Diese Option ist normalerweise auf ” true , weshalb Sie wahrscheinlich zusätzliche Kopien erhalten.

Ich habe drei Tage mit diesem Problem gekämpft, aber am Ende habe ich mit einer benutzerdefinierten Abfrage gewonnen. Fügen Sie diesen Code in Ihre taxonomy.php Vorlage ein:

 < ?php global $wpdb; global $post; $term = get_term_by('slug', $wp_query->get( 'term' ), 'menu'); $querystr = " SELECT wposts.* FROM $wpdb->posts wposts LEFT JOIN $wpdb->term_relationships ON (wposts.ID = $wpdb->term_relationships.object_id) LEFT JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id) WHERE $wpdb->term_taxonomy.taxonomy = 'menu' AND $wpdb->term_taxonomy.term_id IN( $term->term_id ) LIMIT 20"; $pageposts = $wpdb->get_results($querystr, OBJECT); ?> < ?php if( $pageposts ) : ?> < ?php foreach ( $pageposts as $post ): ?> < ?php setup_postdata($post); ?> //Echo post title/content here. < ?php endforeach; endif; ?> 

Ich verwende die Taxonomie “Menü”, aber Sie müssen entsprechend bearbeiten.

Erstens, wie Bainternet sagt, ist deine function niemals endend.

Um das ursprüngliche Problem zu lösen, gibt es jedoch einen undokumentierten Parameter für tax_query, um zu verhindern, dass Beiträge in untergeordneten Begriffen abgerufen werden. Es benötigt eine ziemlich neue Version von WordPress (ich weiß nicht genau, in welcher Version es implementiert wurde, aber es funktioniert sicherlich in der neuesten Version).

Versuchen Sie das, es sollte den Trick machen:

 $parent_posts = get_posts(array( 'tax_query' => array( array( 'taxonomy' => $taxonomy, 'field' => 'slug', 'terms' => $parent_term, 'include_children' => 0 ) ), 'post_type' => $post_type )); 

Wie Sie bemerken werden, wird die Aufnahme von 'include_children' => 0 Beiträge in hierarchischen Taxonomien angezeigt werden.