Quero filtrar postagens com base em vários campos personalizados do ACF com relação AND. Algo assim:
$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',
),
),
);
Eu posso até ter mais filtros. Como posso convertê-los em filtros REST API 2?
advanced-custom-fields
meta-query
rest-api
Sohrab Taee
fonte
fonte
Respostas:
Esta solução funciona com
get_items()
in/lib/endpoints/class-wp-rest-posts-controller.php
dov2 WP Rest API
.Primeiro, você deseja construir os
GET
argumentos como faria para anew WP_Query()
. A maneira mais fácil de fazer isso é comhttp_build_query()
.Produzirá 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
O qual, se você quiser legível, também poderá usar as ferramentas do Chrome e
decodeURIComponent('your-query-here')
facilitar a leitura quando a inserir no URL da 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 seu tipo de postagem personalizado, você colocaria
product
antes?
/wp-json/wp/v2/<custom-post-type>?filter[meta_query]
Portanto, você tem sua consulta, mas precisamos instruir o WP sobre como lidar com algumas coisas:
product
meta_query
meta_query
fonte
Aqui está um teste que eu fiz no Localhost:
Por razões de segurança, a meta consulta não é permitida no WP Api. Primeiro, você deve adicionar meta_query a rest_query permitido, adicionando esta função ao seu tema wordpress
functions.php
depois disso, você precisará criar a consulta html usando esta função no outro site que obterá os dados do site wordpress
Eu mudo a matriz de campos para que a aparência agora seja dos seus argumentos de consulta. A cadeia de consulta codificada terá a seguinte aparência:
Ao usar
urldecode()
, que neste caso será:urldecode('http://yourwordpreswebssite.com/wp-json/wp/v2/posts?' . $field_string);
você terá um URL como este:Se você pode nos fornecer o URL do seu site ativo, para que possamos testá-lo usando o carteiro diretamente em seu site, porque para testá-lo no host local ou em qualquer site WordPress existente será necessário criar um tipo de postagem personalizado do produto e adicionar campos meta, etc.
fonte
product
taxonomia. Funciona muito bem! Não pensar embrulhometa_query
dentrofilter
:)Você pode fazer isso sem a API Rest Rest assim (é o meu filtro de postagens)
fonte
No Wordpress 4.7, o
filter
argumento foi removido.Você pode reativá-lo instalando este plugin fornecido pela equipe do Wordpress. Somente depois disso você poderá usar uma das soluções propostas nas outras respostas.
Ainda não encontrei uma solução para fazer o mesmo sem instalar o plugin.
fonte