Je souhaite filtrer les publications en fonction de plusieurs champs personnalisés acf avec la relation AND. Quelque chose comme ça:
$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',
),
),
);
Je pourrais même avoir plus de filtres. Comment puis-je les convertir en filtres REST API 2?
advanced-custom-fields
meta-query
rest-api
Sohrab Taee
la source
la source
Réponses:
Cette solution fonctionne avec
get_items()
in/lib/endpoints/class-wp-rest-posts-controller.php
duv2 WP Rest API
.Tout d'abord, vous voudrez construire les
GET
arguments comme vous le feriez pour anew WP_Query()
. La façon la plus simple de le faire est d'utiliserhttp_build_query()
.Cela produira quelque chose comme:
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
Si vous le souhaitez, vous pouvez également utiliser les outils Chrome et
decodeURIComponent('your-query-here')
le rendre plus facile à lire lorsque vous le jetez dans l' URL de votre API JSON Rest :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]==
Remarque: Pour utiliser votre type de publication personnalisé, vous devez le mettre
product
avant?
/wp-json/wp/v2/<custom-post-type>?filter[meta_query]
Vous avez donc votre requête, mais nous devons indiquer à WP comment gérer certaines choses:
product
meta_query
meta_query
la source
Voici un test que j'ai fait sur Localhost:
Pour des raisons de sécurité, la méta-requête n'est pas autorisée sur WP Api, tout d'abord, vous devez ajouter la méta-requête à la rest_query autorisée en ajoutant cette fonction sur votre thème wordpress
functions.php
après cela, vous devrez créer la requête html en utilisant cette fonction sur l'autre site Web qui obtiendra les données du site Web wordpress
Je change le tableau des champs pour que l'apparence ressemble maintenant à vos arguments de requête. La chaîne de requête codée ressemblera à ceci:
En utilisant
urldecode()
, qui dans ce cas sera:urldecode('http://yourwordpreswebssite.com/wp-json/wp/v2/posts?' . $field_string);
vous aurez une URL comme celle-ci:Si vous pouvez nous fournir l'URL de votre site Web en direct afin que nous puissions le tester à l'aide de postman directement sur votre site Web, car pour le tester sur localhost ou sur tout site WordPress existant, vous devrez créer un type de publication personnalisé et ajouter des champs méta, etc.
la source
product
taxonomie. Ça marche super! Je n'ai pas pensé à envelopper à l'meta_query
intérieurfilter
:)Vous pouvez le faire sans API Rest comme ça (c'est mon filtre de messages)
la source
Dans Wordpress 4.7, l'
filter
argument a été supprimé.Vous pouvez le réactiver en installant ce plugin fourni par l'équipe Wordpress. Ce n'est qu'après cela que vous pouvez utiliser l'une des solutions proposées dans les autres réponses.
Je n'ai pas encore trouvé de solution pour faire de même sans installer le plugin.
la source