wake-up-neo.com

Warum gibt wp_get_attachment_image_src falsche Dimensionen zurück?

Ich verwende wp_get_attachment_image_src, um das srcset-Attribut eines img-Tags zu erstellen. In diesem Attribut möchte ich eine durch Kommas getrennte Liste von Bild-URLs zusammen mit den Bildbreiten ausgeben.

Mit den Medieneinstellungen Seite habe ich die Bildgrößen wie folgt konfiguriert:

  • Miniaturbildgröße: 150 x 150
  • Mittlere Größe: 640 x 480
  • Große Größe: 1024 x 768
  • Kleine Größe: 278 x 320

Die Funktion wp_get_attachment_image_src gibt die richtigen URLs und die richtigen Breiten für die Bildgrößen full, medium und small zurück. small ist eine benutzerdefinierte Größe, die ich mit add_image_size hinzugefügt habe.

Wenn ich wp_get_attachment_image_src( $image_id, 'large' ) aufrufe, sieht das zurückgegebene Array folgendermaßen aus:

array (
    0 => 'http://localhost/wp-content/uploads/2014/10/image-1024x768.jpg',
    1 => 640,
    2 => 480,
    3 => true,
)

Wenn Sie das Bild überprüfen, das sich unter dieser URL befindet, wird das Bild mit den richtigen Abmessungen angezeigt.

Gegenwärtig benutze ich die in PHP eingebaute Funktion getimagesize , um dieses Problem zu umgehen, aber dieser Funktionsaufruf dauert bedeutend länger als der bloße Zugriff auf den von wp_get_attachment_image_src zurückgegebenen Index:

Ohne getimagesize (mtime vor und nach der Ausführung):

  • "0.83761000 1415195440"
  • "0.83831600 1415195440"

Mit getimagesize:

  • '0.34808000 1415195635'
  • '0.35323900 1415195635'

Was kann ich tun, damit wp_get_attachment_image_src die richtigen Dimensionen zurückgibt?

2
BdN3504

Ich habe das gleiche Problem gefunden hier und die Lösung von dort funktioniert.

Die Lösung ist so einfach wie das Einfügen:

$content_width = 2000;// Value higher than your new 'large' width

in functions.php

Erklärung von dort kopiert (User Chip Bennett):

Ich glaube, Ihr Problem ist, dass der Wert für die globale Variable $ content_width (640px in Boilerplate und 584px in Twenty Eleven) geringer ist als die Breite, die Sie über Einstellungen -> Medien angeben.

WordPress überschreibt Ihre Benutzereinstellung mit dem themenspezifischen Wert. Dies ist tatsächlich sinnvoll, da ein Thema seine maximale Inhaltsbreite kennt und die Verwendung einer größeren Bildbreite als die, für die das Thema entworfen wurde, sehr wahrscheinlich das Layout des Themas stören würde.

Überprüfen Sie den Link oben, um auf seine vollständige Antwort zu verweisen.


Dies ist ein Link zum Underscores-Theme-Projekt, wo sie diesen Wert setzen.

4
Alvaro