it-swarm.com.de

Untergeordnete Begriffe von übergeordneten Beiträgen ausschließen

Wie kann ich verhindern, dass untergeordnete Termposts in der Ausgabe der übergeordneten Termposts angezeigt werden? Im Moment dupliziert es sowohl die übergeordneten als auch die untergeordneten 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 '<ul>';
    foreach($parent_posts as $post){
        echo "<li>{$post->post_title}</li>"; 
    }
    $children_terms = get_terms($taxonomy, array(
        'parent' => get_term_by('slug', $parent_term, $taxonomy)->term_id
    )); 
    foreach($children_terms as $term){
        echo '<li>';
        display_posts_per_taxonomies($term->slug, $post_type, $taxonomy);
        echo '</li>';
    }
    echo '</ul>';   
}

Unten ist, was ich versuche, loszuwerden.

<ul>
<li>adsf</li>
<li>ergerg</li> <---get rid of this one (duplicate)
<li>asdfasdfsdf</li> <---get rid of this one (duplicate)
<li>rthhdhdfhdhdfhdfg</li>
<li>
<ul>
<li>ergerg</li>
<li>asdfasdfsdf</li>
</ul>
</li>
</ul>
4
JonnyPlow

Setzen Sie in Ihrem get_terms()-Aufruf die Option hierarchical auf false:

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

Diese Option ist normalerweise standardmäßig true, weshalb Sie wahrscheinlich die zusätzlichen Kopien erhalten.

1
Dougal Campbell

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 "Menü" -Taxonomie, aber Sie müssen entsprechend bearbeiten.

1
Banago

Erstens, wie Bainternet sagt, ist Ihre Funktion endlos.

Aber um Ihr ursprüngliches Problem zu lösen, gibt es einen undokumentierten Parameter für tax_query, um das Abrufen von Beiträgen in untergeordneten Begriffen zu verhindern. Es erfordert eine relativ aktuelle Version von WordPress (ich kenne nicht die genaue Version, in der es implementiert wurde, aber es funktioniert auf jeden Fall in der neuesten Version).

Versuchen Sie dies, 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 feststellen werden, wird durch die Einbeziehung von 'include_children' => 0 die Anzeige von untergeordneten Posts in hierarchischen Taxonomien verhindert.

1
cheesypeanut