Cum dezactivez imaginile responsive în WordPress 4.4?
Am reușit să convertesc cu succes instalarea WordPress 4.3.1 la HTTPS. După actualizarea la 4.4 am o problemă cu noul atribut srcset
. În timp ce atributul src
pentru imagini este setat folosind HTTPS, atributul srcset
folosește HTTP. Acest lucru face ca browserele să nu afișeze deloc imaginile.
În așteptarea unei soluții mai bune, doresc să dezactivez complet setarea atributului srcset
astfel încât toate imaginile să aibă doar atributul src
. Cum pot face acest lucru?

Iată câteva lucruri pe care le poți încerca pentru a elimina suportul pentru imagini responsive în versiunea 4.4:
/**
* Dezactivează suportul pentru imagini responsive (test!)
*/
// Curăță atributele imaginii din 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 );
// Suprascrie dimensiunile calculate ale imaginii
add_filter( 'wp_calculate_image_sizes', '__return_empty_array', PHP_INT_MAX );
// Suprascrie sursele calculate ale imaginii
add_filter( 'wp_calculate_image_srcset', '__return_empty_array', PHP_INT_MAX );
// Elimină elementele responsive din conținut
remove_filter( 'the_content', 'wp_make_content_images_responsive' );
dar așa cum a menționat @cybmeta, problema poate fi în altă parte.
Forțează https pe srcset
Poți face depanare cu filtrul wp_calculate_image_srcset
și poți încerca această soluție rapidă:
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 );
pentru a seta schema URL la https
. O altă abordare ar fi să o lași fără schemă //
.
Consultă Codex pentru alte opțiuni ale funcției set_url_scheme()
:
$source['url'] = set_url_scheme( $source['url'], null );
$source['url'] = set_url_scheme( $source['url'], 'relative' );
Dar ar trebui să încerci să investighezi mai profund pentru a găsi cauza principală.
Actualizare:
Am putea ieși mai devreme din funcția wp_calculate_image_srcset()
cu:
add_filter( 'wp_calculate_image_srcset_meta', '__return_empty_array' );
apoi folosind filtrele wp_calculate_image_srcset
sau max_srcset_image_width
.
De asemenea, actualizat conform tichetului #41895, pentru a returna un array gol în loc de false/null.

Doar pentru a confirma că ambele abordări au funcționat conform intenției pentru mine, dezactivarea srcset a eliminat srcset (și astfel a readus imaginile 'fixe'), iar forțarea https a schimbat URL-urile srcset în https. Ambele abordări au eliminat avertismentul de conținut mixt.

Soluția add_filter( 'wp_calculate_image_srcset_meta', '__return_null' );
a funcționat excelent pentru mine. Mulțumesc!

Acest lucru va provoca avertismente pe un validator: "Atributul sizes poate fi specificat doar dacă este prezent și atributul srcset."

Cea mai simplă și mai curată metodă de a face acest lucru este următoarea:
add_filter( 'wp_calculate_image_srcset', '__return_false' );
Pentru a repeta ceea ce spun majoritatea utilizatorilor, srcset este o idee bună și reprezintă viitorul (cea mai bună practică în prezent), dar dacă aveți nevoie de o soluție rapidă pentru a menține site-ul funcțional, fragmentul de mai sus face treaba fără a fi nevoie de hack-uri.
sursa: WP Core Blog

Folosește pur și simplu __return_false
în loc de disable_srcset
, WordPress are funcții pentru astfel de sarcini simple.

Și amândoi puteți îmbunătăți codul evitând crearea unei funcții noi doar pentru a returna false. WordPress oferă funcții pentru asta. https://codex.wordpress.org/Function_Reference/_return_false

Aceasta este soluția corectă. Această funcționalitate este la fel de bine gândită ca wp_autop. Eu folosesc <picture> pentru direcția artistică și imagini responsive, iar această soluție nu rezolvă acest aspect.

@Jake pe o scală de la 1 la 10, „crearea unei funcții noi doar pentru a returna false” adaugă aproximativ -2 complexitate inutilă WordPress. Codul auto-explicativ pe care oricine (nu doar un dezvoltator WP) îl poate înțelege are o anumită valoare.

@MahmoudAl-Qudsi Pentru că '__return_false' este atât de confuz? Această discuție, pe un forum WordPress, este despre dezactivarea unei funcționalități WordPress. Nu este ciudat să folosești funcțiile implicite, foarte simple și bine documentate, încorporate în WordPress pentru a face asta. Faptul că funcția se numește "return_false" este destul de auto-explicativ. Încearcă să ghicești ce face?

Cel mai probabil, motivul pentru care URL-urile din atributele srcset
afișează incorect HTTPS este pentru că URL-urile pentru toate imaginile sunt construite folosind valoarea opțiunii siteurl din tabelul wp_options. Dacă servești frontend-ul prin HTTPS, ar trebui să schimbi și acele valori (prin Setări > General).
Aici este tichetul relevant pe sistemul de urmărire a problemelor WordPress: https://core.trac.wordpress.org/ticket/34945

Acest lucru va dezactiva codul srcset prin eliminarea oricăror imagini mai late de 1 pixel.
add_filter( 'max_srcset_image_width', create_function( '', 'return 1;' ) );
Pe termen lung, ar trebui să încercați să reparați problema reală. Totuși, această soluție funcționează dacă aveți nevoie de o remediere rapidă.


În Setări/Generale, asigurați-vă că Adresa WordPress (URL) și Adresa site-ului (URL) sunt setate la https://yourdomain.com
Consultați http://wptavern.com/how-to-fix-images-not-loading-in-wordpress-4-4-while-using-ssl
Joe McGill, care a contribuit la implementarea imaginilor responsive în WordPress, a răspuns și el pe forum confirmând sugestia lui Cree: "Dacă utilizați HTTPS în front-end, ar trebui să modificați URL-urile pentru pagina principală și adresa site-ului în Setări > Generale astfel încât să folosească schema HTTPS", a declarat el.
