Come posso disabilitare le immagini responsive in WP 4.4?


37

Ho convertito con successo la mia installazione 4.3.1 in tutte le https. Dopo l'aggiornamento a 4.4. Ho un problema con il nuovo srcsetattributo. Mentre l' srcattributo per le immagini è impostato tramite https, l' srcsetattributo è http. Questo fa sì che i browser non visualizzino alcuna immagine.

In attesa di una soluzione migliore, desidero disabilitare l'impostazione srcsetdell'attributo in modo che tutte le immagini abbiano solo un srcattributo. Come lo faccio?


2
Vorrei anche saperlo: ha appena fatto un casino nel nostro sito!
Chris,

Ho provato vari modi senza successo, ma volevo lasciare la domanda principale aperta a nuovi approcci. Il più drastico dei miei tentativi è stato quello di commentare la add_filterdefault-filters.php//add_filter( 'the_content', 'wp_make_content_images_responsive' );
frase

1
Invece di disabilitare le immagini reattive, dovresti cercare ciò che sta mescolando HTTP e HTTPS perché la funzionalità delle immagini reattive non è l'origine del problema. Tutti i miei siti Web sono in HTTPS e srcsetsono stati creati correttamente da WordPress. Come sei passato da HTTP a HTTPS?
cybmeta,


Sembra piuttosto ben chiarito ora. Ci scusiamo per il doppio post - il problema di root (srcset dovrebbe usare https) è stato risolto anche nel thread che ho iniziato su wordpress.org ( wordpress.org/support/topic/… ) A mio avviso il thread sembrava piuttosto morto dopo un giorno o così quando è stato rianimato. Grazie a joemcgill che l'ha risolto laggiù.
brokkr,

Risposte:


43

Ecco alcune cose che potresti provare a rimuovere il supporto di immagini reattive in 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' );

ma come menzionato da @cybmeta il problema potrebbe essere altrove.

Forza https srcset

È possibile eseguire il debug con il wp_calculate_image_srcsetfiltro e provare anche 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 averlo senza schemi //.

Consulta il Codice per altre set_url_scheme()opzioni:

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

Ma dovresti provare a scavare più a fondo e trovare la causa principale.

Aggiornare:

Potremmo salvarci prima dalla wp_calculate_image_srcset()funzione con:

add_filter( 'wp_calculate_image_srcset_meta', '__return_empty_array' );

quindi utilizzando i filtri wp_calculate_image_srcseto max_srcset_image_width.

Anche aggiornato secondo il ticket n. 41895 , per restituire un array vuoto anziché false / null.


Giusto per confermare che entrambi gli approcci hanno funzionato come ciascuno era previsto per me, disabilita srcset ha rimosso srcset (e quindi ha riportato immagini "fisse") e la forza https ha cambiato gli URL srcset in https. Entrambi gli approcci hanno rimosso l'avviso di contenuto misto.
brokkr,

4
La add_filter( 'wp_calculate_image_srcset_meta', '__return_null' );soluzione ha funzionato perfettamente per me. Grazie!
Tim Bowen,

Sono contento di sentirlo aiutato.
Birgire

Ciò genererà avvisi su un validatore: "L'attributo size può essere specificato solo se è presente anche l'attributo srcset".
Michael Rogers,

Sembra che tu abbia filtrato srcset ma non l'attributo size. @MichaelRogers
birgire

13

Il modo più semplice e pulito per farlo è semplicemente questo:

add_filter( 'wp_calculate_image_srcset', '__return_false' );

Per fare eco a ciò che dice la maggior parte delle altre persone, srcset è una buona idea ed è il futuro (le migliori pratiche ora), ma se hai bisogno di una soluzione rapida per far funzionare il tuo sito, lo snippet sopra fa il lavoro senza alcun hacking.

fonte: WP Core Blog


5
Basta usare __return_falseinvece di disable_srcset, wp ha funzioni per compiti semplici come quello.
Jake,

3
Ed entrambi potreste migliorare il vostro codice non creando una funzione completamente nuova solo per restituire false. WordPress fornisce funzioni per farlo. codex.wordpress.org/Function_Reference/_return_false
Jake

1
Questa è la soluzione giusta Questa funzione è pensata come wp_autop. Uso <picture> per ottenere la direzione artistica e le immagini reattive, e questo non risolve il problema.
Peter Wooster,

1
@Jake su una scala da 1 a 10, "la creazione di una nuova funzione solo per restituire false" aggiunge circa -2 bloat a WordPress. Il codice autocompensante che chiunque (non solo un dev WP) può capire ha un certo valore.
Mahmoud Al-Qudsi,

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

7

Molto probabilmente, il motivo per cui gli URL nei tuoi srcsetattributi mostrano erroneamente HTTPS è perché gli URL per tutte le immagini sono creati usando il valore dell'opzione siteurl nella tabella wp_options. Se stai offrendo il tuo front-end su HTTPS, dovresti anche modificare questi valori (tramite Impostazioni> Generale).

Ecco il biglietto relativo sul sistema di tracciamento dei problemi di WordPress: https://core.trac.wordpress.org/ticket/34945


5

Ciò 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 provare a risolvere il problema reale. Tuttavia, funziona se hai bisogno di una soluzione rapida.



1
Che dire di create_function ()? Mi piace che le mie risposte funzionino anche in PHP 5.2.
Otto

2

In Impostazioni / Generale assicurati che il tuo indirizzo WordPress (URL) e l'indirizzo del sito (URL) siano impostati su https://tuodominio.com

Vedi http://wptavern.com/how-to-fix-images-not-loading-in-wordpress-4-4-while-using-ssl

Joe McGill, che ha contribuito a guidare lo sforzo di ottenere immagini reattive in WordPress, ha anche risposto nel thread del forum e ha confermato che il suggerimento di Cree è corretto: “Se stai eseguendo HTTPS sul front-end, dovresti cambiare gli URL per la tua casa e il tuo sito URL in Impostazioni> Generale in modo che utilizzino lo schema HTTPS ", ha detto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.