【问题标题】:Wordpress REST API "orderby" meta valueWordpress REST API“orderby”元值
【发布时间】:2020-04-20 07:26:18
【问题描述】:

我正在执行 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 排序以及如何为此执行查询。 请帮忙

【问题讨论】:

标签: wordpress rest api


【解决方案1】:

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

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

基于this answer

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

如果您无法将 announcement_category 更改为数字而不是数组,则可以在发送 API 响应之前使用 usort 对 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];
});

Array Sort

【讨论】:

  • 感谢您的建议。根据您的建议,我尝试了如下的 wp REST 调用 [link](announcement?_fields=announcement_category,effective_start_date,effective_end_date&filter[orderby]=meta_value_num&filter[order]=ASC&filter[meta_key]=announcement_category)。我得到一个空结果。
  • 我认为这行不通——你需要改变你的数据结构,所以announcement_category 是一个数字而不是一个数组。我在答案中添加了一个 usort 示例 - 我相信这是最好的解决方案。
  • 谢谢,就我而言,“announcement_category”是一个分类法,不能更改为单个数字。所以我的计划是在收到 wp 响应后用 java 排序结果。
  • 这是另一种方法,但我建议在返回 API 响应之前但之前对 wp_query 的结果进行排序。否则任何访问 API 的东西都需要重新排序响应
  • 是否在WP端配置了“usort”?我无权这样做。我只能使用 REST API 获取数据。
猜你喜欢
  • 1970-01-01
  • 2019-10-04
  • 2015-01-01
  • 2017-09-12
  • 1970-01-01
  • 2016-04-12
  • 1970-01-01
  • 2016-04-20
  • 2016-09-19
相关资源
最近更新 更多