Das Plugin „Externe Dateien für Mediathek“ hat sich im Laufe der Zeit aus einer kleinen Anwendung zu einem umfangreichen Tool entwickelt. Es kann helfen zahlreiche unterschiedlichste Anwendungsfälle in Zusammenhang mit Dateien in WordPress zu lösen. Hier erkläre ich das Konzept dahinter um zu zeigen, welche Möglichkeiten es für sehr viele WordPress-basierte Projekte bieten kann.
Die Entstehung
Um das Konzept zu verstehen, muss man etwas von der Entstehungsgeschichte nachvollziehen können. Vor einigen Jahren hatte ich das Plugin Download Liste mit Icons entwickelt. Dieses ermöglicht die Ausgabe von Dateien in einer komfortablen Liste im Block Editor als Block. Man ordnet Dateien aus der Mediathek dem Block zu und zeigt diese dann an.
Die Anwender dieses Plugins waren interessanterweise vielfach im wissenschaftlichen Bereich tätig. Hier ging es z.B. um PDF-basierte Dokumentationen von Veröffentlichungen. Alles kein Problem mit dem Plugin. Aber wissenschaftliche Institutionen speichern solche Dokumente gerne zentral an einer Stelle um sie ggfs. auch aktualisieren und gleichzeitig auf dem Weg verteilen zu können. Daraus ergab sich eine für mich völlig neue Anforderung:
Anwender meines Plugins benötigten eine Möglichkeit um URLs in den Block der Download Liste zu hinterlegen 😒
Ich versuchte erst mit ReactReact JavaScript-Programmbibliothek zur Erstellung von webbasierten Benutzeroberflächen dafür eine Möglichkeit zu schaffen, damit man das direkt am Block einfügen kann. Ich scheiterte jedoch, was vor allem an der Nutzeroberfläche, die hierfür schlicht nicht geeignet war, lag.
Das Grundkonzept
Zunächst schaute ich mich um, ob im WordPress Plugin Repository sich irgendwo ein Plugin genau dafür finden lassen würde. Ich fand interessanterweise ein paar kleine, die aber extrem veraltet waren. Sie ermöglichten z.B. den Download einer Datei per FTPFTP File Transfer Protocol in die Mediathek. War nicht ganz das was ich suchte. Und die Programmierweise dieser Plugins entsprach auch weder meinen Ansprüchen an Qualität noch denen des WordPress Repositories, die sich in letzter Zeit durchaus zum Positiven gewandelt hat.
Also entstand ein neues Plugin: Externe Dateien für die Mediathek. Ich erweiterte mit diesem die Mediathek um die Möglichkeit URLs für Dateien anzugeben, die dann das Projekt integriert werden konnten.
Zunächst habe ich die Dateien von den angegebenen URLs einfach heruntergeladen und in der Mediathek gespeichert. Das entsprach aber nicht dem oben beschriebenen Ziel die Dateien extern zu belassen. Also schaute ich was zu tun wäre, um externe Dateien als solche in der Mediathek zu speichern – und es funktionierte erstaunlich gut. Ich kam also zu meinem Grundkonzept für das Plugin:
Die URL von externen Dateien in der Mediathek hinterlegen, nicht die Datei selbst.
Warum gerade URL-basiert?
Dateien im Internet sind alle mit einer URL referenziert. Diese kann direkt erreichbar sein oder mit irgendeinem Zugriffsschutz versehen. Aber sie haben alle URLs.
Warum nicht den Einbetten Block verwenden?
Mit diesem kann man wunderbare externe Inhalte in die eigene Website integrieren. Aber es ermöglicht eben nicht die Verlinkung in meinem Block für die Download Liste.
Die Evolution des Plugins
Damit hatte ich das eigentliche Ziel, externe URLs beim Plugin Download Liste mit Icons verwenden zu können, durchaus erreicht. Klar, ein weiteres Plugin was man installieren müsste – aber wer es braucht wird es nutzen. Und so begann ich damit es Stück für Stück zu erweitern, meist aus eigenem Wunsch heraus, da ich es als technische Herausforderung ansehe. Inzwischen übersteigt es weit das ursprüngliche Ansinnen, eine Unterstützung für mein anderes Plugin zu sein, beide sind jedoch weiterhin miteinander kompatibel.
Protokolle
URLs verwenden natürlich auch unterschiedliche Protokolle. HTTPHTTP Hypertext Transfer Protocol kennt jeder, FTP sagt einigen auch noch etwas. Daneben gibt es noch HTTPSHTTPS Hypertext Transfer Protocol Secure, SFTPSFTP Secure File Transfer Protocol, FTPSFTPS Methode zur Verschlüsselung des File Transfer Protocol (FTP), SSH und andere (sogar so etwas wie Gopher). Die meisten sind zugangsgeschützt, manche nur optional. Ich begann also damit diese Protokolle im Plugin mit zu unterstützen.
Besonders hilfreich bei dieser Entwicklung ist, dass WordPress selbst dafür eigentlich schon alles mitbringt. Mit den auf WP_Filesystem() basierenden Objekten kann man problemlos verschiedenste Protokolle abfragen. Einige setzen natürlich serverseitig entsprechende PHPPHP PHP ist eine Skriptsprache mit einer an C und Perl angelehnten Syntax, die hauptsächlich zur Erstellung dynamischer Webseiten oder Webanwendungen verwendet wird. https://de.wikipedia.org/wiki/PHP-Module voraus. Aber ich musste nicht das Rad neu erfinden.
Und so kam recht zügig die Unterstützung für viele verschiedene Protokolle in den URLs mit dazu.
Dateitypen
WordPress selbst lässt bei einer frischen Installation nur den Upload von bestimmten Dateitypen zu. PDF, JPG, PNG und andere gehören zum Alltag der meisten Anwender. Ich wollte mit meinem Plugin diese Regeln nicht erweitern, da Externe Dateien für die Mediathek sich um externe Dateien und nicht zur Verwaltung von Dateitypen kümmern soll – dafür gibt es andere sehr gute Plugins. Also greift mein Plugin auf diese Liste von WordPress zu (die andere Plugins erweitern können) um zu prüfen, ob eine externe Datei zulässig ist. In den Einstellungen vom Plugin kann man zumindest noch wählen, welches Format, was WordPress unterstützt, man für externe Dateien verwenden möchte.
Dienste
Da bis hierhin das Plugin überaus zufriedenstellend lief, begann ich größer zu denken. Was verwenden WordPress-Anwender zum Verwalten ihrer Dateien abseits von WordPress, die sie dann aber in ihr Projekt integrieren möchten? Wie könnte ich denen die Arbeit erleichtern? Ich kam auf verschiedenste Dienstleister die es ermöglichen Dateien zu verwalten. Und wie greift man von extern auf diese zu? Ja, per API.
Ich begann also Stück für Stück Dienstleister wie DropboxDropbox Online-Datenspeicher, Google Drive, Google Cloud Storage und AWS S3 ins Plugin einzubinden. Auch hier handelt es sich wieder um URLs von Dateien die ich per API erhielt – somit kein Problem für die Basis-Funkionen von „Externe Dateien für die Mediathek“. Der Hauptaufwand bei der Implementierung bestand darin die jeweilige API kennenzulernen und anzubinden.
Da ich selbst diese Plattformen selten bis gar nicht nutze betrat ich für mich selbst Neuland – aber genau das fasziniert mich an der IT: die Möglichkeiten die man hat ohne von ihnen zu wissen, und sie dann kennenzulernen.
Komfortable Dateiansichten mit React
Bei all dem was ich bis hierher beschrieben habe, handelt es sich um Tätigkeiten im Hintergrund. Es entstehen Objekte und Aufgaben im Plugin die keine visuelle Ausgabe für den Anwender im Backend von WordPress haben. Aber ich musste für die Dienste dem Anwender auch eine Oberfläche bereitstellen damit er sieht was für Dateien dort liegen und aus diesen auswählen kann.
So entstand ein React-basiertes Tool names „Easy Directory Listing for WordPress“ was bei GitHubGitHub Softwareentwicklungsplattform als composercomposer anwendungsorientierter Paketmanager für PHP Package bereitsteht. Hierüber wird jegliches Dateilisting im Backend von meinem Plugin gehandhabt. Es stellt links einen Baum bereit, rechts die Dateiliste. Optionen zum Import und einiges anderes sind auch vorhanden.

