Atualmente, estou migrando o conteúdo do site de um site antigo anterior ao 4.1 para uma nova instalação e encontrando um problema com o problema de erro de arredondamento no # 18532 e a correção correspondente .
Para resumir isso, foi corrigido um mau comportamento de arredondamento no lado do WordPress:
Imagine que carregamos uma imagem com 693x173 e a dimensionamos para uma largura de 300:
- pré 4.1: 300 x 74
- post 4.1: 300x75
O problema
Geralmente, isso não causa problemas porque os arquivos existentes e <img>
não são tocados.
Mas quando você regenerar polegares ou anexos importando de um arquivo WXR eles são gerados de forma diferente no sistema de arquivos deixando todos <img>
em post_content
mortos.
Procurando uma solução
Eu tenho pensado em várias soluções:
Voltando aos maus velhos tempos
O Changeset 30660 introduziu um novo filtro wp_constrain_dimensions
que pode ser usado para conectar o comportamento antigo anterior ao 4.1 novamente. Isso corrige o problema. Mas eu estou querendo saber se isso pode causar problemas mais tarde e, geralmente, eu gostaria de ter a correção, embora isso funcione, considero não ideal.
Os tempos estão mudando'
Portanto, isso nos deixa com outro objetivo: limpar o banco de dados e substituir todas as referências aos arquivos antigos por referências aos novos arquivos. A pergunta que estou realmente fazendo aqui agora é como fazer isso. Estou procurando uma solução eficaz e geralmente aplicável, pois suspeito que esse problema afeta e afetará muitas pessoas
Minha idéia atual é esta:
- Importe, regenere ou o que nos deixar com os novos arquivos e tags quebradas.
- Crie uma lista A de todos os arquivos redimensionados no sistema de arquivos ou, alternativamente, obtenha essas informações do banco de dados
- Analise esta lista e crie uma segunda lista B com os nomes de arquivos todos deslocados em um pixel, como seria antes do 4.1
- Faça uma pesquisa e substitua em todo o banco de dados, substituindo todas as ocorrências de B pela entrada relacionada em A
Só não tenho certeza se essa é a maneira mais inteligente e eficiente de lidar com essa situação. Também parece um pouco de força bruta. Então, antes de implementá-lo, eu só queria verificar com a infinita sabedoria da multidão da WPSE;)
[edit] Tendo lido a resposta de ck-macleod (obrigado!) Eu acho que uma correção deve resolver isso de uma vez por todas, para que você não precise manter constantemente esse problema na parte de trás da sua cabeça. [/editar]
[edit2] Acabei de encontrar um ticket relacionado no Trac . Adicionando para referência. [/ edit2]
error issue of #13852
quis dizer#18532
? :)Respostas:
Essa é outra abordagem que não a outra resposta que funciona ao importar conteúdo com o importador e corrige os URLs de uma vez por todas. Novamente: Isso não foi testado em batalha, mas é a solução em que me decidi e funcionou.
Eu prefiro isso, pois resolve o problema de uma vez por todas e, se funcionar, funcionará. Como você não está deixando coisas quebradas no banco de dados e as corrige em exibição, não precisa se preocupar com coisas quebradas mais tarde.
fonte
Resolver o problema de maneira global e perfeita para TODOS os arquivos de imagem (e links) em um site grande - dada a possibilidade, por exemplo, de que indivíduos possam ocasionalmente renomear arquivos de imagem manualmente imitando o estilo WP - e outras variações estranhas - pode ser difícil. As operações de busca e substituição de banco de dados também envolvem complicações (e riscos!).
Você poderia lidar com a grande maioria dos erros - imagens quebradas e links de imagens quebradas, presumo - e alcançar o resultado final desejado ou um fax razoável, pelo método a seguir?
Identifique a data anterior à qual todas as imagens redimensionadas foram redimensionadas pelo método "intval" antigo, e não pelo novo método "redondo". (Um tipo diferente de corte também pode ser criado, mas a data parece mais fácil.)
Para todas as postagens publicadas <= a data limite, execute preg_replace no the_content () no momento do carregamento / renderização, capturando todos os arquivos de imagem com o padrão ou padrões de problemas e substituindo-os pelo padrão desejado. O banco de dados permaneceria inalterado, mas a saída estaria livre de erros na maioria dos casos. Não tenho certeza se a solução precisaria se aplicar ao conteúdo de postagem da página "singular" e ao arquivamento de páginas e outros processos também.
Se uma solução desse tipo seria útil, a próxima pergunta seria se os padrões e substituições de problemas poderiam ser adequadamente definidos. Parece na sua lista de soluções propostas que possivelmente alguns padrões típicos poderiam ser isolados (talvez tirados de configurações anteriores de mídia produzindo miniaturas e outras imagens).
Eu já escrevi uma função mais simples que eu uso (e estou no processo de transformar em um plug-in), que substitui globalmente todos os arquivos de imagem em diretórios designados, até uma certa data, por uma imagem ou link de imagem padrão, conforme o método descrito acima. Era para um site em que, além do cuidado com os direitos autorais, os operadores simplesmente excluíam todas as imagens, sem saber que, além de produzirem resultados feios em páginas antigas, eles também estavam cometendo milhares de erros, dois por cada imagem.
Se você pode restringir o padrão do problema mais especificamente e as instâncias em que a saída precisaria ser alterada, eu poderia ver como conectá-lo ao meu formato - o que não é muito complicado e qual é um RegExer melhor do que eu poderia até seja fácil. Por outro lado, não gostaria de perder seu ou meu tempo se essa abordagem não responder ao problema para você.
fonte
wp_constrain_dimensions
como mencionado na pergunta ao fazer a importação e evitar reconstruir os polegares seria mais limpo.Ok, esta é uma abordagem básica para substituir imagens quebradas em tempo real. Esteja ciente de que isso é mais uma prova de conceito do que uma solução testada em batalha. Ele apenas prende o
the_content
filtro, o que pode (provavelmente tem) alguns efeitos colaterais indesejados em algumas situações. Manuseie com cuidado. :)Embora esteja indicado no código, também quero creditar @Rarst por esta resposta usada no meu código.
fonte