A solução para mover um item de uma coleção do Tainacan para outra começa com a exportação da coleção de origem em CSV, edição do CSV para deixar apenas os itens que serão enviados para a coleção de destino, para, então, importá-los no destino. Preciso que todos os documentos e arquivos anexados a ele sejam também movidos junto ao item.
Porém, não ficou claro pra mim duas coisas:
São só documentos ou todos os arquivos anexados ao item são exportados (e importados)? Muitos itens, como fotos, são galerias de fotos e apenas uma delas é o documento, então preciso garantir que todas serão exportadas.
Como remover os itens da coleção original (minha intenção é mover os itens entre coleções).
Lembro que num outro tópico mais antigo, a sugestão seria executar uma limpeza de arquivos órfãos (mídia que não está anexada a nenhum post), porém não entendi ao certo como proceder ou se isso é confiável no sentido de que somente arquivos realmente sem uso serão removidos.
No WP podemos ter midias “órfãs”, mas que ainda estão sendo usada em posts. Uma imagem enviada via biblioteca de mídia, permanece desanexada, mesmo que ela seja usada em algum post.
Alguma dica, sugestão para realizar esse processo?
Oi @marvila desculpe pela demora na resposta aqui!
Quando vc usa o exportador CSV ele vai gerar três colunas relacionadas à arquivos:
special_document - Contém o documento do item, que se for um anexo terá o prefixo file:
special_attachments - Contém os anexos do item, separados por |caso hajam vários
special_thumbnail - Contém a miniatura, a versão recortada que representa o item
Portanto ao reimportar você deve manter estes campos para que todos sejam importados. Durante a importação ele irá copiar estes arquivos e mandar para uma nova pasta. A nova pasta terá relação com o ID da coleção e o ID do novo item que está sendo criado. Falamos mais sobre o porquê desta organização de pastas aqui. Conhecer esta estrutura de pastas é um primeiro passo importante para poder entender onde os dados devem estar em eventuais backups.
Após criados os novos itens, seria simplesmente apagar os itens antigos (e depois excluir eles permanentemente da lixeira). É o primeiro passo, pode ser feito via edição em massa. Agora, de fato, os arquivos ficarão. Esta é uma decisão polêmica, já batemos cabeça com isso, mas vem de um receio de alguém poder ter usado a mídia em algum contexto (em um post por exemplo) e depois aquilo ficar perdido. Mas isso gera o problema do “lixo” que fica pra trás. Por isso existe o comando da WP CLI wp tainacan garbage-collector, que acredito que é o que você menciona mais adiante.
Sim, isto que complica um pouco as coisas. Mas eu dei uma olhada aqui no código fonte do comando do garbage-collector pra entender o que ele fazia:
Ele remove:
Arquivos que tenham sido definidos como “Documento” de itens que foram excluídos;
Arquivos que tenham sido definidos como “Anexos” de itens que foram excluídos;
Se você passar o parâmetro –-deep, arquivos que tenham post_parent (ou seja, foram anexados à algum post) mas este post não existe mais. Ou seja no –-deep ele faz uma limpeza sem olhar se os posts relacionados são do Tainacan. Mas não deveria afetar Arquivos que não foram vinculados à nenhum post.
Eu recomendaria fazer alguns testes mais contidos antes de rodar qualquer linha de comando da WP CLI. Nós sabemos que é ruim que seja necessário usar a linha de comando pra este tipo de feature, por isso estamos trabalhando neste momento em uma forma de expor alguns destes processos.
Ainda assim é complexo porque são operações pesadas que se rodadas no contexto da aplicação pesam o servidor e podem derrubar tudo… precisamos pensar em uma forma de quebrar isso para rodar de forma assíncrona como acontece com os Importadores e Exportadores. Por outro lado eles introduzem as dores de cabeça que você já conhecem que variam do servidor de hospedagem (wp-cron e transients). Então a CLI é realmente uma forma mais pragmática para se realizar operações pesadas de manutenção.
Muito obrigado, Mateus. Sua resposta esclareceu alguns pontos ainda nebulosos no entendimento do funcionamento mais interno do Tainacan.
Eu acho que deixar esse tipo de atividade em massa pro WP CLI é melhor mesmo, pois ele tem o potencial de ser destrutivo e causar problemas.
Mas…
E se fosse criada uma opção na hora de deletar o item manualmente que permitisse remover os arquivos desse item junto com ele. Haveria um alerta e até uma possível segunda confirmação antes de remover. Penso num funcionamento parecido como o shift+del do windows que deleta o arquivo sem colocar na lixeira.
Isso resolveria a necessidade de remover ou não o arquivo do item sem usar o CLI e ainda permitiria fazer em batch no WP Cron. Com a dupla confirmação, evitamos deleções por engano. Também acho que, assim, seria muito mais fácil achar os arquivos para deletar sem precisar passar em inúmeros anexos procurando por aqueles que estão “órfãos”, já que vc está processando aquele item e saberia exatamente quais são os arquivos a deletar.
Cara hoje minha opinião é de que o correto mesmo seria apagar o arquivo junto com o item, inclusive por padrão. Porque no final das contas ele é enviado para a pasta da coleção/item dentro da pasta de uploads do Tainacan. Eu entendo que as pessoas podem ter usado em posts ou páginas via bloco de imagem do WordPress mas se mesmo em um caso destes o item for removido a imagem, na minha opinião, deveria ir tbm, deixando o conteúdo quebrado. É muito mais difícil ficar procurando os órfãos, isso é até um problema geral do WordPress né, se vc envia a imagem ali pro post e depois apaga o post a imagem resta ocupando espaço…
Vai demandar uma conversa mais profunda pra pensarmos no que fazer com o legado, mas eu penso que em breve devemos mudar este comportamento.
Nesse contexto das pastas, concordo contigo. Deletar tudo parece ser mais interessante.
No geral, sobre imagens, eu trabalho com inúmeros sites de viagem (e já tive blog de viagem por mais de 17 anos) e vou falar que eu não acho ruim não deletar as imagens nesse caso. Porque eu reaproveitava muita foto já enviada em mais de um post. Mas confesso que +90% provavelmente era novo envio.
Obrigado pela boa discussão sobre esse assunto. Gosto sempre de entender a origem de algumas decisões e das entranhas dos softwares que uso
Poisé, acho que pode fazer sentido no contexto do WordPress, mas pros itens Tainacan a “amarração” entre itens e anexos é mais forte.
No próprio WordPress isso já é meio caótico, não é à toa que a galera instala aqueles plugins pra melhorar a categorização e filtragem das mídias.
Mas aí eu fico pensando se o cara quer muito mostrar uma imagem de item do Tainacan ele pode usar os blocos do Tainacan… tipo aquele da galeria de mídias que de quebra já te dá o Zoom. E estes tem o cuidado de se um item não existir simplesmente não carregarem nada.