Filtro para eliminar atributos de dimensiones de imágenes
Estoy trabajando en un sitio basado en una plantilla CSS de ancho fluido que establece un ancho máximo en las imágenes según el ancho de la columna que las contiene, y necesito eliminar los atributos de dimensiones inline width y height que WordPress agrega a las imágenes.
Lo estoy haciendo con mis imágenes destacadas con este filtro:
add_filter( 'post_thumbnail_html', 'remove_thumbnail_dimensions', 10, 3 );
function remove_thumbnail_dimensions( $html, $post_id, $post_image_id ) {
// Elimina los atributos width y height del HTML
$html = preg_replace( '/(width|height)=\"\d*\"\s/', "", $html );
return $html;
}
Sé que puedo aplicar el mismo filtro a the_content, si es necesario. Pero ¿hay una mejor manera de hacer esto?

¡Gracias a todos!
El filtro image_send_to_editor era el que estaba buscando... gracias @t31os por señalarlo.
Aquí están mis funciones ahora.
add_filter( 'post_thumbnail_html', 'remove_thumbnail_dimensions', 10 );
add_filter( 'image_send_to_editor', 'remove_thumbnail_dimensions', 10 );
function remove_thumbnail_dimensions( $html ) {
$html = preg_replace( '/(width|height)=\"\d*\"\s/', "", $html );
return $html;
}
Esto elimina los atributos de dimensiones en línea de las imágenes recuperadas con the_post_thumbnail()
, y evita que esos atributos se agreguen a nuevas imágenes añadidas al editor. No los elimina de las imágenes recuperadas mediante wp_get_attachment_image
u otras funciones relacionadas (no hay hooks allí), pero esos casos pueden procesarse en los archivos de plantilla cuando sea necesario.

Tuve que eliminar la \s de la expresión regular. Después de eso, funcionó bien. Creo que fue porque no tenía un espacio después de la última comilla en la configuración de altura.

@MattSlay ¿Soy solo yo el que tiene un problema con modificar permanentemente el contenido del sitio? Un tema responsivo no debería tener que modificar el contenido del sitio web para que se formatee correctamente. Voto por eliminar el filtro de image_send_to_editor
y en su lugar agregarlo a the_content
- como en esta publicación de blog. Esto separa la lógica de presentación del contenido.

@BFTrick - Parece una cuestión de contexto para mí. Para un tema responsivo, estaría de acuerdo contigo porque no puedes depender de que el contenido existente haya sido procesado de esta manera, y no sabes si el próximo tema instalado necesitará esos atributos de dimensión.
En mi caso, estaba construyendo una aplicación donde el tema era integral al contenido, así que elegí el método menos intensivo en procesamiento de procesar las imágenes cuando se agregaban por primera vez. Pero haces un buen punto.

Modifiqué un poco este script. ¡Gracias por la ayuda!
add_filter( 'post_thumbnail_html', 'remove_thumbnail_dimensions', 10 );
add_filter( 'image_send_to_editor', 'remove_thumbnail_dimensions', 10 );
// Solo para el framework Genesis
add_filter( 'genesis_get_image', 'remove_thumbnail_dimensions', 10 );
// También elimina los tamaños de imagen adjuntos
add_filter( 'the_content', 'remove_thumbnail_dimensions', 10 );
function remove_thumbnail_dimensions( $html ) {
$html = preg_replace( '/(width|height)=\"\d*\"\s/', "", $html );
return $html;
}

Sin embargo, ten cuidado. Filtrar the_content también afectará a los videos de YouTube y cualquier otro atributo de ancho/alto.

si defines un tamaño de imagen en function.php como "gallery"
add_image_size( 'gallery', 200, 120, true );
puedes eliminar el ancho y alto de un tamaño de imagen específico como "gallery":
add_filter( 'post_thumbnail_html', 'remove_thumbnail_dimensions', 10, 4 );
function remove_thumbnail_dimensions( $html, $post_id, $post_image_id,$post_thumbnail) {
if ($post_thumbnail=='gallery'){
$html = preg_replace( '/(width|height)=\"\d*\"\s/', "", $html );
}
return $html;
}

Aplicar ese filtro a the_content
lo activará para todo el contenido. Esto será efectivo, pero podría afectar el rendimiento y tiempo de carga de tu sitio. Sería mejor si le indicaras a WordPress que simplemente no inserte las etiquetas de ancho y alto en línea cuando insertas las imágenes en primer lugar.
Desafortunadamente, los scripts que realmente insertan la imagen están construidos en JavaScript e interactúan con el editor wysiwyg TinyMCE. Podría haber una forma de conectarse directamente, pero no usando las llamadas estándar add_filter()
.

@t31os - ¡Creo que eso es exactamente lo que estaba buscando! No sé por qué no había visto ese hook antes.

Bueno, ciertamente espero que te ayude, parece que podría ser la solución... cuéntanos cómo te va y dinos si funcionó. :)

@t31os ¡Sí, eso funcionó! ¡Gracias! Lo publicaré como respuesta, a menos que lo hagas primero.
