wake-up-neo.com

So beschneiden Sie ein Bild von einer Bildquelle in einer bestimmten Größe

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?

4
Eh Jewel

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.

3
Jack Johansson