it-swarm.com.de

posts mit demselben Taxonomiebegriff anzeigen

Ich versuche, 5 verwandte Beiträge in der Schleife anzuzeigen, wobei diese verwandten Beiträge Beiträge sind, die denselben Taxonomiewert haben. z.B. Ich habe eine benutzerdefinierte Taxonomie namens "venues" eingerichtet, daher ist jedem Post ein venue-Taxonomiewert zugewiesen. Daher möchte ich in jedem Post 5 andere Posts anzeigen, die denselben Taxonomiewert haben (d. H. Sich am selben Ort befinden).
Der Code, den ich bisher habe, funktioniert nicht ganz richtig:

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<?php
$custom_terms = get_terms('venues');

foreach($custom_terms as $custom_term) {
    wp_reset_query();
    $args = array('post_type' => 'listings',
    'posts_per_page' => 5,
        'tax_query' => array(
            array(
                'taxonomy' => 'venues',
                'field' => 'slug',
                'terms' => $custom_term->slug,
            ),
        ),
     );

     $loop = new WP_Query($args);
     if($loop->have_posts()) {

        while($loop->have_posts()) : $loop->the_post(); ?>
        <div class="listing-title"><?php the_title(); ?></div>     
        <?php endwhile;
     }
}
?>
<?php wp_reset_query(); ?>
<?php endwhile; endif; ?>

Es werden erfolgreich 5 Posts angezeigt, es handelt sich jedoch nur um fünf Posts desselben Post-Typs und nicht um fünf Posts, die denselben Taxonomiewert in der Schleife haben. Anregungen wäre sehr dankbar!

3
user1374796

Völlig ungetestet und ich bin mir nicht 100% sicher, ob ich Ihre Frage verstehe, aber dies sollte (theoretisch) 5 Posts beinhalten, die sich die gleichen Orte wie der aktuelle Post teilen. Ich würde wahrscheinlich vorschlagen, einige Transienten hinzuzufügen, damit Sie nicht ständig Abfragen ausführen.

Wenn es nicht funktioniert, habe ich den Verdacht, dass die Syntax meiner Steuerabfrage ein wenig abweicht. Ich bekomme es immer, weil es ein Array von Arrays ist.

//get the post's venues
$custom_terms = get_terms('venues');

if( $custom_terms ){

    // going to hold our tax_query params
    $tax_query = array();

    // add the relation parameter (not sure if it causes trouble if only 1 term so what the heck)
    if( count( $custom_terms > 1 ) )
        $tax_query['relation'] = 'OR' ;

    // loop through venus and build a tax query
    foreach( $custom_terms as $custom_term ) {

        $tax_query[] = array(
            'taxonomy' => 'venues',
            'field' => 'slug',
            'terms' => $custom_term->slug,
        );

    }

    // put all the WP_Query args together
    $args = array( 'post_type' => 'listings',
                    'posts_per_page' => 5,
                    'tax_query' = $tax_query );

    // finally run the query
    $loop = new WP_Query($args);

    if( $loop->have_posts() ) {

        while( $loop->have_posts() ) : $loop->the_post(); ?>

        <div class="listing-title"><?php the_title(); ?></div>     
        <?php 

        endwhile;

    }

    wp_reset_query();?>

}
2
helgatheviking

Vielen Dank für die gute Lösung, aber damit erhalten Sie Beiträge mit einem beliebigen Begriff in derselben Taxonomie. Wenn Sie jedoch nur diejenigen verwenden möchten, deren Begriffe mit dem aktuellen Beitrag identisch sind, müssen Sie den Code wie folgt ändern. Dieser ist getestet und sollte funktionieren.

 <?php
        //get the post's venues
    $custom_terms = wp_get_post_terms($post->ID, 'venues');

    if( $custom_terms ){

        // going to hold our tax_query params
        $tax_query = array();

        // add the relation parameter (not sure if it causes trouble if only 1 term so what the heck)
        if( count( $custom_terms > 1 ) )
            $tax_query['relation'] = 'OR' ;

        // loop through venus and build a tax query
        foreach( $custom_terms as $custom_term ) {

            $tax_query[] = array(
                'taxonomy' => 'venues',
                'field' => 'slug',
                'terms' => $custom_term->slug,
            );

        }

        // put all the WP_Query args together
        $args = array( 'post_type' => 'listings',
                        'posts_per_page' => 5,
                        'tax_query' => $tax_query );

        // finally run the query
        $loop = new WP_Query($args);

        if( $loop->have_posts() ) {

            while( $loop->have_posts() ) : $loop->the_post(); ?>

            <div class="listing-title"><?php the_title(); ?></div>     
            <?php 

            endwhile;

        }

        wp_reset_query();

    }?>
0
Juha