使用随机排序的多个排序WP_QUERY

时间:2012-08-21 作者:Tim Whitacre

这是设置。

该网站是一个显示列表的网站。每个列表都有一个等级(1-3)。基本上它是一种列表类型。。。小型、中型和;用于确定客户支付的金额。

当我对所有列表进行WP\\u查询时,我想按从3-1开始的顺序显示它们(larget-small)。。。基本上显示所有大型物品,其中包括中型物品,然后是小型物品。

想想sortfolio。com公司

问题不仅在于我想把它们按大小顺序排列,而且我还想随机化每个列表,这样同一个大的列表就不会总是第一个显示出来。

以下是我所尝试的:

$query = new WP_Query( array( \'post_type\' => \'listing\', \'orderby\' => \'meta_value_num rand\', \'meta_key\' => \'membership\'));
正如你所看到的,我正在按成员级别对它们排序,但我试图将它们随机化。这似乎是可行的,但它总是将初始成员资格结果按ASC的顺序排列,并且没有办法(我可以想象)绕过它。

非常感谢您的帮助!!

2 个回复
SO网友:s_ha_dum

我运行了你的查询并得到。。。

ORDER BY wp_postmeta.meta_value+0,RAND() DESC
。。。这正是我所期望的。如果我没看错你的问题,你想要的是。。。

ORDER BY wp_postmeta.meta_value+0 DESC,RAND()
。。。比如this question at SO. 应该按meta_value 首先,然后随机化任何可能的二级排序。

WP_Query 不会那样做的。You can see in the source 订单“方向”由字符串固定在订单的末尾。它总是在错误的地方结束。

要实现此功能,您需要为posts_orderby.

function alter_order_wpse_62468($orderby) {
  global $wpdb;
  remove_filter(\'posts_orderby\',\'alter_order_wpse_62468\');
  return "{$wpdb->postmeta}.meta_value+0 DESC, RAND()";
}
add_filter(\'posts_orderby\',\'alter_order_wpse_62468\');
$query = new WP_Query( array( \'post_type\' => \'listing\', \'orderby\' => \'meta_value_num rand\', \'meta_key\' => \'membership\'));
var_dump($query->request);

$query = new WP_Query( array( \'post_type\' => \'listing\', \'orderby\' => \'meta_value_num rand\', \'meta_key\' => \'membership\'));
var_dump($query->request); die;
如果您像这样添加过滤器,就在查询之前,它将运行然后删除自己,这样就不会干扰任何其他查询。您可以通过查看var_dump这就是为什么我运行了两次查询。重要的是add_filter 部分函数本身可以在其他地方定义。

如果在其他地方添加过滤器,则需要在回调中添加一些逻辑来控制其运行的时间和位置,否则它将改变其他查询。作为参考,这里是one technique for adding that logic.

如果过滤器需要使用不同的参数在不同的位置运行,则可能需要对现有的ORDER BY 保留现有内容的条款。

SO网友:woony

只需添加,\'order\' => \'DESC\'

$query = new WP_Query( array( \'post_type\' => \'listing\', \'orderby\' => \'meta_value_num rand\', \'meta_key\' => \'membership\', \'order\' => \'DESC\'));
还是我错过了什么?

结束

相关推荐

我应该如何截取主查询并注入定制连接/ORDER BY/GROUP BY条件

我有一个CPT,它是两个独立分类法的成员。在其中一种分类法的分类法归档页面上,我需要对第二种分类法进行进一步分组和排序,如下所示:我的网站。com/tax1/term1/tax2-term1-post-post-post[参见更多]tax2-term2-post-post-post[参见更多]。。。等更好的示例要提供更容易访问的示例,请考虑以下CPT:玩具。还有两种分类法:颜色和年龄组。在mysite的分类法归档页面上。com/colour/red,我需要对第二个分类法“年龄组”进行进一步分组,如下所示: