Come disattivare le immagini responsive in WordPress 4.4?

10 dic 2015, 12:15:04
Visualizzazioni: 36.5K
Voti: 39

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?

7
Commenti

Anche io vorrei saperlo - ha fatto un gran casino sul nostro sito web!

Chris Chris
10 dic 2015 12:24:35

Ho provato vari modi senza successo ma volevo lasciare la domanda principale aperta a nuovi approcci. Il tentativo più drastico è stato commentare la riga add_filter in default-filters.php che ritenevo responsabile: //add_filter( 'the_content', 'wp_make_content_images_responsive' );

brokkr brokkr
10 dic 2015 12:27:06

Invece di disabilitare le immagini responsive, dovresti cercare cosa sta mischiando HTTP e HTTPS perché la funzionalità delle immagini responsive non è l'origine del problema. Tutti i miei siti sono sotto HTTPS e il srcset viene creato correttamente da WordPress. Come hai eseguito la migrazione da HTTP a HTTPS?

cybmeta cybmeta
10 dic 2015 12:29:56

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

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

Sembra tutto chiarito ora. Scusate il doppio post - il problema principale (srcset dovrebbe usare https) è stato risolto anche nella discussione che ho avviato su wordpress.org (https://wordpress.org/support/topic/responsive-images-src-url-is-https-srcset-url-is-http-no-images-loaded) A mia difesa, la discussione sembrava abbastanza morta dopo un giorno o due quando è stata rianimata. Grazie a joemcgill che l'ha risolta lì.

brokkr brokkr
12 dic 2015 17:51:30

Basta aggiungere questo plugin e il tuo problema è risolto amico https://wordpress.org/support/view/plugin-reviews/disable-responsive-images

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

Pensavo avessero risolto questo problema nel core di WP di recente?

NoBugs NoBugs
27 dic 2016 21:07:54
Mostra i restanti 2 commenti
Tutte le risposte alla domanda 5
5
43

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.

10 dic 2015 12:59:50
Commenti

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.

brokkr brokkr
12 dic 2015 17:47:02

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

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

Felice che ti sia stato d'aiuto.

birgire birgire
8 mar 2017 10:27:05

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

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

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

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

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

16 dic 2015 03:17:20
Commenti

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

Jake Jake
17 mar 2016 15:56:06

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

Jake Jake
19 mar 2016 00:49:22

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.

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

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

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

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

Jake Jake
17 lug 2017 00:11:37

Questo causa avvisi di validazione "L'attributo sizes può essere specificato solo se è presente anche l'attributo srcset":

Michael Rogers Michael Rogers
1 nov 2017 21:16:22
Mostra i restanti 1 commenti
0

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

10 dic 2015 18:13:17
2

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.

11 dic 2015 02:41:43
Commenti

create_function()

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

E riguardo a create_function()? Mi piacerebbe che le mie risposte funzionassero anche in PHP 5.2.

Otto Otto
12 dic 2015 00:46:31
0

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.

16 dic 2015 17:18:59