Chcę filtrować posty na podstawie wielu niestandardowych pól acf z relacją AND. Coś takiego:
$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',
),
),
);
Mogę nawet mieć więcej filtrów. Jak przekonwertować je na filtry REST API 2?
advanced-custom-fields
meta-query
rest-api
Sohrab Taee
źródło
źródło
Odpowiedzi:
To rozwiązanie sprawdza się
get_items()
w/lib/endpoints/class-wp-rest-posts-controller.php
zv2 WP Rest API
.Po pierwsze, będziesz chciał skonstruować
GET
argumenty tak, jak dlanew WP_Query()
. Najłatwiej to zrobić za pomocąhttp_build_query()
.Wyprodukuje coś takiego:
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
Które, jeśli chcesz, aby były czytelne, możesz również użyć narzędzi Chrome i
decodeURIComponent('your-query-here')
ułatwić czytanie, gdy wrzucisz je do adresu 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]==
Uwaga: aby użyć niestandardowego typu posta, który umieściłeś
product
wcześniej?
/wp-json/wp/v2/<custom-post-type>?filter[meta_query]
Więc masz zapytanie, ale musimy pouczyć WP, jak postępować z kilkoma rzeczami:
product
meta_query
meta_query
źródło
Oto test, który wykonałem na Localhost:
Ze względów bezpieczeństwa meta kwerenda nie jest dozwolona w WP Api, najpierw musisz dodać meta_query do dozwolonego rest_query, dodając tę funkcję do motywu wordpress
functions.php
po tym będziesz musiał zbudować zapytanie HTML za pomocą tej funkcji na drugiej stronie internetowej, która pobierze dane ze strony wordpress
Zmieniam tablicę pól, aby wyglądały teraz jak argumenty zapytania. Zakodowany ciąg zapytania będzie wyglądał następująco:
Korzystając z tego
urldecode()
, co w tym przypadku będzie:urldecode('http://yourwordpreswebssite.com/wp-json/wp/v2/posts?' . $field_string);
będziesz mieć URL taki jak ten:Jeśli możesz podać nam swój adres URL na żywo, abyśmy mogli przetestować go za pomocą listonosza bezpośrednio na Twojej stronie, ponieważ aby go przetestować na localhost lub dowolnej istniejącej stronie WordPress, konieczne będzie utworzenie niestandardowego typu postu produktu i dodanie pól meta itp. Na zdrowie!
źródło
product
taksonomii. Działa świetnie! Nie myślałem o zawijaniu wmeta_query
środkufilter
:)Możesz to zrobić bez Rest API Tak jak to (to jest filtr moich postów)
źródło
W Wordpress 4.7
filter
argument został usunięty.Możesz aktywować to zainstalowanie tej wtyczki dostarczone przez zespół Wordpress. Dopiero potem możesz skorzystać z jednego z rozwiązań zaproponowanych w pozostałych odpowiedziach.
Nie znalazłem rozwiązania, aby zrobić to samo bez instalacji wtyczki.
źródło