Ich möchte Posts basierend auf mehreren benutzerdefinierten ACF-Feldern mit UND-Verknüpfung filtern. Etwas wie das:
$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',
),
),
);
Ich könnte sogar mehr Filter haben. Wie kann ich diese in REST API 2-Filter konvertieren?
advanced-custom-fields
meta-query
rest-api
Sohrab Taee
quelle
quelle
Antworten:
Diese Lösung funktioniert mit
get_items()
in/lib/endpoints/class-wp-rest-posts-controller.php
derv2 WP Rest API
.Zunächst möchten Sie die
GET
Argumente so konstruieren , wie Sie es für a tun würdennew WP_Query()
. Am einfachsten geht das mithttp_build_query()
.Es wird so etwas produzieren wie:
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
Wenn Sie lesbar sein möchten, können Sie auch Chrome-Tools verwenden und
decodeURIComponent('your-query-here')
das Lesen vereinfachen, wenn Sie es in Ihre JSON Rest API-URL einfügen :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]==
Hinweis: Um Ihren benutzerdefinierten Beitragstyp zu verwenden, den Sie
product
zuvor eingegeben haben?
/wp-json/wp/v2/<custom-post-type>?filter[meta_query]
Sie haben also Ihre Frage, aber wir müssen WP anweisen, wie ein paar Dinge zu erledigen sind:
product
meta_query
meta_query
quelle
Hier ist ein Test, den ich auf Localhost gemacht habe:
Aus Sicherheitsgründen ist eine Meta-Abfrage in WP Api nicht zulässig. Zuerst müssen Sie meta_query zu allowed rest_query hinzufügen, indem Sie diese Funktion in Ihrem WordPress-Design hinzufügen
functions.php
Danach müssen Sie die HTML-Abfrage mithilfe dieser Funktion auf der anderen Website erstellen, die die Daten von der WordPress-Website abruft
Ich ändere das Feldarray so, dass es jetzt wie Ihre Abfrageargumente aussieht. Die codierte Abfragezeichenfolge sieht folgendermaßen aus:
Mit
urldecode()
, was in diesem Fall ist: habenurldecode('http://yourwordpreswebssite.com/wp-json/wp/v2/posts?' . $field_string);
Sie eine URL wie diese:Wenn Sie uns Ihre Live-Website-URL zur Verfügung stellen können, damit wir sie mit postman direkt auf Ihrer Website testen können, da Sie zum Testen auf localhost oder einer vorhandenen WordPress-Site einen benutzerdefinierten Produktposttyp erstellen und Metafelder usw. usw. hinzufügen müssen.
quelle
product
Taxonomie. Es funktioniert super Ich habe nicht daran gedacht, nachmeta_query
innen zu wickelnfilter
:)Du kannst es auch ohne Rest API machen.
quelle
In Wordpress 4.7 wurde das
filter
Argument entfernt.Sie können es reaktivieren, indem Sie das vom Wordpress-Team bereitgestellte Plugin installieren . Erst danach können Sie eine der in den anderen Antworten vorgeschlagenen Lösungen verwenden.
Ich habe noch keine Lösung gefunden, um dasselbe zu tun, ohne das Plugin zu installieren.
quelle