Wordpress REST API "заказ" мета-значение - PullRequest
0 голосов
/ 20 апреля 2020

Я ожидаю 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"
    }]

Мне нужно отсортировать / упорядочить ответ в AS C порядок значения "announcemet_category". (для этого массива всегда есть одно значение) Я знаю, что orderby не поддерживает meta_values. Как включить сортировку meta_value и как я могу выполнить свой запрос для этого. Пожалуйста, помогите

1 Ответ

0 голосов
/ 20 апреля 2020

Вы должны иметь возможность сортировать по мета-значению, используя:

$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 на число, а не на массив, вы можете использовать usort для сортировки результатов вашего запроса WordPress перед отправкой ответа API:

$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];
});

Сортировка массива

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...