Consulta à API JSON com o critério "LIKE"

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!