¿Cómo deshabilitar las imágenes responsive en WP 4.4?
Convertí exitosamente mi instalación 4.3.1 a HTTPS completo. Después de actualizar a 4.4, tengo un problema con el nuevo atributo srcset
. Mientras que el atributo src
para las imágenes está configurado usando HTTPS, el atributo srcset
usa HTTP. Esto causa que los navegadores no muestren ninguna imagen.
Mientras espero una mejor solución, deseo deshabilitar completamente la configuración del atributo srcset
para que todas las imágenes solo tengan el atributo src
. ¿Cómo puedo hacer esto?

Aquí hay algunas cosas que podrías intentar para eliminar el soporte de imágenes responsivas en 4.4:
/**
* Deshabilitar el soporte de imágenes responsivas (¡prueba!)
*/
// Limpiar la imagen de wp_get_attachment_image()
add_filter( 'wp_get_attachment_image_attributes', function( $attr )
{
if( isset( $attr['sizes'] ) )
unset( $attr['sizes'] );
if( isset( $attr['srcset'] ) )
unset( $attr['srcset'] );
return $attr;
}, PHP_INT_MAX );
// Anular los tamaños de imagen calculados
add_filter( 'wp_calculate_image_sizes', '__return_empty_array', PHP_INT_MAX );
// Anular las fuentes de imagen calculadas
add_filter( 'wp_calculate_image_srcset', '__return_empty_array', PHP_INT_MAX );
// Eliminar lo responsivo del contenido
remove_filter( 'the_content', 'wp_make_content_images_responsive' );
pero como mencionó @cybmeta, el problema puede estar en otro lugar.
Forzar https en srcset
Podrías hacer algunas pruebas con el filtro wp_calculate_image_srcset
e incluso probar esta solución rápida:
add_filter( 'wp_calculate_image_srcset', function( $sources )
{
foreach( $sources as &$source )
{
if( isset( $source['url'] ) )
$source['url'] = set_url_scheme( $source['url'], 'https' );
}
return $sources;
}, PHP_INT_MAX );
para establecer el esquema de URL como https
. Otro enfoque sería dejarlo sin esquema //
.
Consulta el Codex para otras opciones de set_url_scheme()
:
$source['url'] = set_url_scheme( $source['url'], null );
$source['url'] = set_url_scheme( $source['url'], 'relative' );
Pero deberías tratar de investigar más a fondo y encontrar la causa raíz.
Actualización:
Podríamos salir antes de la función wp_calculate_image_srcset()
con:
add_filter( 'wp_calculate_image_srcset_meta', '__return_empty_array' );
y luego usar los filtros wp_calculate_image_srcset
o max_srcset_image_width
.
También actualizado según el ticket #41895, para devolver un array vacío en lugar de false/null.

Solo para confirmar que ambos enfoques funcionaron como se pretendía para mí, el disable srcset eliminó srcset (y así devolvió las imágenes 'fijas') y el force https cambió las URLs de srcset a https. Ambos enfoques eliminaron la advertencia de contenido mixto.

La solución add_filter( 'wp_calculate_image_srcset_meta', '__return_null' );
funcionó muy bien para mí. ¡Gracias!

Esto causará advertencias en un validador: "El atributo sizes solo puede especificarse si también está presente el atributo srcset."

La forma más simple y limpia de hacer esto es simplemente esta:
add_filter( 'wp_calculate_image_srcset', '__return_false' );
Para reiterar lo que la mayoría está diciendo, srcset es una buena idea y es el futuro (mejor práctica actualmente), pero si necesitas una solución rápida para mantener tu sitio funcionando, el fragmento anterior hace el trabajo sin necesidad de hacks.
fuente: Blog de WP Core

Simplemente usa __return_false
en lugar de disable_srcset
, WordPress tiene funciones para tareas simples como esa.

Y ambos podrían mejorar su código evitando crear una función completa solo para devolver falso. WordPress proporciona funciones para hacer eso. https://codex.wordpress.org/Function_Reference/_return_false

Esta es la solución correcta. Esta característica está tan bien pensada como wp_autop. Yo uso <picture> para obtener dirección de arte además de imágenes responsivas, y esto no soluciona eso.

@Jake en una escala del 1 al 10, "crear una nueva función solo para devolver falso" añade aproximadamente -2 de inflamiento a WordPress. El código auto-documentado que cualquiera (no solo un desarrollador de WP) puede entender tiene un cierto valor.

@MahmoudAl-Qudsi ¿Acaso '__return_false' es tan confuso? Esta discusión, en un foro de WordPress, trata sobre desactivar una característica de WordPress. No es una locura simplemente usar las funciones de retorno predeterminadas, muy básicas y bien documentadas, integradas en WordPress para hacer eso. El hecho de que la función se llame "return_false" es bastante auto-explicativo. ¿Adivina qué hace?

Lo más probable es que la razón por la cual las URLs en tus atributos srcset
se muestran incorrectamente con HTTPS es porque las URLs de todas las imágenes se construyen usando el valor de la opción siteurl en tu tabla wp_options. Si estás sirviendo tu front-end con HTTPS, deberías también cambiar esos valores (a través de Ajustes > Generales).
Aquí está el ticket relacionado en el sistema de seguimiento de problemas de WordPress: https://core.trac.wordpress.org/ticket/34945

Esto deshabilitará el código srcset eliminando cualquier imagen más ancha de 1 píxel.
add_filter( 'max_srcset_image_width', create_function( '', 'return 1;' ) );
A largo plazo, deberías intentar solucionar el problema real. Aún así, esto funciona si necesitas una solución rápida.


En Ajustes/General asegúrate de que tu Dirección de WordPress (URL) y Dirección del sitio (URL) estén configuradas como https://tudominio.com
Consulta http://wptavern.com/how-to-fix-images-not-loading-in-wordpress-4-4-while-using-ssl
Joe McGill, quien ayudó a liderar el esfuerzo para incluir imágenes responsivas en WordPress, también respondió en el hilo del foro y confirma que la sugerencia de Cree es correcta: "Si estás ejecutando HTTPS en el frontend, deberías cambiar las URLs para tu home y la URL del sitio en Ajustes > General para que usen el esquema HTTPS", dijo.
