wordpress随机帖子与分页一致

时间:2014-12-29 21:16:51

标签: php wordpress

在我的主页上,我希望能够查询整个分页中一致的随机帖子。 我发现使用'wp_query'的几个解释,但我正在寻找一个可以帮助我'get_posts'的解决方案。

这是我到目前为止的代码:

foreach ( $categories as $category ) {
    global $post;
                $myposts = get_posts(array(
                    'post_type' => 'portfolio', 
                    'orderby'     => 'rand',
                    'posts_per_page' => 1,
                    'numberposts'   => -1, // get all posts.
                    'tax_query'     => array(
                        array(
                            'taxonomy'  => 'portfolio_categories',
                            'field'     => 'id',
                            'terms'     => $category->cat_ID
                        )

                    )
                ));
                foreach ( $myposts as $post ){
                    setup_postdata( $post );

// stuff of posts
}
            wp_reset_postdata(); }

1 个答案:

答案 0 :(得分:0)

get_posts()在幕后使用WP_Query()课程。因此,您可以使用WP_Query()执行任何操作,您可以使用get_posts()执行此操作,但几乎没有记录的例外情况。

虽然您可以通过posts_orderby过滤器轻松处理此问题,但自Wordpress 4.5起,WP_Query()类支持使用内置的MySQL RAND(n)种子值,允许你提取一组一致的随机帖子。

举个例子:

$posts = get_posts(array(
    'post_type' => 'portfolio',
    'orderby'     => 'rand(1234)',
    'posts_per_page' => 1,
    'numberposts'   => -1, // get all posts.
    'tax_query'     => array(
        array(
            'taxonomy'  => 'portfolio_categories',
            'field'     => 'id',
            'terms'     => $category->cat_ID
        )

    )
));

只要在每个查询上传递1234,就会返回相同的随机帖子集,因此您可以轻松地进行分页。如果传递新值(即5678),则随机集将更改。这里的思考过程是为每个用户会话存储一个不同的随机整数。

有关MySQL RAND(n)功能如何工作的更多信息,请参阅docs