WP_Query-按元值排序结果


49

我检查了一下,还没有找到一个可行的答案。我有以下论点的WP_Query:

$args = array(
    'post_status' => 'publish',
    'post_type' => 'listing',
    'meta_key' => 'client_feedback_score',
    'orderby' => 'client_feedback_score',
    'order' => 'DESC'
        );

$query = new WP_Query($args);

我想按自定义帖子字段“ client_feedback_score”(从最低到最高)对结果进行排序。但这似乎不起作用……有人能指出我正确的方向吗?

编辑(已解决):

感谢Milo的回应,以下是通过数字元值进行排序的工作代码:

$args = array(
            'post_status' => 'publish',
            'post_type' => 'listing',
            'meta_key' => 'client_feedback_score',
            'orderby' => 'meta_value_num',
            'order' => 'DESC'
        );

Answers:


69

orderby应该是meta_value_nummeta_value,而不是键的名称。请参阅WP_Query orderby参数


工作了请客,队友欢呼。
亚当·莫斯

5
小提示,如果该meta_key帖子尚不存在,则该帖子将被忽略。
adamj 2015年

1
@RobBenz您可能应该就此主题开始一个新问题。步骤1为您的元键分配所需的任何值,我们称它为my_meta_key,以便每个帖子生成所需的任何顺序。步骤2 meta_key在查询中将设置为my_meta_key。这告诉WordPress查询具有该键的帖子。步骤3将orderby查询设置为meta_value_num。这告诉WordPress不仅使用来查询帖子my_meta_key,而且还可以通过该键按数字顺序排序。该查询参数是您将看到或使用的唯一位置meta_value_num
米洛

1
@adamj有什么解决方法吗?我需要对所有帖子进行排序,无论该帖子是否存在meta_key。
破门

1
@unbreak一种简单的解决方案是meta_key在运行订单查询之前解析所有帖子并将其添加到它们
adamj
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.