在META_QUERY中按自定义字段对帖子进行排序

时间:2016-02-24 作者:dkatwp

如何在以下示例中的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\',
);
不工作。不知道如何将其推送到元查询,如果需要的话。

任何建议都将不胜感激。

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

从WordPress 4.2开始,您可以组合meta_queryorderby. 以下示例摘自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\',
);
Theorderby 参数只包括meta_query. 您也可以将其设置为state_clause 用于不同的订购。

真正酷的是通过将数组传递给orderby:

\'orderby\' => array(
    \'city_clause\' => \'ASC\',
    \'state_clause\' => \'DESC\',
),
这将转换为SQL查询,如

ORDER BY city_clause ASC, state_clause DESC
对于更复杂的排序类型。

相关推荐

如何在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