it-swarm.com.de

WP Fragen Sie verwandte Beiträge nach der Tag-ID der aktuellen Seite ab

Ich versuche, verwandte Posts des aktuellen Posts mit tag_ID auszugeben. Mit dem aktuellen Code geben Posts alle Posts des Tags property anstelle eines bestimmten Tags aus.

Wie kann ich nur Beiträge zurücksenden, die auf den aktuellen Beiträgen tag_ID basieren?

<?php $post_tag = get_the_tags($post->ID)?>//Not sure if correct

<?php
    $args = array(
        'post_type' => 'property',
        'tag' => $post_tag,
    );
    $related_posts = new WP_Query( $args );
?>

<?php while ( $related_posts -> have_posts() ) : $related_posts -> the_post(); ?>
    <h2><?php echo get_the_title()?></h2>
    //etc
<?php endwhile; wp_reset_query(); ?>  

Lösung: Könnte nicht die beste Lösung sein, aber es gelingt, verwandte Beiträge abzufragen, die innerhalb von city und dem Tag des aktuellen Beitrags liegen.

$tags = wp_get_post_terms( get_queried_object_id(), 'city', ['fields' => 'ids'] );

// Now pass the IDs to tag__in
$args = array(
        'post_type' => 'property',
        'post__not_in' => array( $post->ID ),
        'tax_query' => array(
        array(
                'taxonomy' => 'city',
                'terms' => $tags,
        ),
    ),
);

$related_posts = new WP_Query( $args );
1
scopeak

get_the_tags() gibt ein Array mit dem Namen, der ID und mehr von Tags zurück. Sie sollten nur IDs in einem Array speichern und in Ihrer Abfrage verwenden.

$post_tag = get_the_tags ( $post->ID );
// Define an empty array
$ids = array();
// Check if the post has any tags
if ( $post_tag ) {
    foreach ( $post_tag as $tag ) {
        $ids[] = $tag->term_id; 
    }
}
// Now pass the IDs to tag__in
$args = array(
    'post_type' => 'property',
    'tag__in'   => $ids,
);
// Now proceed with the rest of your query
$related_posts = new WP_Query( $args );

Verwenden Sie wp_reset_postdata(); anstelle von wp_reset_query();, wenn Sie WP_Query(); verwenden.

AKTUALISIEREN

Wie von @birgire hervorgehoben, bietet WordPress die Funktion wp_list_plunk() , um ein bestimmtes Feld jedes Objekts in einer Zeile zu extrahieren, das die gleiche Funktionalität wie array_column() function hat.

Also können wir das ändern:

// Define an empty array
$ids = array();
// Check if the post has any tags
if ( $post_tag ) {
    foreach ( $post_tag as $tag ) {
        $ids[] = $tag->term_id; 
    }
}

Dazu:

// Check if the post has any tags
if ( $post_tag ) {
    $ids = wp_list_pluck( $post_tag, 'term_id' );
}
2
Jack Johansson