web-dev-qa-db-ja.com

カテゴリーごとに最近/ランダムな投稿を表示する方法

カスタム投稿が属する各カテゴリからランダムな投稿を表示しようとしています(2つのカテゴリに関連しています)。 IDで投稿カテゴリを取得しようとしています。カテゴリIDを手動で入力しようとしましたが、それでも彼のタイプのすべての投稿からランダムな投稿が表示されます。誰かがこれを手伝ってくれる?

<?php
    $term_list = wp_get_post_terms( $post->ID, 'listing-category', array( 'fields' => 'ids' ) );
    $args = array(
        'post_type' => 'listing',
        'category' => $term_list[0],
        'post_status' => 'publish',
        'orderby'   => 'Rand',
        'posts_per_page' => 3,
        );

    $the_query = new WP_Query( $args );

    if ( $the_query->have_posts() ) {
        while ( $the_query->have_posts() ) {
            $the_query->the_post();
            $Rand_posts .= '<li> <a href="'. get_the_permalink() .'">'. get_the_title() .'</a> </li>';
        }
        echo $Rand_posts;
        wp_reset_postdata();
    } 
?>
2
K H

では、現在の投稿が割り当てられているすべてのカテゴリから3つのランダムな投稿を表示したい場合は、...

まず、すべての用語をループして、すべての用語のランダムな投稿を取得する必要があります。

$term_list = wp_get_post_terms( $post->ID, 'listing-category', array( 'fields' => 'ids' ) );
if ( $term_list && ! is_wp_error($term_list) ) {
    foreach ( $term_list as $term_id ) {
        // get random posts for given term
    }
}

そして現在、クエリには1つのマイナーな欠陥があるため、すべてのカテゴリからランダムな投稿を取得します。

$args = array(
    'post_type' => 'listing',
    'category' => $term_list[0], // <- this works with built-in post categories, not your custom taxonomy called listing-category
    'post_status' => 'publish',
    'orderby'   => 'Rand',
    'posts_per_page' => 3,
);

したがって、Tax_Queryを使用する必要があります。

$args = array(
    'post_type' => 'listing',
    'post_status' => 'publish',
    'orderby' => 'Rand',
    'posts_per_page' => 3,
    'tax_query' => array(
        array( 'taxonomy' => 'listing-category', 'field' => 'term_id', 'terms' => <TERM_ID> ), // change <TERM_ID> for real term
        // so in your code it's $term_list[0] and in my loop just $term_id
    )
);
1