Quiero filtrar publicaciones basadas en múltiples campos personalizados de acf con relación AND. Algo como esto:
$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',
),
),
);
Incluso podría tener más filtros. ¿Cómo puedo convertirlos en filtros REST API 2?
advanced-custom-fields
meta-query
rest-api
Sohrab Taee
fuente
fuente
Respuestas:
Esta solución funciona con
get_items()
en/lib/endpoints/class-wp-rest-posts-controller.php
delv2 WP Rest API
.Primero, querrás construir los
GET
argumentos como lo harías para anew WP_Query()
. La forma más fácil de hacer esto es conhttp_build_query()
.Producirá algo como:
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
Lo cual, si desea que se pueda leer, también puede usar las herramientas de Chrome y
decodeURIComponent('your-query-here')
hacer que sea más fácil de leer cuando lo arroje a su URL de 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]==
Nota: Para usar su tipo de publicación personalizada, debe poner
product
antes?
/wp-json/wp/v2/<custom-post-type>?filter[meta_query]
Entonces tiene su consulta pero necesitamos instruir a WP sobre cómo manejar algunas cosas:
product
meta_query
meta_query
fuente
Aquí hay una prueba que hice en Localhost:
Por razones de seguridad, la metaconsulta no está permitida en WP Api, primero lo que tiene que hacer es agregar meta_query a rest_query permitido agregando esta función en su tema de wordpress
functions.php
después de eso, necesitará construir la consulta html usando esta función en el otro sitio web que obtendrá los datos del sitio web de WordPress
Cambio la matriz de campos para que se vea ahora como los argumentos de su consulta. La cadena de consulta codificada se verá así:
Al usar
urldecode()
, que en este caso será:urldecode('http://yourwordpreswebssite.com/wp-json/wp/v2/posts?' . $field_string);
tendrá una URL como esta:Si puede proporcionarnos la URL de su sitio web en vivo para que podamos probarlo utilizando el cartero directamente en su sitio web, porque para probarlo en localhost o en cualquier sitio existente de WordPress será necesario crear un tipo de publicación personalizada del producto y agregar metacampos, etc. ¡Saludos!
fuente
product
taxonomía. ¡Funciona muy bien! No pensé en envolvermemeta_query
dentrofilter
:)Puedes hacerlo sin Rest API como este (es mi filtro de publicaciones)
fuente
En Wordpress 4.7 el
filter
argumento ha sido eliminado.Puede reactivarlo instalando este complemento proporcionado por el equipo de Wordpress. Solo después de eso puede usar una de las soluciones propuestas en las otras respuestas.
Todavía no he encontrado una solución para hacer lo mismo sin instalar el complemento.
fuente