Wie deaktiviere ich responsive Images in WP 4.4?

37

Ich habe meine 4.3.1-Installation erfolgreich auf alle https konvertiert. Nach dem Update auf 4.4. Ich habe ein Problem mit dem neuen srcsetAttribut. Während das srcAttribut für Bilder mit https festgelegt wird, srcsetlautet das Attribut http. Dies führt dazu, dass der Browser überhaupt kein Bild anzeigt.

Während ich auf eine bessere Lösung warte, möchte ich die Einstellung des srcsetAttributs insgesamt deaktivieren, sodass alle Bilder nur ein srcAttribut haben. Wie mache ich das?

brokkr
quelle
2
Das würde ich auch gerne wissen - es hat gerade ein richtiges Durcheinander auf unserer Website gebracht!
Chris
Ich habe verschiedene Wege ohne Erfolg versucht, aber ich wollte die Hauptfrage für neue Ansätze offen lassen. Der drastischste meiner Versuche war das add_filterdefault-filters.php//add_filter( 'the_content', 'wp_make_content_images_responsive' );
Auskommentieren
1
Anstatt reaktionsschnelle Bilder zu deaktivieren, sollten Sie nach einer Mischung aus HTTP und HTTPS suchen, da die Funktionalität reaktionsschneller Bilder nicht die Ursache des Problems ist. Alle meine Webseiten stehen unter HTTPS und die srcsetwird von WordPress korrekt erstellt. Wie sind Sie von HTTP auf HTTPS umgestiegen?
Cybmeta
Siehe core.trac.wordpress.org/ticket/25449 .
Artem Russakovskii
Scheint ziemlich gut, jetzt aufgeklärt. Entschuldigung für das doppelte Posten - das Root-Problem (srcset sollte https verwenden) wurde auch in dem Thread behoben, den ich bei wordpress.org ( wordpress.org/support/topic/… ) gestartet habe also als es wiederbelebt wurde. Danke an joemcgill, der es dort gelöst hat.
Brokkr

Antworten:

43

Hier sind einige Dinge, die Sie versuchen könnten, die Unterstützung für responsive Images in 4.4 zu entfernen:

