Olá, estou fazendo buscas a partir da API JSON com sucesso até agora. Um exemplo de chamada bem sucedida que tenho feito é essa:
wp-json/tainacan/v2/collection/415/items?perpage=-1&metaquery[0][key]=1196&metaquery[0][value][0]=1943&metaquery[0][compare]=IN
Agora estou tentando fazer buscas mais complexas, de acordo com o que vi na documentação aqui:
https://tainacan.org/api-docs/endpoints/tainacan/v2/collection/collection_id/items/
Para isso, estou tentando mudar o critério de comparação de “IN” para “LIKE”, mas se tento fazer algo como isso:
wp-json/tainacan/v2/collection/415/items?perpage=-1&metaquery[0][key]=1196&metaquery[0][value][0]=1943&metaquery[0][compare]=LIKE
Recebo uma mensagem de erro, mesmo sem alterar nada no valor da busca. O erro que recebo é esse aqui:
Fatal error: Uncaught TypeError: addcslashes(): Argument #1 ($string) must be of type string, array given in C:\Apache24\htdocs\coisariocassinomuseu.com.br\wp-includes\class-wpdb.php:1806
Preciso mudar a forma de indicar o valor? Alguém sabe onde pode estar o problema?
Muito obrigado!
1 Like
Conferindo as mensagens de erro, encontrei uma questão no arquivo “plugins\tainacan\classes\repositories\class-tainacan-items.php”. Na linha 371 ele cria uma consulta com a classe “WP_Query”, passando todos os valores como “arrays”. Quando o critério de comparação é “LIKE”, o Wordpress chama uma função com este valor que espera um argumento “string” e não “array”. Coloquei isso por enquanto logo acima da chamada à WP_Query e a busca está funcionando:
foreach ($args['meta_query'] as $kmeta => $vmeta) {
if ($vmeta['compare'] == 'LIKE') {
if (is_array($vmeta['value'])) {
$args['meta_query'][$kmeta]['value'] = $vmeta['value'][0];
}
}
}
Olá @Lucas_Junqueira tudo joia com você?
Muito bom saber que você está usando a API do Tainacan e conseguindo desbravar essa parte do plugin, a documentação que temos online HJ é um pouco confusa. Estamos trabalhando para melhorar esses documentos na próxima versão, se quiser ajudar depois para ver se a organização da documentação da API ficou boa seria incrível.
mas voltando ao seu questionamento, essa chamada aqui:
você passa o valor a ser pesquisado para um endpoint com um formato de array, o “LIKE” suporta a busca apenas por valores simples, então acho que a chamada deveria ser assim:
wp-json/tainacan/v2/collection/415/items?perpage=-1&metaquery[0][key]=1196&metaquery[0][value]=1943&metaquery[0][compare]=LIKE
observer que o “value” agora é um valor (metaquery[0][value]=1943
) e não um array (metaquery[0][value][0]=1943)
O que falta acho que falta é a gente adicionar um tratamento de erro, para esse tipo de problema de “tipo de dado” ao repassar a query para o WP_Query.
att!