Fala, pessoal! Estou enfrentando uma dificuldade ao tentar enviar os campos de metadados do formulário para o meu banco de dados. Já explorei bastante o banco de dados do WordPress, mas não consegui encontrar a tabela onde esses campos e valores são armazenados. Pode ser que eu esteja deixando passar algo simples. Alguém consegue me ajudar?
Olá @Nicolas, tudo bem? Seja bem vindo ao nosso fórum!
O assunto é longo e talvez possa ficar mais claro se você explicar em mais detalhes o que está tentando fazer. O Tainacan tem uma API própria que por sua vez estende a API do WordPress. Se você quer construir alguma interface alternativa que alimente dados de metadados Tainacan, talvez valha dar uma explorada na nossa API REST, visto que a própria interface do painel administrativo e dos blocos foi construída consumindo e interagindo com ela:
Mas sim, em último caso ela é uma camada de abstração em cima do banco de dados do WordPress. Para compreender um pouco sobre essa abstração, talvez valha dar uma lida aqui:
O importante é saber que Coleções, Itens, Taxonomias, Metadados, todos são post types do WordPress, o que significa que você vai encontrá-los na tabela wp_posts
. Porém posts do WordPress só possuem título e descrição, não possuem os campos extras que nós chamamos de metadados. Estes em si ficam guardados na forma de post meta, portanto estarão na tabela wp_postmeta
Para encontrar o valor de um metadado de um item você precisa de uma tupla: o id do item , que será o post_id
e o id do metadado, que será o meta_key
.
Porém, como eu disse, há várias camadas de abstração aí que a API te ajuda a “ingorar”. Por exemplo, metadados multivalorados, metadados compostos… e as taxonomias são particularmente complexas, visto que guardamos IDs de termos cujo rótulo você só vai encontrar em outra tabela, que guarda os relacionamentos com as Taxonomias. Não é bem tranquilo sair recriando um formulário por exemplo. Por isso queria ver mais detalhes do que precisa para entendermos qual melhor caminho ok?
E aí, Mateus, tudo bem? E contigo?
Criei um repositório para armazenar e expor TCCs da faculdade onde trabalho. Como os dados serão públicos, decidimos registrar logs com nome do acadêmico, data, título e dois checkboxes de termos (outros metadados são gerados, mas só queremos esses). Não consegui enviar os dados do formulário de submissão para um banco de dados, então criei meu próprio formulário em HTML e estou tentando usar a API para criar itens no acervo. Testei no Postman, mas tenho problemas: ao usar “/collection/{collection_id}/items/submission” com o body, recebo o id_submission; ao publicar, o item é criado com campos em branco, exceto os padrões (title e description). Há outra forma de passar os metadados? Usei um item existente como referência, mas o campo value também fica em branco.
No Postman, envio assim:
"metadata": {
"nome": {
"name": "NOME",
"id": {id do item},
"value": {valor do item (que quando enviado fica em branco)},
"value_as_html": {valor do item},
"value_as_string": {valor do item},
"semantic_uri": "",
"multiple": "no",
"mapping": [ ]
},
// outros metadados
}
estou enviados as taxo deste modo: “terms”: [{id_taxonomia}],
Se tiver dicas ou um norte, agradeço! Valeu, Mateusão! Se precisar de mais informações, estou disponível.
E por quê o próprio Formulário de Submissão não resolveu neste caso? Vocês podem usar o próprio Registro de Atividades se quiserem acompanhar isso, não?
Por quê não conseguiu? Os dados do formulário de submissão viram metadados nos itens, qual seria o impeditivo? Não consigo imaginar algo que seja mais complexo do que criar um formulário do zero hehehe
Mas ok, supondo que você realmente precise ir por aí, minha dica é criar um Bloco de Submissão de Itens e usando o inspetor do navegador dar uma olhada nas requisições que são feitas no painel “network” pra entender como as coisas devem ser feitas. Por exemplo, você precisa tanto do endpoint /submission
quanto do /finish
. E no caso dos metadados, eles são enviados de uma forma bem diferente da que são retornados, porque o retorno envolve coisas processadas (como o value_as_html
). Faça uns testes que você vai ver, é na forma de um array com metadatum_id
e value
. Os termos mesmo são um array de IDs apenas.