/**
 * 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' );

aber wie von @cybmeta erwähnt, kann das Problem woanders liegen.

Erzwinge https srcset

Sie könnten mit dem wp_calculate_image_srcsetFilter ein wenig debuggen und sogar diese schnelle Lösung ausprobieren :

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 );

um das URL-Schema auf https. Ein anderer Ansatz wäre, es schemenlos zu haben //.

Weitere set_url_scheme()Optionen finden Sie im Codex :

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

Aber Sie sollten versuchen, tiefer zu graben und die Ursache zu finden.

Aktualisieren:

Wir könnten früher aus der wp_calculate_image_srcset()Funktion aussteigen mit:

add_filter( 'wp_calculate_image_srcset_meta', '__return_empty_array' );

Verwenden Sie dann die Filter wp_calculate_image_srcsetoder max_srcset_image_width.

Ebenfalls gemäß Ticket Nr. 41895 aktualisiert , um ein leeres Array anstelle von false / null zurückzugeben.

birgire
quelle
Nur um zu bestätigen, dass beide Ansätze wie für mich vorgesehen funktionierten, entfernte das deaktivierte srcset srcset (und brachte so 'feste' Bilder zurück) und die erzwungene Änderung der srcset-URLs durch https. Bei beiden Ansätzen wurde die Warnung vor gemischten Inhalten entfernt.
Brokkr
4
Die add_filter( 'wp_calculate_image_srcset_meta', '__return_null' );Lösung hat bei mir sehr gut funktioniert. Danke!
Tim Bowen
Freut mich zu hören, dass es geholfen hat.
Birgire
Dies führt zu Warnungen bei einem Validator: "Das Attribut" sizes "kann nur angegeben werden, wenn das Attribut" srcset "ebenfalls vorhanden ist."
Michael Rogers
Es hört sich so an, als hätten Sie srcset herausgefiltert, aber nicht das Größenattribut. @MichaelRogers
birgire
13

Der einfachste und sauberste Weg, dies zu tun, ist einfach dies:

add_filter( 'wp_calculate_image_srcset', '__return_false' );

Um das zu wiederholen, was die meisten anderen Leute sagen, ist srcset eine gute Idee und die Zukunft (jetzt bewährte Methode). Wenn Sie jedoch eine schnelle Lösung benötigen, um Ihre Site funktionsfähig zu halten, erledigt das obige Snippet die Aufgabe, ohne sie zu hacken.

Quelle: WP Core Blog

Trevor
quelle
5
Verwenden Sie __return_falsestattdessen disable_srcseteinfach, wp hat Funktionen für solche einfachen Aufgaben.
Jake
3
Und Sie beide könnten Ihren Code verbessern, indem Sie keine neue Funktion erstellen, nur um false zurückzugeben. WordPress bietet dafür Funktionen. codex.wordpress.org/Function_Reference/_return_false
Jake
1
Das ist die richtige Lösung. Diese Funktion ist ungefähr so ​​gut durchdacht wie wp_autop. Ich verwende <Bild>, um die künstlerische Leitung sowie die reaktionsschnellen Bilder zu ermitteln, und dies spricht das nicht an.
Peter Wooster
1
@Jake auf einer Skala von 1 bis 10: "Erstellen einer neuen Funktion, um nur" false "zurückzugeben" fügt WordPress etwa -2 Aufblähung hinzu. Selbstdokumentierender Code, den jeder (nicht nur ein WP-Entwickler) verstehen kann, hat einen bestimmten Wert.
Mahmoud Al-Qudsi
1
@ MahmoudAl-Qudsi Weil '__return_false' so verwirrend ist? In dieser Diskussion in einem WordPress-Forum geht es darum, eine WordPress-Funktion auszuschalten. Es ist nicht verrückt, einfach die standardmäßigen, sehr einfachen und gut dokumentierten WordPress-Rückgabefunktionen zu verwenden, die in WordPress integriert sind, um dies zu tun. Die Tatsache, dass die Funktion "return_false" heißt, ist ziemlich selbstdokumentierend. Versuchen Sie und raten Sie, was es tut?
Jake
7

Höchstwahrscheinlich wird srcsetHTTPS in den URLs Ihrer Attribute nicht korrekt angezeigt, da die URLs für alle Bilder mit dem Wert der Option siteurl in Ihrer Tabelle wp_options erstellt werden. Wenn Sie Ihr Frontend über HTTPS bedienen, sollten Sie diese Werte auch ändern (über Einstellungen> Allgemein).

Hier ist das entsprechende Ticket für das WordPress-Issue-Tracking-System: https://core.trac.wordpress.org/ticket/34945

joemcgill
quelle
5

Dadurch wird der srcset-Code deaktiviert, indem alle Bilder entfernt werden, die breiter als 1 Pixel sind.

add_filter( 'max_srcset_image_width', create_function( '', 'return 1;' ) );

Auf lange Sicht sollten Sie versuchen, das eigentliche Problem zu beheben. Dies funktioniert jedoch, wenn Sie eine schnelle Lösung benötigen.

Otto
quelle
1
create_function()
Pieter Goosen
1
Was ist mit create_function ()? Ich mag es, wenn meine Antworten auch in PHP 5.2 funktionieren.
Otto
2

Stellen Sie unter Einstellungen / Allgemein sicher, dass Ihre WordPress-Adresse (URL) und Ihre Site-Adresse (URL) auf https://IhreDomäne.com eingestellt sind

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

Joe McGill, der dazu beigetragen hat, reaktionsschnelle Bilder in WordPress zu integrieren, antwortete auch im Forenthread und bestätigte, dass Crees Vorschlag korrekt ist: „Wenn Sie HTTPS im Front-End ausführen, sollten Sie die URLs für Ihr Zuhause und Ihre Site ändern URL in Einstellungen> Allgemein, damit sie das HTTPS-Schema verwenden “, sagte er.

user2969141
quelle