¿Cómo deshabilitar las imágenes responsive en WP 4.4?

10 dic 2015, 12:15:04
Vistas: 36.5K
Votos: 39

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?

7
Comentarios

También me gustaría saber esto: ¡ha hecho un completo desastre en nuestro sitio web!

Chris Chris
10 dic 2015 12:24:35

He probado varias formas sin éxito, pero quería dejar la pregunta principal abierta a nuevos enfoques. El intento más drástico fue comentar la línea add_filter en default-filters.php que creía responsable: //add_filter( 'the_content', 'wp_make_content_images_responsive' );

brokkr brokkr
10 dic 2015 12:27:06

En lugar de desactivar las imágenes responsivas, deberías buscar qué está mezclando HTTP y HTTPS porque la funcionalidad de imágenes responsivas no es el origen del problema. Todos mis sitios web están bajo HTTPS y el srcset es creado correctamente por WordPress. ¿Cómo migraste de HTTP a HTTPS?

cybmeta cybmeta
10 dic 2015 12:29:56

Ver https://core.trac.wordpress.org/ticket/25449.

Artem Russakovskii Artem Russakovskii
11 dic 2015 14:47:53

Parece bastante aclarado ahora. Disculpas por el doble posteo - el problema raíz (srcset debería usar https) también está resuelto en el hilo que inicié en wordpress.org (https://wordpress.org/support/topic/responsive-images-src-url-is-https-srcset-url-is-http-no-images-loaded) En mi defensa, el hilo parecía bastante muerto después de un día más o menos cuando fue revivido. Gracias a joemcgill quien lo resolvió allí.

brokkr brokkr
12 dic 2015 17:51:30

Solo añade este plugin y tu problema estará resuelto, amigo https://wordpress.org/support/view/plugin-reviews/disable-responsive-images

Mandeep Maan Mandeep Maan
12 feb 2016 07:43:10

¿Pensé que esto lo habían arreglado recientemente en el núcleo de WP?

NoBugs NoBugs
27 dic 2016 21:07:54
Mostrar los 2 comentarios restantes
Todas las respuestas a la pregunta 5
5
43

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.

10 dic 2015 12:59:50
Comentarios

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.

brokkr brokkr
12 dic 2015 17:47:02

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

Tim Bowen Tim Bowen
10 ene 2016 20:28:27

Me alegra saber que te ayudó.

birgire birgire
8 mar 2017 10:27:05

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

Michael Rogers Michael Rogers
1 nov 2017 21:17:29

Parece que has filtrado srcset pero no el atributo sizes. @MichaelRogers

birgire birgire
1 nov 2017 23:53:21
6
13

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

16 dic 2015 03:17:20
Comentarios

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

Jake Jake
17 mar 2016 15:56:06

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

Jake Jake
19 mar 2016 00:49:22

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.

Peter Wooster Peter Wooster
10 may 2016 14:40:34

@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.

Mahmoud Al-Qudsi Mahmoud Al-Qudsi
16 jul 2017 01:37:17

@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?

Jake Jake
17 jul 2017 00:11:37

Esto causa advertencias de validación "El atributo sizes solo puede especificarse si también está presente el atributo srcset":

Michael Rogers Michael Rogers
1 nov 2017 21:16:22
Mostrar los 1 comentarios restantes
0

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

10 dic 2015 18:13:17
2

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.

11 dic 2015 02:41:43
Comentarios

create_function()

Pieter Goosen Pieter Goosen
11 dic 2015 07:16:08

¿Qué hay acerca de create_function()? Me gusta que mis respuestas funcionen también en PHP 5.2.

Otto Otto
12 dic 2015 00:46:31
0

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.

16 dic 2015 17:18:59