如何在以下示例中的WordPress查询中应用“order\\u by”:
我有一个查询,可以获取所有带有自定义字段的帖子,这些帖子的事件日期大于或等于当前日期。每个帖子最多可以有10个事件日期(event\\u date\\u 0、event\\u date\\u 1等),因此我在元查询中运行循环,如:
$meta_query_array = array(
\'relation\' => \'OR\'
);
for($date_row = 0;$date_row < 10; $date_row++){
$single_date_query = array(
\'key\' => \'event_date_\'.$date_row,
\'value\' => date(\'Y-m-d\'),
\'compare\' => \'>=\',
\'type\' => \'DATE\'
);
array_push($meta_query_array, $single_date_query);
}
$args = array(
\'post_type\' => array(\'events\'),
\'posts_per_page\' => -1,
\'meta_query\' => $meta_query_array
);
$events = new WP_Query( $args )
那部分很好用。我收到的所有帖子中,10个活动日期中至少有1个大于或等于当前日期。
现在我需要应用排序(order by)。我想通过另一个自定义字段“rating”DESC.设置order\\u by,这就是我失败的地方。
只需添加到$args,如:
$args = array(
\'post_type\' => array(\'events\'),
\'posts_per_page\' => -1,
\'meta_query\' => $meta_query_array,
\'meta_key\' => \'rating\',
\'orderby\' => \'meta_value_num\',
\'order\' => \'DESC\',
);
不工作。不知道如何将其推送到元查询,如果需要的话。
任何建议都将不胜感激。
最合适的回答,由SO网友:fischi 整理而成
从WordPress 4.2开始,您可以组合meta_query
和orderby
. 以下示例摘自make.wordpress.org.
简单示例meta_query
:
$q = new WP_Query( array(
\'meta_query\' => array(
\'relation\' => \'AND\',
\'state_clause\' => array(
\'key\' => \'state\',
\'value\' => \'Wisconsin\',
),
\'city_clause\' => array(
\'key\' => \'city\',
\'compare\' => \'EXISTS\',
),
),
\'orderby\' => \'city_clause\',
);
The
orderby
参数只包括
meta_query
. 您也可以将其设置为
state_clause
用于不同的订购。
真正酷的是通过将数组传递给orderby
:
\'orderby\' => array(
\'city_clause\' => \'ASC\',
\'state_clause\' => \'DESC\',
),
这将转换为SQL查询,如
ORDER BY city_clause ASC, state_clause DESC
对于更复杂的排序类型。