Detener la codificación automática de atributos width y height en imágenes de WordPress
Me pregunto si hay una manera simple de evitar que WordPress codifique automáticamente los atributos de altura y ancho de las imágenes destacadas, sin usar expresiones regulares...
Como estoy usando un grid flexible para mi proyecto (¿quién no lo hace?), esto está causando algunos problemas extraños con las imágenes.

Puedes eliminar los atributos de ancho (width) y alto (height) filtrando la salida de la función image_downsize
que se encuentra en wp-includes/media.php
. Para hacer esto, debes escribir tu propia función y ejecutarla a través del archivo functions.php de tu tema o como un plugin.
Ejemplo:
Eliminar los atributos width
y height
.
/**
* Esta es una modificación de la función image_downsize() en wp-includes/media.php
* eliminaremos todas las referencias de ancho y alto, por lo tanto, la etiqueta img
* no añadirá los atributos width y height a la imagen enviada al editor.
*
* @param bool false Sin referencias de alto y ancho.
* @param int $id ID del adjunto para la imagen.
* @param array|string $size Opcional, por defecto es 'medium'. Tamaño de la imagen, ya sea un array o string.
* @return bool|array Falso en caso de fallo, array en caso de éxito.
*/
function myprefix_image_downsize( $value = false, $id, $size ) {
if ( !wp_attachment_is_image($id) )
return false;
$img_url = wp_get_attachment_url($id);
$is_intermediate = false;
$img_url_basename = wp_basename($img_url);
// intentar obtener un tamaño intermedio de estilo nuevo
if ( $intermediate = image_get_intermediate_size($id, $size) ) {
$img_url = str_replace($img_url_basename, $intermediate['file'], $img_url);
$is_intermediate = true;
}
elseif ( $size == 'thumbnail' ) {
// Retroceder al thumbnail antiguo
if ( ($thumb_file = wp_get_attachment_thumb_file($id)) && $info = getimagesize($thumb_file) ) {
$img_url = str_replace($img_url_basename, wp_basename($thumb_file), $img_url);
$is_intermediate = true;
}
}
// Tenemos el tamaño real de la imagen, pero podríamos necesitar restringirlo más si content_width es más estrecho
if ( $img_url) {
return array( $img_url, 0, 0, $is_intermediate );
}
return false;
}
Conecta la nueva función al hook image_downsize
:
/* Eliminar las referencias de alto y ancho de la función image_downsize.
* Hemos añadido un nuevo parámetro, por lo que la prioridad es 1, como siempre,
* y los nuevos parámetros son 3.
*/
add_filter( 'image_downsize', 'myprefix_image_downsize', 1, 3 );
También no olvides escalar las imágenes correctamente en tu CSS:
/* Tamaños y alineaciones de imágenes */
.entry-content img,
.comment-content img,
.widget img {
max-width: 97.5%; /* Imágenes fluidas para entradas, comentarios y widgets */
}
img[class*="align"],
img[class*="wp-image-"] {
height: auto; /* Asegurar que las imágenes con atributos height y width añadidos por WordPress se escalen correctamente */
}
img.size-full {
max-width: 97.5%;
width: auto; /* Evitar el estiramiento de imágenes a tamaño completo con atributos height y width en IE8 */
}
Espero que esto te ayude.
Saludos,

Esto elimina los atributos srcset
, sizes
y otros atributos de imágenes responsivas desafortunadamente. :( Esta es mi solución actual, que reconstruye los atributos nuevamente: https://gist.github.com/cibulka/8e2bf16b0f55779af590472ae1bf9239

Puedes obtener la URL de la imagen destacada y añadirla a tu contenido manualmente, por ejemplo:
<?php
$image = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), 'thumbnail' );
if ($image) : ?>
<img src="<?php echo $image[0]; ?>" alt="Imagen destacada" title="Imagen destacada del artículo" />
<?php endif; ?>

Por alguna razón la clase wp-post-image
no estaba incluida en mis imágenes. En su lugar tenía algo como wp-image-26
. Tuve que usar otro selector pero la idea funcionó.

Solución CSS:
img[class*="align"], img[class*="wp-image-"] {
width: auto;
height: auto;
}
Esto permite que las imágenes responsive funcionen como deberían, mientras mantienes los atributos de ancho y alto en el elemento img, lo que probablemente sea mejor para navegadores antiguos, rendimiento y/o para pasar validadores HTML.
Solución PHP:
Esto evitará la adición de atributos width/height en cualquier medio nuevo añadido en el editor de WP (a través de 'Añadir medio'). ¡Atención, también puede afectar a tus pies de foto de imágenes!
function remove_widthHeight_attribute( $html ) {
$html = preg_replace( '/(width|height)="\d*"\s/', "", $html );
return $html;
}
add_filter( 'post_thumbnail_html', 'remove_widthHeight_attribute', 10 );
add_filter( 'image_send_to_editor', 'remove_widthHeight_attribute', 10 );

Añade este fragmento de código: (Aplica también al nuevo editor Gutenberg)
// Función para deshabilitar los atributos de ancho y alto en las imágenes
function disable_add_img_width_height( $value, $image, $context, $attachment_id ) {
// Verifica si el contexto es el contenido principal, extracto o contenido de widget
if ($context === 'the_content' || $context === 'the_excerpt' || $context === 'widget_text_content')
return false; // Devuelve falso para deshabilitar los atributos
return $value; // En otros contextos, devuelve el valor original
}
// Añade el filtro para modificar los atributos de imagen
add_filter( 'wp_img_tag_add_width_and_height_attr', 'disable_add_img_width_height', 10, 4 );

Aquí hay una solución simple en Javascript:
<script type="text/javascript">
jQuery.noConflict();
jQuery(document).ready(function($){
$('img').each(function(){
$(this).removeAttr('width')
$(this).removeAttr('height');
});
});
</script>
Esto puede usarse para apuntar a imágenes específicas en lugar de todas las imágenes usando un selector CSS, así:
$('.miclaseespecifica img').each(function()
