wp rest api filter вложенный массив jmespath - PullRequest
0 голосов
/ 19 января 2019

Я пытаюсь отфильтровать запрос wpapi, используя стандартную встроенную строку фильтра Jmespath.

Я хотел бы получить все «id» в списке с одним или несколькими значениями в массиве «filters». «Фильтры» вложены в «_item_filter-options».

Например, я бы отфильтровал все идентификаторы с помощью «фильтров» == 409 ИЛИ 400.

А как насчет фильтрации всех "id" с помощью "location" == 217 ИЛИ другого значения?

Не могли бы вы помочь мне найти решение?

[
  {
    "id": 2608,
    "date": "2018-08-18T12:53:16",
    "date_gmt": "2018-08-18T10:53:16",
    "ait-locations": [
      217,
      19
    ],
    "ait_item_filters-options": {
      "filters": [
        "419",
        "400",
        "409",
        "418",
        "531",
        "403",
        "408",
        "575"
      ]
    },

  },
  {
    "id": 2588,
.....

Я добавляю дополнительную информацию, которая может помочь мне ответить. Я использую тему WordPress ait-club с пользовательским типом записи "ait-item" и мета-полями.

Я пытаюсь использовать Wordpress Rest API для получения всех элементов ait с некоторыми свойствами, такими как широта, заголовок, адрес и т. Д., Отфильтрованных _item_filters-options "->" filters ".

Использование, например, http://mydomain/wp-json/wp/v2/ait-item?location=19 ЭТО РАБОТАЕТ (местоположение является пользовательской таксономией). Как я могу получить тот же результат с Jmespath?

Как получить ait-item с фильтрами = 419 или более значений?

Извините за мой маленький английский, спасибо.

Edit: Использование:

https://www.mydomain.it/wp-json/wp/v2/ait-item?_query=[?_item_filters-options.filters[0]=='400']

я могу получить все "id", если первое значение массива "filters" равно 400. Я не могу искать во всем массиве "filters" !! Не могли бы вы помочь мне?

РЕДАКТИРОВАТЬ: Я нашел решение, используя:

https://www.areepicnic.it/wp-json/wp/v2/ait-item?_query=[?"_ait-item_filters-options".filters[?@=='400']]

или

https://www.areepicnic.it/wp-json/wp/v2/ait-item?_query=[?"_ait-item_filters-options".filters[?contains(@,'397')]]

сейчас я пытаюсь фильтровать по нескольким значениям.

1 Ответ

0 голосов
/ 22 января 2019

Фильтрация может быть выполнена для фильтров, например, используя столько операторов или ||, сколько необходимо, чтобы получить все необходимые параметры:

[?contains(_item_filters-options.filters, '409') || contains(_item_filters-options.filters, '400')].id

и аналогично для локаций:

[?contains(locations, '217') || ?contains(locations, '<other-value>'].id
...