【问题标题】:WP_Query orderby meta_value_num not workingWP_Query orderby meta_value_num 不起作用
【发布时间】:2017-02-08 00:42:11
【问题描述】:

我正在尝试按价格显示服务列表。我已经设置了自定义帖子类型和自定义字段等。但是,当我在页面上运行查询时,最昂贵的服务(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

提前致谢!

【问题讨论】:

  • 在您链接的页面上找到的条目似乎是按字符串排序的,而不是数字。如果在查询之前不能将它们转换为数字,那么查询必须考虑到这一点。

标签: php wordpress custom-fields post-meta


【解决方案1】:

您提供的链接清楚地显示了字符串排序(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

【讨论】:

    【解决方案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

    【讨论】:

      猜你喜欢
      • 2016-06-18
      • 2016-06-15
      • 1970-01-01
      • 2012-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多