获取混合类别的随机帖子

时间:2013-08-15 作者:busyjax

我有3个类别:A、B、C。A有大约1000个帖子,B有大约300个帖子,C有50个帖子。当我查询5篇帖子时,随机排序。我收到的大部分帖子都来自某个类别。

如何获得混合类别的随机帖子,如A中的3篇、B中的1篇和C中的1篇?

1 个回复
最合适的回答,由SO网友:Charles Clarkson 整理而成

我突然想到:

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;
}
如果任何帖子位于所选类别中的2个或多个类别中,则有可能会重复一篇帖子(如同时位于a类和B类中的帖子)。A.static variable 使用以前检索到的post数组可能会解决这个问题。

此算法按调用顺序打印帖子。

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
如果你想要一个随机列表,shuffle $random_posts.

结束

相关推荐

Can't update old posts 3.5.2

Background: 我在一个客户网站上工作,我还没有自己建立。该网站运行得很好,当我得到它时,wp\\u页眉和wp\\u页脚丢失了,javascript文件在body标记关闭之前都链接到了。WordPress 3.5.2Issue: 旧帖子和打印更新内容时存在此问题。内容打印在foreach中,其中应显示一篇文章的附加图像。由于某种原因,旧内容被困在那里。我可以更新帖子,查看帖子的内容,但我无法在我试图显示的特定位置看到新内容。foreach生成一个滚动div,该div随图像前后移动。I\'ve tr