Ich habe das Bild src von Benutzereingaben über ein Metabox-Feld erhalten. Jetzt möchte ich dieses Bild in einer bestimmten Größe rendern. Genau wie beim Zuschneiden von WordPress-Bildern in einer bestimmten Größe.
Ich habe versucht, die Bild-ID vom Quellcode abzurufen, und dann die unten stehende Funktion verwendet, um den Quellcode mit einem Bild in der Größe abzurufen.
<?php
$img_id = get_image_id($img_src);
$sized_img_src = wp_get_attachment_image_src($img_id, 'image_size');
Und hier ist die Funktion get_image_id()
:
function get_image_id($image_url) {
global $wpdb;
$attachment = $wpdb->get_col($wpdb->prepare("SELECT ID FROM $wpdb->posts WHERE guid='%s';", $image_url ));
return $attachment[0];
}
Tatsächlich erhalte ich mit dieser Funktion keine Bild-IDs für hochgeladene Bilder. Wo ist das Problem?
WordPress hat eine Funktion, die ausschließlich für diesen Zweck entwickelt wurde. Mit der Funktion attachment_url_to_postid()
können Sie die ID eines Anhangs von seiner URL abrufen. Mit dieser ID können Sie die ID des Beitrags später abrufen.
Wenn Sie dies durch Schreiben einer MySQL-Abfrage tun möchten, würde ich jedoch vorziehen, stattdessen den Dateinamen in meta_value
zu suchen:
$basename = basename ($image_url);
$sql = "SELECT post_id FROM {$wpdb->postmeta} WHERE meta_value = '$basename '";
$id = $wpdb->get_var($sql);
GUID-Spalten werden in der Datenbank fest codiert, sobald Sie einen Beitrag veröffentlichen. Wenn Sie also einen Beitrag auf localhost veröffentlichen, sieht ein Beispiel GUID folgendermaßen aus:
http://localhost/wp-content/uploads/my-image.jpg
Sie werden jedoch nach einer online URL Ihres Bildes suchen, indem Sie Folgendes verwenden:
$wpdb->get_col($wpdb->prepare("SELECT ID FROM $wpdb->posts WHERE guid='%s';", $image_url ));
Was natürlich nichts zurückgibt. Sie können jedoch LIKE
zusammen mit basename verwenden:
$img_name = basename ($image_url);
$wpdb->get_col($wpdb->prepare("SELECT ID FROM $wpdb->posts WHERE guid LIKE '%s';", $img_name ));
Welches ist irgendwie das gleiche wie der erste Ansatz.