Cum dezactivez imaginile responsive în WordPress 4.4?

10 dec. 2015, 12:15:04
Vizualizări: 36.5K
Voturi: 39

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?

7
Comentarii

Aș dori să știu și eu acest lucru - a creat o mare mizerie pe site-ul nostru!

Chris Chris
10 dec. 2015 12:24:35

Am încercat diverse metode fără succes, dar am vrut să las întrebarea principală deschisă pentru noi abordări. Cea mai drastică încercare a mea a fost să comentez linia add_filter din default-filters.php pe care am crezut că este responsabilă: //add_filter( 'the_content', 'wp_make_content_images_responsive' );

brokkr brokkr
10 dec. 2015 12:27:06

În loc să dezactivezi imaginile responsive, ar trebui să cauți ce amestecă HTTP și HTTPS, deoarece funcționalitatea imaginilor responsive nu este originea problemei. Toate site-urile mele sunt sub HTTPS și srcset este creat corect de WordPress. Cum ai migrat de la HTTP la HTTPS?

cybmeta cybmeta
10 dec. 2015 12:29:56

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

Artem Russakovskii Artem Russakovskii
11 dec. 2015 14:47:53

Pare destul de clar acum. Îmi cer scuze pentru postarea dublă - problema principală (srcset ar trebui să folosească https) este de asemenea rezolvată în discuția pe care am inițiat-o pe wordpress.org (https://wordpress.org/support/topic/responsive-images-src-url-is-https-srcset-url-is-http-no-images-loaded) În apărarea mea, discuția părea destul de moartă după o zi sau două, când a fost reînviata. Mulțumiri lui joemcgill care a rezolvat-o acolo.

brokkr brokkr
12 dec. 2015 17:51:30

Doar adaugă acest plugin și problema ta este rezolvată, prietene https://wordpress.org/support/view/plugin-reviews/disable-responsive-images

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

Credeam că au rezolvat asta în nucleul WP recent?

NoBugs NoBugs
27 dec. 2016 21:07:54
Arată celelalte 2 comentarii
Toate răspunsurile la întrebare 5
5
43

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.

10 dec. 2015 12:59:50
Comentarii

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.

brokkr brokkr
12 dec. 2015 17:47:02

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

Tim Bowen Tim Bowen
10 ian. 2016 20:28:27

Mă bucur că a fost de ajutor.

birgire birgire
8 mar. 2017 10:27:05

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

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

Se pare că ai filtrat atributul srcset dar nu și atributul sizes. @MichaelRogers

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

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

16 dec. 2015 03:17:20
Comentarii

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

Jake Jake
17 mar. 2016 15:56:06

Ș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

Jake Jake
19 mar. 2016 00:49:22

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.

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

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

Mahmoud Al-Qudsi Mahmoud Al-Qudsi
16 iul. 2017 01:37:17

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

Jake Jake
17 iul. 2017 00:11:37

Aceasta cauzează avertismente de validare "Atributul sizes poate fi specificat doar dacă este prezent și atributul srcset":

Michael Rogers Michael Rogers
1 nov. 2017 21:16:22
Arată celelalte 1 comentarii
0

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

10 dec. 2015 18:13:17
2

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

11 dec. 2015 02:41:43
Comentarii

create_function()

Pieter Goosen Pieter Goosen
11 dec. 2015 07:16:08

Și despre create_function()? Îmi place ca răspunsurile mele să funcționeze și în PHP 5.2.

Otto Otto
12 dec. 2015 00:46:31
0

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

16 dec. 2015 17:18:59