Actualmente estoy en el proceso de migrar el contenido del sitio de un sitio anterior a 4.1 a una nueva configuración y estoy resolviendo un problema con el problema de error de redondeo de # 18532 y la corrección correspondiente .
Para resumir esto, se corrigió un mal comportamiento de redondeo de larga data en el lado de WordPress:
Imagina que cargamos una imagen con 693x173 y la escalamos a un ancho de 300:
- pre 4.1: 300x74
- publicación 4.1: 300x75
La cuestión
En general, esto no causa ningún problema porque los archivos existentes <img>
no se tocan.
Pero cuando la regeneración de los pulgares o los accesorios de importación de un archivo WXR consiguen generan de manera diferente en el sistema de ficheros dejando todo <img>
en el post_content
muerto.
Buscando una solución
He estado pensando en varias soluciones:
Volviendo a los viejos tiempos malos
Changeset 30660 introdujo un nuevo filtro wp_constrain_dimensions
que se puede usar para conectar el comportamiento anterior antes de 4.1 nuevamente. Esto soluciona el problema. Pero me pregunto si esto podría causar problemas más adelante y, en general, me gustaría tener la solución, por lo que, aunque funciona, lo consideraría no ideal.
Los tiempos están cambiando'
Esto nos deja con otro objetivo: limpiar la base de datos y reemplazar todas las referencias a los archivos antiguos con referencias a los archivos nuevos. La pregunta que realmente estoy haciendo aquí ahora es cómo hacer esto. Estoy buscando una solución efectiva y generalmente aplicable, ya que sospecho que este problema afecta y afectará a muchas personas.
Mi idea actual es esta:
- Importar, regenerar o lo que sea que nos deje con los nuevos archivos y etiquetas rotas.
- Cree una lista A de todos los archivos redimensionados en el sistema de archivos u, alternativamente, obtenga esta información de la base de datos
- Analice esta lista y cree una segunda lista B con nombres de archivo todos desplazados por un píxel como se vería antes de 4.1
- Haga una búsqueda y reemplazo en toda la base de datos reemplazando todas las ocurrencias de B con la entrada correspondiente en A
No estoy seguro de si esta es la forma más inteligente y eficiente de manejar esta situación. También se siente un poco demasiado fuerza bruta. Entonces, antes de implementarlo, solo quería verificar con la sabiduría infinita de la multitud de WPSE;)
[editar] Después de leer la respuesta de ck-macleod (¡gracias!) Creo que una solución debería resolver esto de una vez por todas para que no tenga que mantener constantemente este problema en la parte posterior de su cabeza. [/editar]
[edit2] Acabo de encontrar un ticket relacionado en Trac . Agregando para referencia. [/ edit2]
error issue of #13852
te refieres#18532
? :)Respuestas:
Este es otro enfoque que la otra respuesta que funciona al importar contenido con el importador y corrige las URL de una vez por todas. Nuevamente: esto no está probado en batalla, pero es la solución que decidí y funcionó.
Prefiero esto, ya que resuelve el problema de una vez por todas y si funciona, funciona. Como no va a dejar cosas rotas en la base de datos y arreglarlas en la pantalla, no necesita preocuparse por las cosas que se rompan más adelante.
fuente
Resolver el problema de manera global y perfecta para TODOS los archivos de imagen (y enlaces) en un sitio grande, dada la posibilidad, por ejemplo, de que las personas ocasionalmente hayan cambiado el nombre de los archivos de imagen manualmente imitando el estilo WP, y otras variaciones extrañas, podrían ser difíciles. Las operaciones de búsqueda y reemplazo de bases de datos también implican complicaciones (¡y riesgos!).
¿Podría manejar la gran mayoría de los errores (imágenes rotas y enlaces de imágenes rotas, supongo) y lograr el resultado final deseado o facsímil razonable, mediante el siguiente método?
Identifique la fecha antes de la cual todas las imágenes redimensionadas fueron redimensionadas por el antiguo método "intval" en lugar del nuevo método "redondo". (También se podría crear un tipo de corte diferente, pero la fecha parece más fácil).
Para todas las publicaciones publicadas <= la fecha límite, ejecute preg_replace en the_content () en el momento de carga / representación, capturando todos los archivos de imagen con el patrón o patrones problemáticos y reemplazándolos con el patrón deseado. La base de datos permanecería inalterada, pero la salida estaría libre de errores en la mayoría de los casos. No estoy seguro de si la solución necesitaría aplicarse tanto al contenido de publicación de página "singular" como a páginas de archivo y otros procesos también.
Si una solución de este tipo fuera útil, la siguiente pregunta sería si los patrones del problema y los reemplazos podrían definirse adecuadamente. Según su lista de soluciones propuestas, posiblemente algunos patrones típicos podrían de hecho estar aislados (quizás tomados de configuraciones de medios anteriores que producen miniaturas y algunas otras imágenes).
Ya he escrito una función más simple que uso (y estoy en proceso de convertirme en un complemento), que reemplaza globalmente todos los archivos de imagen en directorios designados, hasta una fecha determinada, con una imagen o enlace de imagen predeterminado, según el método descrito anteriormente. Era para un sitio donde, en exceso de precaución de derechos de autor, los operadores simplemente borraron todas sus imágenes, sin saber que, además de producir resultados feos en páginas antiguas, también estaban produciendo miles de errores, dos por cada uno. imagen.
Si puede reducir el patrón del problema más específicamente, y las instancias en las que la salida necesitaría ser alterada, entonces podría ver cómo conectarlo a mi formato, lo cual no es muy complicado y para un mejor RegExer del que podría. incluso ser fácil Por otro lado, no quisiera perder su tiempo o el mío si este enfoque no respondiera el problema por usted.
fuente
wp_constrain_dimensions
lo mencionado en la pregunta mientras se realiza la importación y abstenerse de reconstruir los pulgares sería más limpio.Bien, este es un enfoque básico para reemplazar imágenes rotas sobre la marcha. Tenga en cuenta que esto es más una prueba de concepto que una solución probada en batalla. Simplemente se engancha en el
the_content
filtro que podría (probablemente tenga) algunos efectos secundarios no deseados en algunas situaciones. Tratar con cuidado. :)Aunque también lo dice en el código, también quiero acreditar a @Rarst por esta respuesta utilizada en mi código.
fuente