Das Arbeiten mit Anhängen in WordPress ist immer etwas aufregend für mich, da ich dort immer etwas Neues über deren Handhabung lerne. In diesem Fall benötigte ich die Anhangs-ID eines Anhangs über eine seiner Vorschaubild-URLs.

Es gibt eine Funktion attachment_url_to_postid, die ähnlich funktioniert wie url_to_postid, aber spezifisch für Anhänge ist (da url_to_postid hier nicht funktioniert). So dachte ich zuerst, ich kann einfach meine Vorschaubild-URL als Parameter an attachment_url_to_postid übergeben und es funktioniert. Aber das tat es leider nicht.

Nachdem ich in den Code dieser Funktion geschaut habe, war es für mich sehr schnell klar: diese Funktion prüft nur die Beitragsmeta-Felder von _wp_attached_file, was immer nur die originale Anhangsdatei beinhaltet. So gibt es an dieser Stelle keine Unterstützung für Vorschaubilder.

Meine Lösung

Meine Herangehensweise, um diese Funktion dennoch zu verwenden, ist das Entfernen der Auflösung vom Dateinamen, um das Original zu bekommen. Angenommen, ich habe das Bild my-image.jpg hochgeladen, würde mein Vorschaubild my-image-1024x768.jpg heißen. Daher müsste ich das -1024x768 vom Dateinamen entfernen, direkt vor der Dateiendung.

Mein Code sieht demnach so aus:

$image = 'https://domain.tld/wordpress/2023/05/my-image-1024x768.jpg';
// replace dimensions from image
$image = \preg_replace( '/\-\d+x\d+\.(jpe?g|png|gif)$/', '.$1', $image );
$post_id = \attachment_url_to_postid( $image );
Code-Sprache: PHP (php)

Ich ersetze jede Kombination von -<digits>x<digits> direkt vor der Dateiendung. Da ich in meinem Fall die möglichen Dateiendungen kenne, habe ich diese direkt im regulären Ausdruck hinzugefügt, um die Anzahl der möglichen fehlerhaften Ersetzungen gering zu halten.

Diese Lösung ersetzt die Anhangs-URL mit der URL der ursprünglich hochgeladenen Datei und kann dann in attachment_url_to_postid verwendet werden, um die Anhangs-ID zurückzubekommen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert