Hochgeladene Dateien und Bilder in WordPress Medien umbenennen
WordPress bietet bislang keine Möglichkeit den Namen von bereits existierenden bzw. hochgeladenen Dateien wie bspw. Bildern umzubenennen. Es kann aber durchaus sinnvoll sein einen bestehenden Dateinamen umzubenennen, wenn dieser aus SEO-Sicht nicht zutreffend oder einfach nur kryptisch ist.
Was ist zuvor zu beachten?
Hochgeladene Medien können bereits im Inhalt eines Beitrags eingefügt oder in weiteren Feldwerten enthalten sein. Das bedeutet, dass der alte Dateiname (also die Datei-URL) fest an mehreren Stellen verankert bzw. gespeichert sein kann. Wenn wir einen Dateinamen umbenennen, dann wird an allen Stellen, an denen zuvor der alte Dateiname genutzt wurde, keine Datei mehr gefunden. Im Fall eines Bildes, wird dies dazu führen, dass Bilder nicht mehr angezeigt werden können.
Wie können wir das lösen?
Die folgende Lösung schafft einen Weg WordPress-Dateien ohne Plugin umzubenennen und somit eine bestehende Datei aus den Medien-Ordnern zu ersetzen.
Hinweis: Dieser Beitrag stellt eine Herangehensweise vor, welche wir für das Umbenennen von Dateien in den WordPress Medien verwenden können. Allerdings ist diese Lösung aktuell noch nicht zu Ende gedacht. Was ist noch offen?
- Gelöst: Alte Dateinamen im bestehenden „post_content“ durch neuem Dateinamen ersetzen.
- Offen: Wenn zukünftig ein neues Bild hochgeladen wird, dass den selben Dateinamen hat, wie ein altes zuvor umbenanntes Bild, dann ist die GUID die selbe. Evtl. könnte das zu Problemen führen.
- Offen: Die GUID sollte niemals umbenannt werden, siehe hier.
Ein neues Feld zum umbenennen des Dateinamens zu WordPress Medien hinzufügen
Mit Hilfe des WordPress-Filters attachment_fields_to_edit
können wir ein neues Feld zu den WordPress Medien hinzufügen. In diesem Fall ist das ein Textfeld, worin wir einen neuen Dateinamen festlegen können.
Den neuen Dateinamen speichern
Für das Speichern des neuen Dateinamens verwenden wir den WordPress-Filter attachment_fields_to_save
. Hier übergeben wir unseren neuen Dateinamen und führen die Funktion wordpress_rename_media_file()
zum Umbenennen des Dateinamens aus.
Bestehende WordPress Datei umbenennen
Für das eigentliche Umbenennen des Dateinamens, nutzen wir die Funktion wordpress_rename_media_file()
. Darin sorgen wir dafür das z.B. die alten generierten Bildgrößen gelöscht werden und neue Bildgrößen, anhand des neuen Dateinamen, erstellt werden. Des Weiteren wird jeder Beitrag nach der alten Datei-URL durchsucht und durch die neue Datei-URL ersetzt. So bekommen wir später keine Probleme, dass bspw. Bilder mit dem alten Dateinamen nicht mehr angezeigt werden können.
Was gilt es zu beachten?
Das Umbenennen von bestehenden WordPress Medien ist wahrscheinlich nicht zufällig von Haus aus NICHT möglich. Denn es gibt weitere Fallstricke!
Wie ersetzen wir alte Dateinamen in weiteren Feldwerten?
Dateinamen können abseits des Beitragsinhalts auch in weiteren Feldwerten existieren. Bspw. kann die Bilddatei eines Logos in den Theme-Optionen definiert sein oder in sonstigen Plugin-gesteuerten Feldern. Mit der oberen Lösung werden all diese zusätzlichen Dateinamen NICHT automatisch umbenannt.
Meines Erachtens gibt es hier keine Allzwecklösung, da Feldwerte an verschiedenen Stellen von unterschiedlichen Plugins verwendet werden können.
Was ist mit der GUID?
WordPress vergibt für jede Medien-Datei (Attachment) eine eindeutige ID (GUID). Dieser eindeutige Identifier wird zu bestimmten Zwecken genutzt und sollte nach eigenen Angaben von WordPress, keinesfalls geändert werden! WordPress verwendet für die GUID den Dateinamen, weil dieser immer eindeutig ist, da eine und die selbe Datei innerhalb eines Ordners nicht zweimal existieren kann.
Beim Umbenennen eines Dateinamens, wird die GUID nicht verändert. Das bedeutet, dass die GUID immer noch die alte Datei-URL beinhalten wird, auch wenn diese Datei bereits einen neuen Namen hat. Das Aktualisieren der GUID ist aus den oben genannten Gründen selbst mit wp_update_post( 'guid' => $new_guid );
nicht möglich.
Im Grunde ist das nicht problematisch. Da die GUID nicht für die Anzeige der Dateien herangezogen wird. ABER! Haben wir Datei „bild.jpg“ bereits in „bild_neu.jpg“ umbenannt und laden zukünftig erneut eine Datei mit dem Namen „bild.jpg“ innerhalb des selben Monats hoch, in welchem wir auch die ältere Ausgangsdatei umbenannt haben, dann haben „bild_neu.jpg“ und „bild.jpg“ die selbe GUID, was eigentlich nicht vorkommen dürfte.
Warum innerhalb des selben Monats? Weil jede GUID auch den Jahres- und Monatspfad „../wp-content/uploads/2019/12/dateiname.jpg“ enthält, in dem die Datei hochgeladen wurde. Das Organisieren von Medien-Dateien in Jahres- und Monats-Unterordnern ist zudem in den Einstellungen deaktivierbar, was das Problem mit derselben GUID verschlimmert.
Welche Nachteile bzw. Auswirkungen das haben kann, ist ungewiss!
Die GUID dennoch aktualisieren.
Die folgende Methode, ermöglicht auch das Umbenennen der GUID auf einen anderen Weg. Auch wenn ich davon abrate, möchte ich diese Möglichkeit dennoch vorstellen:
Vielleicht hast du Verbesserungsvorschläge ohne eine Lösung für die benannten Fallstricke, dann hinterlasse doch einfach einen Kommentar.