J'ai 3 catégories: A, B, C. A a environ 1000 postes, B a environ 300 postes et C a 50 postes. Lorsque je demande 5 messages, classés au hasard. Je reçois principalement des messages de la catégorie A.
Comment obtenir des messages aléatoires de catégories mélangées, tels que 3 de A, 1 de B et 1 de C?
J'ai fouetté ça:
echo '<ul>';
the_random_posts();
echo '</ul>';
/**
* Send random posts to the browser (STDOUT).
*/
function the_random_posts() {
// Use your own category ids.
$random_posts = array_merge(
get_random_posts( 31, 3 ),
get_random_posts( 11, 1 ),
get_random_posts( 24, 1 )
);
foreach ( $random_posts as $post ) {
// Change this line to code you want to output.
printf( '<li><a href="%s">%s</a></li>', get_permalink( $post->ID ), get_the_title( $post->ID ) );
}
}
/**
* Get $post_count random posts from $category_id.
*
* @param int $post_count Number of random posts to retrieve.
* @param int $category_id ID of the category.
*/
function get_random_posts( $category_id, $post_count ) {
$posts = get_posts( array(
'posts_per_page' => $post_count,
'orderby' => 'Rand',
'cat' => $category_id,
'post_status' => 'publish',
) );
return $posts;
}
Si des publications figurent dans au moins deux des catégories sélectionnées, il est possible qu'une publication soit répétée (comme une publication de la catégorie A et de la catégorie B). Une variable statique avec un tableau de publications précédemment récupérées pourrait résoudre ce problème.
Cet algorithme imprime les messages dans l'ordre dans lequel ils ont été appelés.
get_random_posts( 31, 3 ), // First, 3 random posts from Category A
get_random_posts( 11, 1 ), // Then, 1 random post from Category B
get_random_posts( 24, 1 ) // Then, 1 random post from Category C
Si vous voulez une liste aléatoire, mélangez $random_posts
.