我检查了一下,还没有找到一个可行的答案。我有一个带有以下参数的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'
);


#1 楼

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

评论


工作了请客,为队友们喝彩。

–亚当·莫斯(Adam Moss)
2011年10月4日15:41

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

– adamj
2015年12月2日在2:46



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

–米洛
17-4-25在18:21



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

–爆发
18-2-22在7:46

@unbreak一种简单的解决方案是在运行订单查询之前解析所有帖子并向其中添加meta_key

– adamj
18年2月23日在9:21

#2 楼

如果您的meta值不是数字,例如它是一个日期值;则可以添加参数meta_type => DATE
可能的值是; 'NUMERIC', 'BINARY', 'CHAR', 'DATE', 'DATETIME', 'DECIMAL', 'SIGNED', 'TIME', 'UNSIGNED'
具有元类型的查询将类似于:
$args = array(
'post_status' => 'publish',
'post_type' => 'listing',
'meta_key' => 'client_feedback_score',
'orderby' => 'meta_value_num',
'meta_type' => 'DATE',
'order' => 'DESC'
);