Kann ich eine URL eines Bildes verwenden, um den Anhang oder die Beitrags-ID dieses Bildes in der Datenbank zu finden?
Hier ist die Situation:
Ich gehe in einer Schleife alle "img" -Tags durch, die in meinem Beitragsinhalt von "a" -Tags umgeben sind. Wenn das src-Attribut des 'img'-Tags nicht mit dem href-Attribut des äußeren' a'-Tags übereinstimmt, möchte ich das 'img'-Tag ersetzen. Wenn sich das zu entfernende 'img' in der Galerie befindet, möchte ich diesen Beitrag löschen und dann mein Ersatz-'img 'an seine Stelle setzen. Ich habe versucht, eine Funktion wie diese zu verwenden:
function find_image_post_id($url) {
global $wpdb;
$postid = $wpdb->get_var($wpdb->prepare("SELECT DISTINCT ID FROM $wpdb->posts WHERE guid='$url'"));
if ($postid) {
return $postid;
}
return false;
}
Dies ist anscheinend nicht richtig, da die Anleitung ironischerweise nicht global eindeutig ist. Ich hatte (früher im selben Skript) eine Datei mit demselben Namen hochgeladen (warum? Weil sie eine höhere Auflösung hatte und ich versuche, niedrig aufgelöste Versionen desselben Bildes zu ersetzen) und obwohl WordPress das Bild unter einem anderen Namen speichern wird Das Verzeichnis und die Guids waren identisch. (möglicherweise ein Bug).
Gibt es eine andere Technik, die ich verwenden kann?
quelle
Antworten:
Massiv verbesserte Funktion für bildlastiges Plugin entwickelt:
quelle
_wp_attached_file
und abfragen_wp_attachment_metadata
?Alle diese komplexen Funktionen können auf eine einfache Funktion reduziert werden:
attachment_url_to_postid ()
Sie müssen nur die Bild-URL analysieren, um die Anhang-ID abzurufen:
Das ist alles was du brauchst.
quelle
Ich habe Rarsts Code so geändert, dass Sie nur den Dateinamen anstelle des vollständigen Pfads verwenden können. Dies ist hilfreich, wenn Sie das Bild seitlich laden möchten, falls es nicht vorhanden ist. Derzeit funktioniert dies nur, wenn die Dateinamen eindeutig sind, aber ich werde später eine Hash-Prüfung hinzufügen, um bei Bildern mit demselben Dateinamen zu helfen.
quelle
Ok, ich habe die Antwort gefunden, die niemand im Netz hat, nach der ich seit Tagen gesucht habe. In meinem Fall funktioniert dies nur, wenn Ihr Theme oder Plugin verwendet.
WP_Customize_Image_Control()
Wenn SieWP_Customize_Media_Control()
das verwenden,get_theme_mod()
wird die ID und nicht die URL zurückgegeben.Für meine Lösung verwendete ich die neuere Version
WP_Customize_Image_Control()
Viele Beiträge in den Foren haben das
get_attachment_id()
was nicht mehr geht. ich benutzteattachment_url_to_postid()
Hier ist, wie ich es geschafft habe. Hoffe das hilft jemandem da draußen
Markup
quelle
Hier ist eine alternative Lösung:
Seit WP 4.0 haben sie eine Funktion eingeführt
attachment_url_to_postid()
, die sich ähnlich wie Ihre verhältfind_image_post_id()
Bitte überprüfen Sie diese URL als Referenz.
quelle