Я хочу фильтровать сообщения на основе нескольких пользовательских полей ACF с отношением AND. Что-то вроде этого:
$args = array(
'post_type' => 'product',
'meta_query' => array(
'relation' => 'AND',
array(
'key' => 'color',
'value' => 'blue',
'compare' => '=',
),
array(
'key' => 'price',
'value' => array( 20, 100 ),
'type' => 'numeric',
'compare' => 'BETWEEN',
),
),
);
Я мог бы даже иметь больше фильтров. Как я могу преобразовать их в фильтры REST API 2?
advanced-custom-fields
meta-query
rest-api
Сохраб Таи
источник
источник
Ответы:
Это решение работает с
get_items()
в/lib/endpoints/class-wp-rest-posts-controller.php
изv2 WP Rest API
.Во-первых, вы захотите построить
GET
аргументы, как для anew WP_Query()
. Самый простой способ сделать это сhttp_build_query()
.Это будет производить что-то вроде:
filter%5Bmeta_query%5D%5Brelation%5D=AND&filter%5Bmeta_query%5D%5B0%5D%5Bkey%5D=color&filter%5Bmeta_query%5D%5B0%5D%5Bvalue%5D=blue&filter%5Bmeta_query%5D%5B0%5D%5Bcompare%5D=%3D&filter%5Bmeta_query%5D%5B1%5D%5Bkey%5D=test&filter%5Bmeta_query%5D%5B1%5D%5Bvalue%5D=testing&filter%5Bmeta_query%5D%5B1%5D%5Bcompare%5D=%3D
Что, если вы хотите удобочитаемости, вы также можете использовать инструменты Chrome и
decodeURIComponent('your-query-here')
сделать его более удобным для чтения, когда вы добавляете его в URL-адрес JSON Rest API :https://demo.wp-api.org/wp-json/wp/v2/product?filter[meta_query][relation]=AND&filter[meta_query][0][key]=color&filter[meta_query][0][value]=blue&filter[meta_query][0][compare]==&filter[meta_query][1][key]=test&filter[meta_query][1][value]=testing&filter[meta_query][1][compare]==
Примечание: Для того, чтобы использовать пользовательский почтовый тип , который поставил бы
product
перед тем?
/wp-json/wp/v2/<custom-post-type>?filter[meta_query]
Итак, у вас есть запрос, но нам нужно указать WP, как справиться с несколькими вещами:
product
meta_query
meta_query
источник
Вот тест, который я сделал на Localhost:
По соображениям безопасности мета-запрос не разрешен в WP Api, во-первых, вам нужно добавить meta_query в разрешенный rest_query, добавив эту функцию в вашу тему WordPress.
functions.php
после этого вам нужно будет создать HTML-запрос с помощью этой функции на другом веб-сайте, который будет получать данные с веб-сайта WordPress.
Я изменяю массив полей, теперь он выглядит как аргументы вашего запроса. Закодированная строка запроса будет выглядеть так:
Используя
urldecode()
, что в этом случае будет: уurldecode('http://yourwordpreswebssite.com/wp-json/wp/v2/posts?' . $field_string);
вас будет URL, как этот:Если вы можете предоставить нам URL своего живого веб-сайта, чтобы мы могли протестировать его с помощью почтальона непосредственно на вашем веб-сайте, потому что для его тестирования на локальном хосте или на любом существующем сайте WordPress потребуется создать пользовательский тип поста, добавить мета-поля и т. Д.
источник
product
таксономии. Работает отлично! Не думал об упаковкеmeta_query
внутриfilter
:)Вы можете сделать это без Rest API, как это (это мой фильтр сообщений)
источник
В Wordpress 4.7
filter
аргумент был удален.Вы можете активировать его, установив этот плагин, предоставленный командой Wordpress. Только после этого вы можете использовать одно из решений, предложенных в других ответах.
Я пока не нашел решения сделать то же самое без установки плагина.
источник