Kompatibilität mit anderen Plugins
Ein großes Manko der Mediathek in WordPress ist weiterhin, dass man Dateien dort nicht anordnen kann. Sie liegen einfach nur ohne Kategorisierung und Einordnung da. Lösen kann man das mit verschiedensten Plugins:
- https://de.wordpress.org/plugins/filebird/
- https://de.wordpress.org/plugins/ifolders/
- https://de.wordpress.org/plugins/folders/
- https://de.wordpress.org/plugins/real-media-library-lite/
.. nur um einige zu nennen, es gibt noch mehr. Da mir bewusst ist, dass Anwender meines Plugins möglicherweise die externen Dateien auch einordnen möchten, schuf ich also eine Kompatibilität zu sehr vielen von diesen Drittanbieter-Plugins. Dadurch kann man beim Import festlegen, dass und wo man eine Datei einordnen möchte, wenn man ein Plugin zur Einordnung von Dateien in der Mediathek verwendet und „Externe Dateien für die Mediathek“ dafür eine Unterstützung mitbringt.
Zusätzlich dazu besteht auch eine Kompatibilität mit WooCommerce bei dessen CSV-basiertem Import sowie verschiedenen anderen Plugins, die mit Dateien in der Mediathek hantieren.
Synchronisation
Nachdem der manuelle Weg für die verschiedensten Quellen so problemlos funktionierte, begann ich auch einen automatischen Weg zu überlegen. Der Anwendungsfall könnte z.B. sein, dass man eine Galerie automatisch aktualisieren möchte – einfach nur, weil in einer externen Quelle eine neue Datei liegt. Auch das kann das Plugin inzwischen und bietet es für nahezu alle externe Quellen an.
Export von Dateien
Und da ich schon bei Dateihandling bin: bisher konnte das Plugin ja nur Dateien in die Mediathek holen. Was aber, wenn man auch mal eine Datei aus der Mediathek extern speichern möchte? Der klassische Fall vom Auslagern von Dateien (Offloading). Da ich schon die Verbindung zu den Quellen hatte, war es ein einfaches nun auch den Export zu ermöglichen.
Abschließend
Mein oben formuliertes Konzept hat sich durch die vielfältigen Möglichkeiten, die das Plugin inzwischen bietet, gewandelt. Nach über 3 Jahren Entwicklung würde ich es Ende 2025 folgendermaßen nennen:
Optimierung der Verwaltung von Dateien in der Mediathek mit externen Quellen.
Schreibe einen Kommentar