¿Cómo deshabilito las imágenes receptivas en WP 4.4?

37

Convertí con éxito mi instalación 4.3.1 a todos los https. Después de actualizar a 4.4. Tengo un problema con el nuevo srcsetatributo. Mientras que el srcatributo para las imágenes se establece usando https, el srcsetatributo es http. Esto hace que los navegadores no muestren ninguna imagen en absoluto.

Mientras espero una mejor solución, deseo deshabilitar la configuración del srcsetatributo por completo para que todas las imágenes solo tengan un srcatributo. ¿Cómo puedo hacer eso?

brokkr
fuente
2
También me gustaría saber esto: ¡es un desastre de nuestro sitio web!
Chris
He intentado varias formas sin éxito, pero quería dejar la pregunta principal abierta a nuevos enfoques. El más drástico de mis intentos fue comentar la add_filterlínea en la que default-filters.phpcreo que soy responsable://add_filter( 'the_content', 'wp_make_content_images_responsive' );
brokkr
1
En lugar de deshabilitar las imágenes receptivas, debe buscar lo que está mezclando HTTP y HTTPS porque la funcionalidad de las imágenes receptivas no es el origen del problema. Todos mis sitios web están bajo HTTPS y srcsetWordPress lo creó correctamente. ¿Cómo migraste de HTTP a HTTPS?
cybmeta
Ver core.trac.wordpress.org/ticket/25449 .
Artem Russakovskii
Parece bastante bien aclarado ahora. Disculpas por la doble publicación: el problema raíz (srcset debe usar https) también se resuelve en el hilo que comencé de nuevo en wordpress.org ( wordpress.org/support/topic/… ) En mi defensa, el hilo parecía bastante muerto después de un día o entonces cuando fue revivido. Gracias a joemcgill que lo resolvió allí.
brokkr

Respuestas:

43

Aquí hay algunas cosas que podría intentar para eliminar el soporte de imagen sensible en 4.4:

/**
 * Disable responsive image support (test!)
 */

// Clean the up the image from 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 );

// Override the calculated image sizes
add_filter( 'wp_calculate_image_sizes', '__return_empty_array',  PHP_INT_MAX );

// Override the calculated image sources
add_filter( 'wp_calculate_image_srcset', '__return_empty_array', PHP_INT_MAX );

// Remove the reponsive stuff from the content
remove_filter( 'the_content', 'wp_make_content_images_responsive' );

pero como mencionó @cybmeta, el problema puede estar en otra parte.

Forzar https en srcset

Podrías hacer alguna depuración con el wp_calculate_image_srcsetfiltro 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 );

establecer el esquema de URL en https. Otro enfoque sería tenerlo sin esquemas //.

Echa un vistazo al Codex para otras set_url_scheme()opciones:

$source['url'] = set_url_scheme( $source['url'], null );        
$source['url'] = set_url_scheme( $source['url'], 'relative' );

Pero debes tratar de profundizar y encontrar la causa raíz.

Actualizar:

Podríamos rescatarnos antes de la wp_calculate_image_srcset()función con:

add_filter( 'wp_calculate_image_srcset_meta', '__return_empty_array' );

luego usando los filtros wp_calculate_image_srcseto max_srcset_image_width.

También actualizado de acuerdo con el ticket # 41895 , para devolver una matriz vacía en lugar de falso / nulo.

Birgire
fuente
Solo para confirmar que ambos enfoques funcionaron, ya que cada uno estaba destinado a mí, el deshabilitar srcset eliminó srcset (y, por lo tanto, trajo imágenes 'fijas') y la fuerza https cambió las URL de srcset a https. Ambos enfoques eliminaron la advertencia de contenido mixto.
brokkr
44
La add_filter( 'wp_calculate_image_srcset_meta', '__return_null' );solución funcionó muy bien para mí. ¡Gracias!
Tim Bowen
Me alegra saber que ayudó.
Birgire
Esto provocará advertencias en un validador: "El atributo de tamaños solo se puede especificar si el atributo srcset también está presente".
Michael Rogers
Parece que ha filtrado srcset pero no el atributo de tamaños. @MichaelRogers
birgire
13

La forma más simple y limpia de hacer esto es simplemente esto:

add_filter( 'wp_calculate_image_srcset', '__return_false' );

Sin embargo, para hacer eco de lo que la mayoría de la gente dice, srcset es una buena idea y es el futuro (mejor práctica ahora), pero si necesita una solución rápida para mantener su sitio funcionando, el fragmento anterior hace el trabajo sin ningún tipo de piratería.

fuente: WP Core Blog

Trevor
fuente
55
Simplemente use en __return_falselugar de disable_srcset, wp tiene funciones para tareas simples como esa.
Jake
3
Y ambos podrían mejorar su código al no hacer una función completamente nueva solo para devolver falso. WordPress proporciona funciones para hacer eso. codex.wordpress.org/Function_Reference/_return_false
Jake
1
Esta es la solución correcta. Esta característica está tan bien pensada como wp_autop. Uso <picture> para obtener dirección de arte, así como imágenes receptivas, y esto no aborda eso.
Peter Wooster,
1
@Jake en una escala del 1 al 10, "crear una nueva función solo para devolver falso" agrega aproximadamente -2 hinchazón a WordPress. El código autodocumentado que cualquier persona (no solo un desarrollador de WP) puede comprender es de cierto valor.
Mahmoud Al-Qudsi
1
@ MahmoudAl-Qudsi ¿Porque '__return_false' es tan confuso? Esta discusión, en un foro de WordPress, se trata de desactivar una función de WordPress. No es una locura usar las funciones de retorno de WordPress predeterminadas, muy básicas y bien documentadas, incorporadas en WordPress para hacer eso. El hecho de que la función se llame "return_false" es bastante autodocumentado. Intenta adivinar lo que hace?
Jake
7

Lo más probable es que la razón por la que las URL en sus srcsetatributos muestran HTTPS de forma incorrecta es porque las URL para todas las imágenes se crean utilizando el valor de la opción siteurl en su tabla wp_options. Si está sirviendo su front-end a través de HTTPS, también debe cambiar esos valores (a través de Configuración> General).

Aquí está el boleto relacionado en el sistema de seguimiento de problemas de WordPress: https://core.trac.wordpress.org/ticket/34945

joemcgill
fuente
5

Esto deshabilitará el código srcset al eliminar cualquier imagen de más de 1 píxel.

add_filter( 'max_srcset_image_width', create_function( '', 'return 1;' ) );

A la larga, debe intentar solucionar el problema real. Aún así, esto funciona si necesita una solución rápida.

Otón
fuente
1
create_function()
Pieter Goosen, el
1
¿Qué pasa con create_function ()? También me gustan mis respuestas para trabajar en PHP 5.2.
Otto
2

En Configuración / General, asegúrese de que su Dirección de WordPress (URL) y la Dirección del sitio (URL) estén configuradas en https://yourdomain.com

Ver 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 obtener imágenes receptivas en WordPress, también respondió en el hilo del foro y confirma que la sugerencia de Cree es correcta: "Si está ejecutando HTTPS en la parte frontal, debe cambiar las URL de su hogar y sitio". URL en Configuración> General para que usen el esquema HTTPS ”, dijo.

usuario2969141
fuente