As fotos anexadas a um item aparecem em ordem errada e a paginação não funciona direito

Oi pessoal, tudo bem?

Eu adicionei várias fotos a um item, elas apareceram na ordem correta dentro do admin do tainacan, mas na visão de usuário elas estão desordenadas no slider que aparece.

Um caso que investiguei, elas estavam divididas na “metade”, iniciando de um item no meio delas, mas seguindo ordenadamente de acordo com o nome até que chegou à ultima e começou a exibição do item que deveria ser o primeiro e seguiu até terminarem os itens. Mais ou menos assim:

6, 7, 8, 9, 1, 2, 3, 4, 5

Não sei se é sempre assim, ou se foi uma coincidência.

Me parece um bug no slider, pois dentro do admin elas estão aparecendo na ordem.

Além disso, a paginação dentro do admin do tainacan só funciona até a página 4, dali em diante, ele repete sempre as memas últimas fotos.

Foram inseridas mais de 100 fotos nesse item.

Podem me ajudar nisso?

Obrigado!

Tainacan 0.21.11
Tainacan support for blocksy 0.3.4
Blocksy 2.0.72

Eu acho que isso é realmente um bug, consegui reproduzir aqui. Já abri uma issue para darmos uma olhada nisso:

Pode estar relacionado ou não com a ordenação, mas vou investigar melhor assim que resolvermos.

Obrigado!

Obrigado, Mateus!

Acabou que as coisas estavam relacionadas sim. Vou tentar explica aqui, embora possa ficar um pouco técnico.

Antes de tudo, se puder fazer a gentileza de testar a correção com uma versão “em desenvolvimento” nossa:

Basta substituir o plugin atual por esse. Pode ocorrer de que, ao acessar o plugin a primeira vez após a atualização, você precise limpar o cache do seu navegador na janela usada. CTRL+SHIFT+R deve resolver.


Então vamos lá. A ordenação manual dos anexos é feita usando um campo chamado menu_order que está presente nos posts do tipo anexo do WordPress. Na página do item, a galeria de mídias usa a API interna do WordPress para chamar estes itens, passando como orderby=menu_order. Já na página de edição de item, é nossa API REST que faz a consulta, também com orderby=menu_order. O problema é que, em um primeiro momento, quando você envia estes anexos, todos os anexos tem um valor igual de menu_order=0. Isso faz com que a consulta se perca ao tentar entregar um resultado ordenado, gerando as inconsistências que você notou na paginação.

Após um pouco de pesquisa, entendemos que seria o caso de colocar critérios “fallback” para essa ordenação, e na verdade isso é relativamente simples. Agora, tanto a API interna quando a API REST buscam por menu_order title ID. Ou seja, primeiro tenta diferenciar pelo atributo de ordenação manual. Em seguida pelo título. Se o título do arquivo for igual, então cai pro ID, que por si funciona como se fosse ordem de criação.

Tudo muito bem até aí, mas tem um terceiro lugar onde esta consulta pelos anexos é feito, que é ao abrir o modal de edição/upload dos anexos. Aquela galeria faz a requisição por outro caminho, uma chamada Ajax interna da galeria de mídias do WordPress. Nós também passamos o atributo de ordem pelo menuOrder nela, mas investigando seu código fonte, descobrimos que a galeria não só não aceita todos os parâmetros que a API padrão do WordPress aceita, como ele força uma ordenação secundária por ID quando passamos o menuOrder. Na teoria isso não seria problema. Poderíamos manter o mesmo comportamento do nosso lado. Porém, apesar da requisição trazer sim os anexos ordenados por ID caso não tenha sido feita ordenação manual… a biblioteca em si, que monta aquele modal, está caindo em uma ordenação por data :exploding_head: quando não consegue ordenar por menuOrder.

Sem se perder demais nos aspectos técnicos, a consequência é que: ao abrir o modal de edição/upload de anexos, os anexos aparecem com uma ordem diferente da que você vê na página de edição ou na página pública do item. À MENOS QUE, você pegue um anexo apenas e ordene ele manualmente (arrastando e soltando). A partir deste momento, quando você faz uma única ordenação manual, ele define o atributo menuOrder em todos os anexos restantes. Isso faz com que os três lugares apresentem a lista com a mesma ordem :thinking:.

Enfim, é algo estranho no comportamento da galeria de mídias do WordPress que não sabemos como contornar. Tem bastante cara de bug inclusive, se eu conseguir investigar mais acho que justifica abrir uma issue no trac do WordPress.

Por hora espero que os ajustes feitos nesta branch que te enviei permitam pelo menos que na página de edição do item e na página pública do item você veja a mesma coisa :slight_smile:.

Muito obrigado, Mateus, pela descrição tão detalhada e também técnica. Eu mesmo sou formado em Ciência da Computação e adoro entender como as coisas funcionam internamente.

Obrigado novamente pela aula :wink:

Vou testar em breve e te retorno.

Oi Mateus.

Testei aqui e a paginação da lista de imagens dentro da edição do item está funcionando corretamente.

O slider na página do item também está funcionando de acordo.

Me parece que o problema está resolvido :slight_smile:

Muito obrigado mais uma vez pela rápida resposta!

1 curtida

Este tópico foi fechado automaticamente 5 dias depois da última resposta. Novas respostas não são mais permitidas.