有没有可能对随机排序的帖子进行正确的分页?

时间:2011-10-20 作者:user9604

我在Wordpress支持上发现了这个问题,很遗憾,这个话题现在已经结束了。我也有同样的问题。。。(阅读下文)

我们创建了一个网站,会员可以在这里推荐喜欢的书籍、电影、歌曲等。对于这个问题,我将以电影页面为例。

“Movies”页面最终是一个自定义页面模板,它要求wordpress显示一个随机列表,列出所有被赋予“Movies”类别(类别31)的帖子。它使用下面的代码以随机顺序显示这些电影的标题。

<?php 
$rand = new WP_Query("cat=31&showposts=-1&orderby=rand"); 
while($rand->have_posts()) : $rand->the_post();
?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?>
<?php endwhile; ?>
问题是名单越来越长,我想把它分成两页或更多页,每页大约10部电影。为了实现这一点,我使用了下面的代码。

<?php 
$page = (get_query_var(\'paged\')) ? get_query_var(\'paged\') : 1; 
query_posts("cat=31&orderby=rand&showposts=10&paged=$page"); 
while ( have_posts() ) : the_post() 
?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?>
<?php endwhile; ?>
但存在一个问题,因为尽管它将数据拆分为每个页面10篇文章(分页),但它无法在第2页上包含一组新的10篇文章,以此类推。换句话说,因为它是以随机的顺序列出事情,所以它只会发出另外10条随机帖子(或者在本例中是电影标题)。因此,我们有一些重复的电影标题帖子,而不是第2页上10个新的随机电影标题,等等。

我的问题是,我可以向这段代码中添加什么来让wordpress“记住”它在第1页上随机包含的10篇帖子,然后让它在第2页、第3页等上添加一组新的10篇帖子,直到所有帖子都显示出来。我想有只有一个每页出现一个帖子时,随机排序在10组。

2 个回复
SO网友:Nick Ryall

您可以使用筛选器修改WP\\U查询的ORDER BY语句。

这样,您可以手动将查询设置为使用ORDER BY RAND($seed);

Mysql RAND()接受种子作为可选参数。使用种子,每次都将返回相同的随机结果集。

因此,您可以在第一次页面加载时生成一个随机数,然后将其存储在会话变量中,并将其用作进一步分页请求的$种子。

例如,如果您试图在主循环中实现这一点,可以将以下内容添加到函数中。php文件。

session_start();

add_filter(\'posts_orderby\', \'edit_posts_orderby\');

function edit_posts_orderby($orderby_statement) {

    $seed = $_SESSION[\'seed\'];
    if (empty($seed)) {
      $seed = rand();
      $_SESSION[\'seed\'] = $seed;
    }

    $orderby_statement = \'RAND(\'.$seed.\')\';
    return $orderby_statement;
}

SO网友:Guicara

自WordPress的最新版本以来,您现在可以在orderby 的参数WP_Query:

$query = new WP_Query([
    \'orderby\' => \'RAND(\' . $seed . \')\',
    ...
]);
$seed 是一个随机数。您应该将其存储为PHP会话变量。不要忘记在WordPress中通过调用session_start() 在你身上functions.php:

if (!session_id()) {
    session_start();
}
使用此语法,您不需要使用posts_orderby 滤器此外,您不必确保过滤器仅应用于目标WP\\U查询。

有关更多信息,请阅读this ticket 在WordPress Core上。

结束

相关推荐

Order posts by years

我的网站上有帖子(自定义帖子类型)。我想创建一个归档页面,显示按年份排序的归档帖子。e、 g:2010年*第3条来了*第2条来了*第1条来了2011年*第3条来了*第2条来了*第1条来了当然还有帖子的链接。我觉得很简单,但是我在网上找不到任何简单的东西。它还需要手工编码,以便我可以轻松地设置样式。非常感谢您的帮助Gil