Come disattivare le immagini responsive in WordPress 4.4?
Ho convertito con successo la mia installazione 4.3.1 completamente in HTTPS. Dopo l'aggiornamento alla versione 4.4 ho un problema con il nuovo attributo srcset
. Mentre l'attributo src
per le immagini è impostato usando HTTPS, l'attributo srcset
usa HTTP. Questo fa sì che i browser non visualizzino alcuna immagine.
In attesa di una soluzione migliore, vorrei disabilitare completamente l'impostazione dell'attributo srcset
in modo che tutte le immagini abbiano solo l'attributo src
. Come posso farlo?

Ecco alcune cose che potresti provare per rimuovere il supporto alle immagini responsive in 4.4:
/**
* Disabilita il supporto alle immagini responsive (test!)
*/
// Pulisce l'immagine da 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 );
// Sovrascrive le dimensioni calcolate delle immagini
add_filter( 'wp_calculate_image_sizes', '__return_empty_array', PHP_INT_MAX );
// Sovrascrive le sorgenti delle immagini calcolate
add_filter( 'wp_calculate_image_srcset', '__return_empty_array', PHP_INT_MAX );
// Rimuove gli elementi responsive dal contenuto
remove_filter( 'the_content', 'wp_make_content_images_responsive' );
ma come menzionato da @cybmeta il problema potrebbe essere altrove.
Forza https su srcset
Potresti fare qualche debug con il filtro wp_calculate_image_srcset
e persino provare questa soluzione rapida:
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 );
per impostare lo schema url su https
. Un altro approccio sarebbe quello di renderlo senza schema //
.
Consulta il Codex per altre opzioni di set_url_scheme()
:
$source['url'] = set_url_scheme( $source['url'], null );
$source['url'] = set_url_scheme( $source['url'], 'relative' );
Ma dovresti cercare di scavare più a fondo e trovare la causa principale.
Aggiornamento:
Potremmo uscire prima dalla funzione wp_calculate_image_srcset()
con:
add_filter( 'wp_calculate_image_srcset_meta', '__return_empty_array' );
quindi utilizzando i filtri wp_calculate_image_srcset
o max_srcset_image_width
.
Aggiornato anche in base al ticket #41895, per restituire un array vuoto invece di false/null.

Per confermare che entrambi gli approcci hanno funzionato come previsto per me, il disable srcset ha rimosso srcset (ripristinando così le immagini 'fisse') e il force https ha cambiato gli url srcset in https. Entrambi gli approcci hanno eliminato l'avviso di contenuto misto.

La soluzione add_filter( 'wp_calculate_image_srcset_meta', '__return_null' );
ha funzionato alla grande per me. Grazie!

Questo causerà avvisi su un validatore: "L'attributo sizes può essere specificato solo se è presente anche l'attributo srcset."

Il modo più semplice e pulito per farlo è semplicemente questo:
add_filter( 'wp_calculate_image_srcset', '__return_false' );
Per ribadire ciò che dicono molti altri, srcset è una buona idea ed è il futuro (migliore pratica attuale), ma se hai bisogno di una soluzione rapida per mantenere il tuo sito funzionante, lo snippet sopra fa il lavoro senza alcun hacking.
fonte: Blog WP Core

Usa semplicemente __return_false
invece di disable_srcset
, WordPress ha funzioni per compiti semplici come questo.

E entrambi potreste migliorare il vostro codice evitando di creare un'intera nuova funzione solo per restituire false. WordPress fornisce funzioni per farlo. https://codex.wordpress.org/Function_Reference/_return_false

Questa è la soluzione corretta. Questa funzionalità è pensata tanto bene quanto wp_autop. Io uso <picture> per ottenere sia l'art direction che le immagini responsive, e questa soluzione non lo risolve.

@Jake su una scala da 1 a 10, "creare una nuova funzione solo per restituire false" aggiunge circa -2 di gonfiore a WordPress. Codice auto-documentante che chiunque (non solo uno sviluppatore WP) possa capire ha un certo valore.

@MahmoudAl-Qudsi Perché '__return_false' è così confuso? Questa discussione, su un forum di WordPress, riguarda la disattivazione di una funzionalità di WordPress. Non è folle usare le funzioni di ritorno predefinite, molto basilari e ben documentate, integrate in WordPress per farlo. Il fatto che la funzione si chiami "return_false" è piuttosto auto-esplicativo. Prova a indovinare cosa fa?

Molto probabilmente, il motivo per cui gli URL negli attributi srcset
mostrano erroneamente HTTPS è perché gli URL di tutte le immagini sono costruiti utilizzando il valore dell'opzione siteurl nella tabella wp_options. Se stai servendo il front end tramite HTTPS, dovresti anche modificare quei valori (tramite Impostazioni > Generali).
Ecco il ticket correlato nel sistema di tracciamento dei problemi di WordPress: https://core.trac.wordpress.org/ticket/34945

Questo disabiliterà il codice srcset eliminando qualsiasi immagine più larga di 1 pixel.
add_filter( 'max_srcset_image_width', create_function( '', 'return 1;' ) );
A lungo termine, dovresti cercare di risolvere il problema reale. Tuttavia, questa soluzione funziona se hai bisogno di una soluzione rapida.


In Impostazioni/Generale assicurati che l'Indirizzo WordPress (URL) e l'Indirizzo del sito (URL) siano impostati su https://yourdomain.com
Vedi http://wptavern.com/how-to-fix-images-not-loading-in-wordpress-4-4-while-using-ssl
Joe McGill, che ha aiutato a guidare lo sforzo per introdurre le immagini responsive in WordPress, ha anche risposto nel thread del forum e conferma che il suggerimento di Cree è corretto: "Se stai utilizzando HTTPS sul frontend, dovresti cambiare gli URL per la tua home e l'URL del sito in Impostazioni > Generale in modo che utilizzino lo schema HTTPS," ha detto.
