首页 > 解决方案 > Wordpress REST API“orderby”元值

问题描述

我正在执行以下 GET 请求以获取数据表单 wordpress

http://domain:port/wp-json/wp/v2/announcement?_fields=announcement_category,effective_start_date,effective_end_date

结果如下

[
    {
        "announcement_category": [
            216
        ],
        "effective_start_date": "2020-03-27",
        "effective_end_date": "2020-04-16"
    },
    {
        "announcement_category": [
            215
        ],
        "effective_start_date": "2020-03-25",
        "effective_end_date": "2020-03-31"
    }]

我需要按照“announcemet_category”值的 ASC 顺序对我的回复进行排序/排序。(这个数组总是有一个值)我知道“orderby”不支持meta_values。如何启用 meta_value 排序以及如何为此执行查询。请帮忙

标签: wordpressrestapi

解决方案


您应该能够使用以下方法对元值进行排序:

$q = new WP_Query(
    // Other query params e.g. post type...
    array(
        'meta_key' => 'announcement_category',
        'orderby' => 'meta_value_num',
        'order' => 'ASC',
    )           
);

基于这个答案

但是,我认为您的问题是,正如您所指出的,announcement_category它是一个数组而不是一个数字,您将无法对其进行排序。

如果您无法更改announcement_category为数字而不是数组,则可以在发送 API 响应之前使用asort对 WordPress 查询的结果进行排序:

$arr1 = array(
    array('announcement_category'=>array(216)),
    array('announcement_category'=>array(218)),
    array('announcement_category'=>array(202)),
    array('announcement_category'=>array(300)),
);

function sortByOrder($a, $b) {
    return $a['announcement_category'][0] - $b['announcement_category'][0];
}

usort($arr1, 'sortByOrder');

print_r($arr1); // Ordered ascendingly

或者,您可以在客户端使用 javascript 根据需要对响应进行排序:

announcements.sort(function (a, b) {
    return a[announcement_category][0] - b[announcement_category][0];
});

数组排序


推荐阅读