如何在WordPress上使用Order RAND()?

时间:2016-09-13 作者:Lucas Bustamante

注意:这是order, 不orderby.

根据wordpress文档,只有两种选择order, 它们是ASC或DESC。

问题是:

我想随机化the posts I\'ve selected, 不随机化WHICH posts I select.

下面是我的代码,以便更好地解释:

<?php
return array(
  "post_type" => "listings",
  "post_status" => "publish",
  \'meta_query\'=>array(
                        array(\'key\'=>\'featured_until\',\'value\'=>$current_date, \'compare\'=>\'>\'),
                     ),
  \'meta_key\'=>\'featured_until\',
  "orderby" => array(
            \'featured_until\' => \'RAND\', /* How can I make this work? */
            \'date\' => \'DESC\'
  ),
  "suppress_filters" => true,
  "facetwp" => true,
  "posts_per_page" => 16
);
这是一个房源网站。上面的代码选择16篇文章显示在第一页上。

首先,它试图找到16个特色列表。如果没有那么多特色的物品,那么它将以按日期排序的常规物品完成。

问题是:我怎样才能按随机顺序而不是按ASC或DESC顺序排列特色物品?

3 个回复
最合适的回答,由SO网友:cjbj 整理而成

你是对的,你不能让WordPress对检索到的帖子进行随机排序。因此,在检索完post对象的数组后,您必须自己执行此操作。我们这样说吧$my_posts.

由于您不知道该阵列中有多少帖子是特色帖子,因此必须循环浏览这些帖子才能拆分阵列。我不知道你是如何定义“特色”的,但它看起来是这样的:

$featured_posts = array ();
$nonfeatured_posts = array ();
foreach ($my_posts as $my_post) {
  if (test if featured)
    $featured_posts[] = $my_post
  else
    $nonfeatured_posts[] = $my_post;
// now, let\'s randomize
shuffle ($featured_posts);
// join the array again
$my_posts = array_merge ($featured_posts,$nonfeatured_posts);
// now you have your array with featured posts randomized
注意,我无法测试此代码,但我相信你会明白这一点。

SO网友:bosco

洗牌查询结果实际上非常简单shuffle()正在删除查询的结果。

$query = new WP_Query( //arguments );
shuffle( $query->posts );

SO网友:Vantron

您也可以使用:

\'orderby\'   =>\'rand\',
这种方式对我很有效。

相关推荐

如何在WooCommerce_Account_Orders函数中传递$CURRENT_PAGE?

woocommerce功能woocommerce_account_orders($current_page) 已调用1个参数$current_page. 该函数通过调用woocommerce_account_orders_endpoint 通过以下挂钩-add_action( \'woocommerce_account_orders_endpoint\', \'woocommerce_account_orders\' );然而,在上述挂钩中,$current_page 未在函数中作为参数传递。情况如何$c