5

我正在尝试按价格显示服务列表。我已经设置了自定义帖子类型和自定义字段等。但是,当我在页面上运行查询时,最昂贵的服务(100 英镑)首先显示而不是最后显示......我编写的查询如下:

$services = new WP_Query(array(
'post_type' => 'service',
'tax_query' => array(
    array(
        'taxonomy' => 'service_type',
        'field' => 'name',
        'terms' => $post->post_name,
    ),
),
'meta_key'  => 'price',
'post_status' => 'publish',
'posts_per_page' => -1,
'orderby' => 'meta_value_num',
'order' => 'ASC', ));

该页面的链接在这里dev.poshwashlondon.co.uk/valeting

提前致谢!

4

2 回答 2

6

您提供的链接清楚地显示了字符串排序(100、15、20、25 等)。您的问题似乎是查询使用的元值不是数字,而是字符串。

你可以试试这个:

$services = new WP_Query(array(
'post_type' => 'service',
'tax_query' => array(
    array(
        'taxonomy' => 'service_type',
        'field' => 'name',
        'terms' => $post->post_name,
    ),
),
'meta_key'  => 'price',
'meta_type' => 'NUMERIC',
'post_status' => 'publish',
'posts_per_page' => -1,
'orderby' => 'meta_value_num',
'order' => 'ASC', ));

您可以在这里查看可能的“orderby”: https ://codex.wordpress.org/Class_Reference/WP_Query#Order_.26_Orderby_Parameters

于 2016-09-29T15:53:06.427 回答
4

我知道这是个老问题,也许我的回答会对某人有所帮助。

这里的问题是价格是@muka-gergely 提到的字符串,因此排序将按字母顺序排列,这对于字符串(即单词)很好,但对于数字(例如 1、3、34、4、56、6、等等,而不是您自然期望的 1、3、4、6、34、56)。

如果要从最低到最高对数字进行排序,则必须添加'meta_type'到查询中

$services = new WP_Query(array(
'post_type' => 'service',
'tax_query' => array(
    array(
        'taxonomy' => 'service_type',
        'field' => 'name',
        'terms' => $post->post_name,
    ),
),
'meta_key'  => 'price',
'post_status' => 'publish',
'posts_per_page' => -1,
'orderby' => 'meta_value_num',
'meta_type' => 'NUMERIC', //HERE
'order' => 'ASC', ));

可能的值为'meta_type'“NUMERIC”、“BINARY”、“CHAR”、“DATE”、“DATETIME”、“DECIMAL”、“SIGNED”、“TIME”、“UNSIGNED”

更多信息:https ://codex.wordpress.org/Class_Reference/WP_Query#Order_.26_Orderby_Parameters

于 2018-08-07T13:44:54.913 回答