通过分页中断保留随机显示结果的会话实例

时间:2021-05-17 作者:Jim Goodrich

我在一个网站上工作,该网站的博客帖子包含了单个类别下的表演者信息,可以使用自定义分类法(父术语和子术语)进行过滤。为了尽可能公平,网站所有者希望分类和筛选结果以随机顺序显示。这就是我能够找到的“随机化”:

add_action( \'pre_get_posts\', \'my_change_sort_order\'); 
function my_change_sort_order($query){
    if(is_category(\'artstour-roster\') OR is_tax(\'artistic_disciplines\') OR is_tax(\'geographic_availability\') OR is_tax(\'additional_services\') OR is_tax(\'core_audiences\') OR is_tax(\'additional_populations\')):
       //Set the order ASC or DESC
       $query->set( \'order\', \'ASC\' );
       //Set the orderby
       $query->set( \'orderby\', \'rand\' );
    endif;    
};
这将以随机顺序显示文章摘录,每页6篇。但是,如果您有多个页面的结果并在页面之间移动,结果的数量将保持不变,但移动到下一页或上一页会产生新的随机顺序,从而导致重复和遗漏。

例如,“cappella”子分类术语的过滤器会产生7个结果。当移动到结果的第二页时,仅显示一个结果条目,但该单个结果将再次随机化,显示先前在前一页上看到的一个结果,从而使过滤结果中的一个过滤摘录完全省略。

有没有办法跨页面“锁定”随机结果集?

1 个回复
SO网友:Edward

我想你不能和orderby和rand一起。相反,您可以创建一个自定义表,在其中生成随机整数值并将其连接到posts表。然后使用posts_join 筛选以将自定义表连接到posts查询,然后使用posts_orderby 按加入的随机场顺序过滤。现在,您的随机列表应该可以分页了。

相关推荐

Wpdb result with pagination

我得到了这个函数,它在没有分页的情况下正常工作,但现在我需要在页面上进行一些分页,因为列表现在已经长大了,我该怎么做呢?function listing_items($args){ global $wpdb; $listQ = new WP_Query( $args ); $pid = get_the_ID( ); $return = \'\'; if ( $listQ->have_post