WordPress Funktion: prüfen, ob Bild in gewünschter Größe existiert
WordPress bietet mit add_image_size() eine tolle Funktion, um einzelne Bildergrößen hinzuzufügen. Auf diese Funktion setzen wir sehr stark bei unseren Kundenwebsites. Jedoch haben wir immer ein und das selbe Problem. Fallbacks. Was passiert, wenn der Kunde zu kleine Fotos hochlädt, die das WordPress nicht verkleinert/bearbeitet? Standardmässig geben die gängigen WordPress-Funktionen wie wp_get_attachment_image(), get_the_post_thumbnail() dann die Original-URL des Bildes aus. Was aber, wenn man das nicht möchte?
Genau das passiert uns ständig. Gut, eine andere Ausgaben bei fehlendem Bild über eine if-Abfrage zu generieren ist kein Problem, aber wenn ich wissen will ob das Bild in der von mir gewünschten Größe existiert muss ich mir was einfallen lassen. Man könnte über die PHP Funktion getimagesize() die genaue Größe des Bildes auslesen und dann ebenfalls konditionieren. Das ist allerdings viel zu umständlich und zeitraubend.
Aus diesem Grund haben wir uns folgende kleine Funktion geschrieben:
function image_has_size($img,$size){
$image = wp_get_attachment_image_src($img, $size);
return $image[3];
}
Was macht diese Funktion genau?
Sie ruft die WordPress Funktion wp_get_attachment_image_src() auf. Diese hat nämlich eine sehr wichtige, jedoch oft nicht beachtete Ausgabe. Und zwar gibt sie ein Array mit der URL des Bildes in der gewünschten Größe (falls vorhanden!), die Breite, die Höhe UND (bool) true oder false aus, ob das Bild in dieser Größe existiert oder nicht.
Aus diesem Array hole ich mir genau die boolsche Ausgabe und gebe sie aus.
So gibt mir die Funktion richtig oder falsch aus – schön lesbar und kompakt.
Ich weiss, im Grunde brauche ich dafür keine einzelne neue Funktion, aber jedes mal in meinen Templates if(wp_get_attachment_image_src(‚ID‘,’IMAGE_SIZE‘)[3]): stehen zu haben finde ich nicht sonderlich les- und nachvollziehbar. Vor allem wenn man bedenkt, dass man seine Templates erst nach Monaten oder Jahren wieder nochmal anpackt… Ich möchte mir dann nicht die Frage stellen was die Funktion nun da genau macht. Daher schön klar if(image_has_size(‚ID‘,’IMAGE_SIZE‘)): und ich weiss „OK, hat das Bild AB Größe XY? Wenn ja, tue dies. Wenn nein, jenes.“
Benutzung
Füge das Snippet einfach in deine functions.php ein. Schon kannst du sie überall in deinen Templates nutzen.
Die Funktion benötigt IMMER die ID (int) des gewünschten Bildes plus die über add_image_size() angelegte Bildgröße (string).
Beispiel
Das folgende Beispiel prüft, ob das Artikelbild (featured image) in ausreichender (large) Größe vorliegt. Falls nicht, wird das Pixelbar Logo angezeigt :-)
if(image_has_size(get_post_thumbnail_id(),'large')):
the_post_thumbnail('large');
else:
echo '<img src="https://www.pixelbar.be/wp-content/themes/pavpix/img/logo_pixelbar.png" alt="Pixelbar" />';
endif;