我正在尝试按价格显示服务列表。我已经设置了自定义帖子类型和自定义字段等。但是,当我在页面上运行查询时,最昂贵的服务(£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。
提前致谢!
答案 0 :(得分:4)
您提供的链接清楚地显示了字符串排序(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" s: https://codex.wordpress.org/Class_Reference/WP_Query#Order_.26_Orderby_Parameters
答案 1 :(得分:2)
我知道这是个老问题,也许我的回答会帮助到别人。
这里的问题是价格是字符串,如@ 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