{"id":451,"date":"2026-01-06T10:00:00","date_gmt":"2026-01-06T09:00:00","guid":{"rendered":"https:\/\/plugins.thomaszwirner.de\/?p=451"},"modified":"2026-03-05T17:01:27","modified_gmt":"2026-03-05T16:01:27","slug":"the-plugin-concept","status":"publish","type":"post","link":"https:\/\/plugins.thomaszwirner.de\/en\/external-files-in-the-media-library\/the-plugin-concept\/","title":{"rendered":"The plugin concept"},"content":{"rendered":"<p class=\"is-style-text-subtitle is-style-text-subtitle--1\">The \u201eExternal files for media library\u201c plugin has evolved over time from a small application into a comprehensive tool. It can help to solve many different use cases in connection with files in WordPress. Here I explain the concept behind it to show the possibilities it can offer for many WordPress-based projects.<\/p>\n\n\n<h2 class=\"wp-block-heading\" id=\"die-entstehung\">The origin<\/h2>\n\n\n<p>To understand the concept, you need to understand something of the history of its creation. A few years ago, I had the plugin <a href=\"https:\/\/plugins.thomaszwirner.de\/en\/plugin\/download-listen-block-with-icons\/\">Download list with icons<\/a> entwickelt. Dieses erm\u00f6glicht die Ausgabe von Dateien in einer komfortablen Liste im Block Editor. Man ordnet Dateien aus der Mediathek dem Block zu und zeigt diese dann an.<\/p>\n\n\n\n<p>Die Anwender dieses Plugins sind interessanterweise vielfach im wissenschaftlichen Bereich t\u00e4tig. Hier geht es z.B. um PDF-basierte Dokumentationen von Ver\u00f6ffentlichungen. 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\u00f6nnen. Daraus ergab sich eine f\u00fcr mich v\u00f6llig neue Anforderung:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Users of my plugin needed a way to add URLs to the download list block \ud83d\ude12<\/p>\n<\/blockquote>\n\n\n\n<p>I first tried with <span tabindex='0' class='glossary-item-container'>React<span class='glossary-item-hidden-content'><span class='glossary-item-header'>React<\/span> <span class='glossary-item-description'>JavaScript program library for the creation of web-based user interfaces<\/span><\/span><\/span> to create a way of inserting this directly into the block. However, I failed, mainly due to the user interface, which was simply not suitable for this.<\/p>\n\n\n<h2 class=\"wp-block-heading\" id=\"das-grundkonzept\">The basic concept<\/h2>\n\n\n<p>First of all, I looked around to see if there was a plugin somewhere in the WordPress plugin repository for this very purpose. Interestingly, I found a few small ones, but they were extremely outdated. For example, they enabled the download of a file via <span tabindex='0' class='glossary-item-container'>FTP<span class='glossary-item-hidden-content'><span class='glossary-item-header'>FTP<\/span> <span class='glossary-item-description'>File Transfer Protocol<\/span><\/span><\/span> in the media library. It wasn't quite what I was looking for. And the way these plugins were programmed didn't meet my quality standards or those of the WordPress repository, which has changed for the better in recent times.<\/p>\n\n\n\n<p>So a new plugin was created: <em>External files in the media library<\/em>. Ich erweiterte mit diesem die Mediathek um die M\u00f6glichkeit URLs f\u00fcr Dateien anzugeben, die dann im Projekt wie normale Medien-Dateien verwendet werden konnten.<\/p>\n\n\n\n<p>Initially, I simply downloaded the files from the URLs provided and saved them in the media library. However, this did not correspond to the goal described above of leaving the files external. So I looked at what I could do to save external files as such in the media library - and it worked surprisingly well. So I came up with my basic concept for the plugin:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Store the URL of external files in the media library, not the file itself.<\/p>\n<\/blockquote>\n\n\n\n<details class=\"wp-block-details is-layout-flow wp-block-details-is-layout-flow\"><summary>Why URL-based?<\/summary>\n<p>Dateien im Internet sind alle mit einer URL referenziert. Diese kann direkt erreichbar oder mit irgendeinem Zugriffsschutz versehen sein. Aber sie haben alle URLs.<\/p>\n<\/details>\n\n\n\n<details class=\"wp-block-details is-layout-flow wp-block-details-is-layout-flow\"><summary>Warum nicht den &#8222;Einbetten&#8220; Block verwenden?<\/summary>\n<p>This allows you to integrate wonderful external content into your own website. But it does not enable the linking in my block for the download list.<\/p>\n<\/details>\n\n\n<h2 class=\"wp-block-heading\" id=\"die-evolution-des-plugins\">The evolution of the plugin<\/h2>\n\n\n<p>So I had the actual goal of adding external URLs to the plugin <em>Download list with icons<\/em> verwenden zu k\u00f6nnen, durchaus erreicht. Klar, ein weiteres Plugin was man installieren m\u00fcsste &#8211; aber wer es braucht wird es nutzen. Und so begann ich damit es St\u00fcck f\u00fcr St\u00fcck zu erweitern, meist aus eigenem Wunsch heraus, da ich es f\u00fcr mich als technische Herausforderung ansehe. Inzwischen \u00fcbersteigt es weit das urspr\u00fcngliche Ansinnen, eine Unterst\u00fctzung f\u00fcr mein anderes Plugin zu sein &#8211; beide sind jedoch weiterhin miteinander kompatibel.<\/p>\n\n\n<h3 class=\"wp-block-heading\" id=\"protokolle\">Protocols<\/h3>\n\n\n<p>URLs naturally also use different protocols. <span tabindex='0' class='glossary-item-container'>HTTP<span class='glossary-item-hidden-content'><span class='glossary-item-header'>HTTP<\/span> <span class='glossary-item-description'>Hypertext Transfer Protocol<\/span><\/span><\/span> is familiar to everyone, and FTP still means something to some. There are also <span tabindex='0' class='glossary-item-container'>HTTPS<span class='glossary-item-hidden-content'><span class='glossary-item-header'>HTTPS<\/span> <span class='glossary-item-description'>Hypertext Transfer Protocol Secure<\/span><\/span><\/span>, <span tabindex='0' class='glossary-item-container'>SFTP<span class='glossary-item-hidden-content'><span class='glossary-item-header'>SFTP<\/span> <span class='glossary-item-description'>Secure File Transfer Protocol<\/span><\/span><\/span>, <span tabindex='0' class='glossary-item-container'>FTPS<span class='glossary-item-hidden-content'><span class='glossary-item-header'>FTPS<\/span> <span class='glossary-item-description'>Method for encrypting the File Transfer Protocol (FTP)<\/span><\/span><\/span>, SSH and others (even something like <a href=\"https:\/\/de.wikipedia.org\/wiki\/Gopher\">Gopher<\/a>). Most of them are access-protected, some are only optional. So I started to support these protocols in the plugin.<\/p>\n\n\n\n<p>What is particularly helpful in this development is that WordPress itself already has everything you need. With the <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/wp_filesystem\/\">WP_Filesystem()<\/a> based objects, you can easily query a wide variety of protocols. Some of them, of course, set corresponding <span tabindex='0' class='glossary-item-container'>PHP<span class='glossary-item-hidden-content'><span class='glossary-item-header'>PHP<\/span> <span class='glossary-item-description'>PHP is a scripting language with a syntax based on C and Perl, which is mainly used to create dynamic websites or web applications.\r\r<a href=\"https:\/\/de.wikipedia.org\/wiki\/PHP\">https:\/\/de.wikipedia.org\/wiki\/PHP<\/a><\/span><\/span><\/span>-modules. But I didn't have to reinvent the wheel.<\/p>\n\n\n\n<p>And so support for many different protocols was quickly added to the URLs.<\/p>\n\n\n<h3 class=\"wp-block-heading\" id=\"dateitypen\">File types<\/h3>\n\n\n<p>WordPress itself only allows the upload of certain file types during a fresh installation. PDF, JPG, PNG and others are commonplace for most users. I didn't want to extend these rules with my plugin, as External files for the media library is intended for external files and not for managing file types - that's why there's <a href=\"https:\/\/wordpress.org\/plugins\/tags\/file-type\/\">other very good plugins<\/a>. So my plugin accesses this list from WordPress (which other plugins can extend) to check whether an external file is permitted. In the plugin settings, you can at least choose which format WordPress supports for external files.<\/p>\n\n\n<h3 class=\"wp-block-heading\" id=\"dienste\">Services<\/h3>\n\n\n<p>Up to this point, the plugin has worked extremely satisfactorily, <em>I began to think bigger<\/em>. Was verwenden WordPress-Anwender zum Verwalten ihrer Dateien abseits von WordPress, die sie dann aber in ihr Projekt integrieren m\u00f6chten? Wie k\u00f6nnte ich denen die Arbeit erleichtern? Ich kam auf verschiedenste Dienstleister, die es erm\u00f6glichen Dateien zu verwalten. Und wie greift man von extern auf diese zu? Ja, per API.<\/p>\n\n\n\n<p>So I started, piece by piece, to find service providers like <span tabindex='0' class='glossary-item-container'>Dropbox<span class='glossary-item-hidden-content'><span class='glossary-item-header'>Dropbox<\/span> <span class='glossary-item-description'>Online data storage<\/span><\/span><\/span>, Google Drive, Google Cloud Storage and AWS S3 into the plugin. Again, these are URLs of files that I received via API - so no problem for the basic functions of \u201eExternal files for the media library\u201c. The main effort in the implementation consisted of getting to know the respective API and connecting it.<\/p>\n\n\n\n<p>Da ich selbst diese Plattformen selten bis gar nicht nutze, betrat ich f\u00fcr mich selbst Neuland &#8211; aber genau das fasziniert mich an der IT: die M\u00f6glichkeiten, die man hat ohne von ihnen zu wissen, und sie dann kennenzulernen.<\/p>\n\n\n<h3 class=\"wp-block-heading\" id=\"komfortable-dateiansichten-mit-react\">Convenient file views with React<\/h3>\n\n\n<p>Everything I have described up to this point involves activities in the background. Objects and tasks are created in the plugin that have no visual output for the user in the WordPress backend. But I also had to provide the user with an interface for the services so that they can see what files are there and select from them.<\/p>\n\n\n\n<p>This resulted in a React-based tool called \u201e<a href=\"https:\/\/github.com\/threadi\/easy-directory-listing-for-wordpress\">Easy Directory Listing for WordPress<\/a>\u201c what with <span tabindex='0' class='glossary-item-container'>GitHub<span class='glossary-item-hidden-content'><span class='glossary-item-header'>GitHub<\/span> <span class='glossary-item-description'>Software development platform<\/span><\/span><\/span> as <span tabindex='0' class='glossary-item-container'>composer<span class='glossary-item-hidden-content'><span class='glossary-item-header'>composer<\/span> <span class='glossary-item-description'>application-oriented package manager for PHP<\/span><\/span><\/span> package is available. This is used by my plugin to handle all file listings in the backend. It provides a tree on the left and the file list on the right. There are also options for importing and a few other things.<\/p>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;69dfebb441b29&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"69dfebb441b29\" class=\"wp-block-image size-full wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"323\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/plugins.thomaszwirner.de\/wp-content\/uploads\/2025\/10\/grafik-15.png\" alt=\"\" class=\"wp-image-610\" srcset=\"https:\/\/plugins.thomaszwirner.de\/wp-content\/uploads\/2025\/10\/grafik-15.png 800w, https:\/\/plugins.thomaszwirner.de\/wp-content\/uploads\/2025\/10\/grafik-15-300x121.png 300w, https:\/\/plugins.thomaszwirner.de\/wp-content\/uploads\/2025\/10\/grafik-15-768x310.png 768w, https:\/\/plugins.thomaszwirner.de\/wp-content\/uploads\/2025\/10\/grafik-15-18x7.png 18w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\taria-label=\"Enlarge\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.imageButtonRight\"\n\t\t\tdata-wp-style--top=\"state.imageButtonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewbox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">Directory view of an external source in the \u201eExternal files in the media library\u201c plugin\u201c<\/figcaption><\/figure>\n\n\n<h3 class=\"wp-block-heading\" id=\"kompatibilitat-mit-anderen-plugins\">Compatibility with other plugins<\/h3>\n\n\n<p>Another major shortcoming of the media library in WordPress is that you can't organize files there. They are just there without categorization and classification. This can be solved with various plugins:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/de.wordpress.org\/plugins\/filebird\/\">https:\/\/de.wordpress.org\/plugins\/filebird\/<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/de.wordpress.org\/plugins\/ifolders\/\">https:\/\/de.wordpress.org\/plugins\/ifolders\/<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/de.wordpress.org\/plugins\/folders\/\">https:\/\/de.wordpress.org\/plugins\/folders\/<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/de.wordpress.org\/plugins\/real-media-library-lite\/\">https:\/\/de.wordpress.org\/plugins\/real-media-library-lite\/<\/a><\/li>\n<\/ul>\n\n\n\n<p>.. nur um einige zu nennen, es gibt noch weit mehr. Da mir bewusst ist, dass Anwender meines Plugins m\u00f6glicherweise die externen Dateien auch einordnen m\u00f6chten, schuf ich also eine Kompatibilit\u00e4t zu sehr vielen von diesen Drittanbieter-Plugins. Dadurch kann man beim Import festlegen, dass und wo man eine Datei einordnen m\u00f6chte, wenn man ein Plugin f\u00fcr Verzeichnisse in der Mediathek verwendet und &#8222;Externe Dateien in der Mediathek&#8220; daf\u00fcr eine Unterst\u00fctzung mitbringt.<\/p>\n\n\n\n<p>In addition, there is also compatibility with WooCommerce with its CSV-based import and various other plugins that handle files in the media library.<\/p>\n\n\n<h3 class=\"wp-block-heading\" id=\"synchronisation\">Synchronization<\/h3>\n\n\n<p>After the manual method worked so well for the various sources, I also started to consider an automatic method. The use case could be, for example, that you want to update a gallery automatically - simply because there is a new file in an external source. The plugin can now also do this and offers it for almost all external sources.<\/p>\n\n\n<h3 class=\"wp-block-heading\" id=\"export-von-dateien\">Exporting files<\/h3>\n\n\n<p>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\u00f6chte? Der klassische Fall vom Auslagern von Dateien (aka Offloading). Da ich schon die Verbindung zu den Quellen hatte, war es ein einfaches nun auch den Export von Dateien dorthin zu erm\u00f6glichen.<\/p>\n\n\n<h3 class=\"wp-block-heading\" id=\"lizenzierung-als-herausforderung\">Lizenzierung als Herausforderung<\/h3>\n\n\n<p>Anfang 2026 bat ich einige Freunde um einen Test der n\u00e4chsten Inkarnation des Plugins. Ich hatte bis dahin 7 Monate an einer Aktualisierung gearbeitet und wollte es endlich abschlie\u00dfen. Die R\u00fcckmeldungen waren zwiegespalten. Die einen waren \u00fcberw\u00e4ltigt von den M\u00f6glichkeiten und wussten nicht, wo sie \u00fcberhaupt was testen sollten. Andere begr\u00fc\u00dften die vielen gut formulierten Hinweise (zu dem Zeitpunkt alles in englisch) zur Handhabung von Funktionen.<\/p>\n\n\n\n<p>Daraufhin wollte ich das Plugin in Version 5.0.0 direkt ver\u00f6ffentlichen. Das Package war gigantische 6.8 MB gro\u00df geworden und enthielt alle ben\u00f6tigten Bibliotheken. Dadurch ergaben sich 2 Probleme, die mir vorher gar nicht bewusst gewesen sind:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Das Update per SVN ins WordPress Repository hochzuladen, geht nicht, da nach rund einer Stunde ein Timeout kommt. Diesen kann man auch nicht umgehen &#8211; er ist fest hinterlegt. Wie ich mitbekam war daran vor Jahren auch schonmal das Gutenberg-Team gescheitert.<\/li>\n\n\n\n<li>Dadurch, dass ich mir die Dateien des Plugins auf Grund ihrer Menge nochmal anschauen musste, fiel mir auf, dass einige der verwendeten Bibliotheken gar nicht GPL-kompatibel sind.<\/li>\n<\/ul>\n\n\n\n<p>Die L\u00f6sung war naheliegend: ich teilte das Plugin auf. Die nicht-GPL-kompatiblen Bibliotheken wanderten in eigene Plugins, die ich auf GitHub hosten konnte. Darunter fiel auch jegliche Unterst\u00fctzung f\u00fcr AWS S3-kompatible Cloud-Speicher. Aber daraus ergaben sich direkt einige Vorteile:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Die Funktionen des Plugins sind nicht mehr so erschlagend, wie von einigen Testern gemeldet.<\/li>\n\n\n\n<li>Das Package war wesentlich kleiner geworden und wird so auch ins SVN ver\u00f6ffentlicht werden k\u00f6nnen.<\/li>\n\n\n\n<li>Ich gehe kein Risiko einer Mischung mit nicht-GPL-kompatiblen Bibliotheken ein, die zu einer Sperrung des Plugins im Repository f\u00fchren k\u00f6nnten.<\/li>\n\n\n\n<li>Ich kann die Funktionen f\u00fcr einzelne externe Quellen in eigene Plugins kapseln, was es f\u00fcr mich \u00fcbersichtlicher und auch wartbarer macht.<\/li>\n\n\n\n<li>Andere Entwickler k\u00f6nnen ihre eigenen Plugins beisteuern um externe Quellen f\u00fcr mein Plugin bereitzustellen.<\/li>\n<\/ul>\n\n\n\n<p>Nach einigen Wochen waren die Plugins nun fertig f\u00fcr den Einsatz. Das Plugin hatte sich somit nochmals gewandelt, aber aus meiner Sicht zu seinem Vorteil.<\/p>\n\n\n<h2 class=\"wp-block-heading\" id=\"abschliesend\">In conclusion<\/h2>\n\n\n<p>Mein oben formuliertes Konzept hat sich durch die vielf\u00e4ltigen M\u00f6glichkeiten, die das Plugin inzwischen bietet, gewandelt. Nach \u00fcber 3 Jahren Entwicklung w\u00fcrde ich es Anfang 2026 folgenderma\u00dfen umrei\u00dfen:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Optimization of the management of files in the media library with external sources.<\/p>\n\n\n\n<p><\/p>\n<\/blockquote>","protected":false},"excerpt":{"rendered":"<p>How did the plugin come about? Here I describe the background and the concept.<\/p>","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[2],"tags":[],"class_list":["post-451","post","type-post","status-publish","format-standard","hentry","category-externe-dateien-in-der-mediathek"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.7 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Das Plugin-Konzept - WordPress Plugins von Thomas Zwirner<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/plugins.thomaszwirner.de\/en\/external-files-in-the-media-library\/the-plugin-concept\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Das Plugin-Konzept - WordPress Plugins von Thomas Zwirner\" \/>\n<meta property=\"og:description\" content=\"Wie ist das Plugin entstanden? Hier beschreibe ich den Hintergrund sowie das Konzept.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/plugins.thomaszwirner.de\/en\/external-files-in-the-media-library\/the-plugin-concept\/\" \/>\n<meta property=\"og:site_name\" content=\"WordPress Plugins von Thomas Zwirner\" \/>\n<meta property=\"article:published_time\" content=\"2026-01-06T09:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-03-05T16:01:27+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/plugins.thomaszwirner.de\/wp-content\/uploads\/2025\/10\/grafik-15.png\" \/>\n\t<meta property=\"og:image:width\" content=\"800\" \/>\n\t<meta property=\"og:image:height\" content=\"323\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"verwalter\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"verwalter\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"TechArticle\",\"@id\":\"https:\/\/plugins.thomaszwirner.de\/externe-dateien-in-der-mediathek\/das-plugin-konzept\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/plugins.thomaszwirner.de\/externe-dateien-in-der-mediathek\/das-plugin-konzept\/\"},\"author\":{\"name\":\"verwalter\",\"@id\":\"https:\/\/plugins.thomaszwirner.de\/#\/schema\/person\/d3e8b1604002e6b915f31b48a86a7967\"},\"headline\":\"Das Plugin-Konzept\",\"datePublished\":\"2026-01-06T09:00:00+00:00\",\"dateModified\":\"2026-03-05T16:01:27+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/plugins.thomaszwirner.de\/externe-dateien-in-der-mediathek\/das-plugin-konzept\/\"},\"wordCount\":1805,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/plugins.thomaszwirner.de\/#\/schema\/person\/4dff08a99a879985211dc98128cb9140\"},\"image\":{\"@id\":\"https:\/\/plugins.thomaszwirner.de\/externe-dateien-in-der-mediathek\/das-plugin-konzept\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/plugins.thomaszwirner.de\/wp-content\/uploads\/2025\/10\/grafik-15.png\",\"articleSection\":[\"Externe Dateien in der Mediathek\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/plugins.thomaszwirner.de\/externe-dateien-in-der-mediathek\/das-plugin-konzept\/#respond\"]}]},{\"@type\":[\"WebPage\",\"QAPage\"],\"@id\":\"https:\/\/plugins.thomaszwirner.de\/externe-dateien-in-der-mediathek\/das-plugin-konzept\/\",\"url\":\"https:\/\/plugins.thomaszwirner.de\/externe-dateien-in-der-mediathek\/das-plugin-konzept\/\",\"name\":\"Das Plugin-Konzept - WordPress Plugins von Thomas Zwirner\",\"isPartOf\":{\"@id\":\"https:\/\/plugins.thomaszwirner.de\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/plugins.thomaszwirner.de\/externe-dateien-in-der-mediathek\/das-plugin-konzept\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/plugins.thomaszwirner.de\/externe-dateien-in-der-mediathek\/das-plugin-konzept\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/plugins.thomaszwirner.de\/wp-content\/uploads\/2025\/10\/grafik-15.png\",\"datePublished\":\"2026-01-06T09:00:00+00:00\",\"dateModified\":\"2026-03-05T16:01:27+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/plugins.thomaszwirner.de\/externe-dateien-in-der-mediathek\/das-plugin-konzept\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/plugins.thomaszwirner.de\/externe-dateien-in-der-mediathek\/das-plugin-konzept\/\"]}],\"mainEntity\":{\"@type\":\"Question\",\"name\":\"Das Plugin-Konzept\",\"answerCount\":1,\"datePublished\":\"2026-01-06T10:00+01:00\",\"text\":\"Wie ist das Plugin entstanden? Hier beschreibe ich den Hintergrund sowie das Konzept.\",\"author\":{\"@type\":\"Person\",\"name\":\"Thomas Zwirner\",\"url\":\"https:\/\/plugins.thomaszwirner.de\"},\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Das Plugin \\\"Externe Dateien f\u00fcr Mediathek\\\" hat sich im Laufe der Zeit aus einer kleinen Anwendung zu einem umfangreichen Tool entwickelt. Es kann helfen zahlreiche unterschiedlichste Anwendungsf\u00e4lle in Zusammenhang mit Dateien in WordPress zu l\u00f6sen. Hier erkl\u00e4re ich das Konzept dahinter um zu zeigen, welche M\u00f6glichkeiten es f\u00fcr sehr viele WordPress-basierte Projekte bieten kann.\\n\\n\\n\\nDie Entstehung\\n\\n\\n\\nUm das Konzept zu verstehen, muss man etwas von der Entstehungsgeschichte nachvollziehen k\u00f6nnen. Vor einigen Jahren hatte ich das Plugin Download Liste mit Icons entwickelt. Dieses erm\u00f6glicht die Ausgabe von Dateien in einer komfortablen Liste im Block Editor. Man ordnet Dateien aus der Mediathek dem Block zu und zeigt diese dann an.\\n\\n\\n\\nDie Anwender dieses Plugins sind interessanterweise vielfach im wissenschaftlichen Bereich t\u00e4tig. Hier geht es z.B. um PDF-basierte Dokumentationen von Ver\u00f6ffentlichungen. 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\u00f6nnen. Daraus ergab sich eine f\u00fcr mich v\u00f6llig neue Anforderung:\\n\\n\\n\\n\\nAnwender meines Plugins ben\u00f6tigten eine M\u00f6glichkeit um URLs in den Block der Download Liste zu hinterlegen \ud83d\ude12\\n\\n\\n\\n\\nIch versuchte erst mit React daf\u00fcr eine M\u00f6glichkeit zu schaffen, damit man das direkt am Block einf\u00fcgen kann. Ich scheiterte jedoch, was vor allem an der Nutzeroberfl\u00e4che, die hierf\u00fcr schlicht nicht geeignet war, lag.\\n\\n\\n\\nDas Grundkonzept\\n\\n\\n\\nZun\u00e4chst schaute ich mich um, ob im WordPress Plugin Repository sich irgendwo ein Plugin genau daf\u00fcr finden lassen w\u00fcrde. Ich fand interessanterweise ein paar kleine, die aber extrem veraltet waren. Sie erm\u00f6glichten z.B. den Download einer Datei per FTP in die Mediathek. War nicht ganz das was ich suchte. Und die Programmierweise dieser Plugins entsprach auch weder meinen Anspr\u00fcchen an Qualit\u00e4t noch denen des WordPress Repositories, die sich in letzter Zeit durchaus zum Positiven gewandelt hat.\\n\\n\\n\\nAlso entstand ein neues Plugin: Externe Dateien in der Mediathek. Ich erweiterte mit diesem die Mediathek um die M\u00f6glichkeit URLs f\u00fcr Dateien anzugeben, die dann im Projekt wie normale Medien-Dateien verwendet werden konnten.\\n\\n\\n\\nZun\u00e4chst 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\u00e4re, um externe Dateien als solche in der Mediathek zu speichern - und es funktionierte erstaunlich gut. Ich kam also zu meinem Grundkonzept f\u00fcr das Plugin:\\n\\n\\n\\n\\nDie URL von externen Dateien in der Mediathek hinterlegen, nicht die Datei selbst.\\n\\n\\n\\n\\nWarum gerade URL-basiert?\\nDateien im Internet sind alle mit einer URL referenziert. Diese kann direkt erreichbar oder mit irgendeinem Zugriffsschutz versehen sein. Aber sie haben alle URLs.\\n\\n\\n\\n\\nWarum nicht den \\\"Einbetten\\\" Block verwenden?\\nMit diesem kann man wunderbare externe Inhalte in die eigene Website integrieren. Aber es erm\u00f6glicht eben nicht die Verlinkung in meinem Block f\u00fcr die Download Liste.\\n\\n\\n\\n\\nDie Evolution des Plugins\\n\\n\\n\\nDamit hatte ich das eigentliche Ziel, externe URLs beim Plugin Download Liste mit Icons verwenden zu k\u00f6nnen, durchaus erreicht. Klar, ein weiteres Plugin was man installieren m\u00fcsste - aber wer es braucht wird es nutzen. Und so begann ich damit es St\u00fcck f\u00fcr St\u00fcck zu erweitern, meist aus eigenem Wunsch heraus, da ich es f\u00fcr mich als technische Herausforderung ansehe. Inzwischen \u00fcbersteigt es weit das urspr\u00fcngliche Ansinnen, eine Unterst\u00fctzung f\u00fcr mein anderes Plugin zu sein - beide sind jedoch weiterhin miteinander kompatibel.\\n\\n\\n\\nProtokolle\\n\\n\\n\\nURLs verwenden nat\u00fcrlich auch unterschiedliche Protokolle. HTTP kennt jeder, FTP sagt einigen auch noch etwas. Daneben gibt es noch HTTPS, SFTP, FTPS, SSH und andere (sogar so etwas wie Gopher). Die meisten sind zugangsgesch\u00fctzt, manche nur optional. Ich begann also damit diese Protokolle im Plugin mit zu unterst\u00fctzen.\\n\\n\\n\\nBesonders hilfreich bei dieser Entwicklung ist, dass WordPress selbst daf\u00fcr eigentlich schon alles mitbringt. Mit den auf WP_Filesystem() basierenden Objekten kann man problemlos verschiedenste Protokolle abfragen. Einige setzen nat\u00fcrlich serverseitig entsprechende PHP-Module voraus. Aber ich musste nicht das Rad neu erfinden.\\n\\n\\n\\nUnd so kam recht z\u00fcgig die Unterst\u00fctzung f\u00fcr viele verschiedene Protokolle in den URLs mit dazu.\\n\\n\\n\\nDateitypen\\n\\n\\n\\nWordPress selbst l\u00e4sst bei einer frischen Installation nur den Upload von bestimmten Dateitypen zu. PDF, JPG, PNG und andere geh\u00f6ren zum Alltag der meisten Anwender. Ich wollte mit meinem Plugin diese Regeln nicht erweitern, da Externe Dateien f\u00fcr die Mediathek sich um externe Dateien und nicht zur Verwaltung von Dateitypen k\u00fcmmern soll - daf\u00fcr gibt es andere sehr gute Plugins. Also greift mein Plugin auf diese Liste von WordPress zu (die andere Plugins erweitern k\u00f6nnen) um zu pr\u00fcfen, ob eine externe Datei zul\u00e4ssig ist. In den Einstellungen vom Plugin kann man zumindest noch w\u00e4hlen, welches Format, was WordPress unterst\u00fctzt, man f\u00fcr externe Dateien verwenden m\u00f6chte.\\n\\n\\n\\nDienste\\n\\n\\n\\nDa bis hierhin das Plugin \u00fcberaus zufriedenstellend lief, begann ich gr\u00f6\u00dfer zu denken. Was verwenden WordPress-Anwender zum Verwalten ihrer Dateien abseits von WordPress, die sie dann aber in ihr Projekt integrieren m\u00f6chten? Wie k\u00f6nnte ich denen die Arbeit erleichtern? Ich kam auf verschiedenste Dienstleister, die es erm\u00f6glichen Dateien zu verwalten. Und wie greift man von extern auf diese zu? Ja, per API.\\n\\n\\n\\nIch begann also St\u00fcck f\u00fcr St\u00fcck Dienstleister wie Dropbox, 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\u00fcr die Basis-Funkionen von \\\"Externe Dateien f\u00fcr die Mediathek\\\". Der Hauptaufwand bei der Implementierung bestand darin die jeweilige API kennenzulernen und anzubinden.\\n\\n\\n\\nDa ich selbst diese Plattformen selten bis gar nicht nutze, betrat ich f\u00fcr mich selbst Neuland - aber genau das fasziniert mich an der IT: die M\u00f6glichkeiten, die man hat ohne von ihnen zu wissen, und sie dann kennenzulernen.\\n\\n\\n\\nKomfortable Dateiansichten mit React\\n\\n\\n\\nBei all dem was ich bis hierher beschrieben habe, handelt es sich um T\u00e4tigkeiten im Hintergrund. Es entstehen Objekte und Aufgaben im Plugin die keine visuelle Ausgabe f\u00fcr den Anwender im Backend von WordPress haben. Aber ich musste f\u00fcr die Dienste dem Anwender auch eine Oberfl\u00e4che bereitstellen damit er sieht was f\u00fcr Dateien dort liegen und aus diesen ausw\u00e4hlen kann.\\n\\n\\n\\nSo entstand ein React-basiertes Tool names \\\"Easy Directory Listing for WordPress\\\" was bei GitHub als composer Package bereitsteht. Hier\u00fcber 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.\\n\\n\\n\\n\\n\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\n\\t\\tVerzeichnisansicht einer externen Quelle im Plugin \\\"Externe Dateien in der Mediathek\\\"\\n\\n\\n\\nKompatibilit\u00e4t mit anderen Plugins\\n\\n\\n\\nEin gro\u00dfes Manko der Mediathek in WordPress ist weiterhin, dass man Dateien dort nicht anordnen kann. Sie liegen einfach nur ohne Kategorisierung und Einordnung da. L\u00f6sen kann man das mit verschiedensten Plugins:\\n\\n\\n\\n\\nhttps:\/\/de.wordpress.org\/plugins\/filebird\/\\n\\n\\n\\nhttps:\/\/de.wordpress.org\/plugins\/ifolders\/\\n\\n\\n\\nhttps:\/\/de.wordpress.org\/plugins\/folders\/\\n\\n\\n\\nhttps:\/\/de.wordpress.org\/plugins\/real-media-library-lite\/\\n\\n\\n\\n\\n.. nur um einige zu nennen, es gibt noch weit mehr. Da mir bewusst ist, dass Anwender meines Plugins m\u00f6glicherweise die externen Dateien auch einordnen m\u00f6chten, schuf ich also eine Kompatibilit\u00e4t zu sehr vielen von diesen Drittanbieter-Plugins. Dadurch kann man beim Import festlegen, dass und wo man eine Datei einordnen m\u00f6chte, wenn man ein Plugin f\u00fcr Verzeichnisse in der Mediathek verwendet und \\\"Externe Dateien in der Mediathek\\\" daf\u00fcr eine Unterst\u00fctzung mitbringt.\\n\\n\\n\\nZus\u00e4tzlich dazu besteht auch eine Kompatibilit\u00e4t mit WooCommerce bei dessen CSV-basiertem Import sowie verschiedenen anderen Plugins, die mit Dateien in der Mediathek hantieren.\\n\\n\\n\\nSynchronisation\\n\\n\\n\\nNachdem der manuelle Weg f\u00fcr die verschiedensten Quellen so problemlos funktionierte, begann ich auch einen automatischen Weg zu \u00fcberlegen. Der Anwendungsfall k\u00f6nnte z.B. sein, dass man eine Galerie automatisch aktualisieren m\u00f6chte - einfach nur, weil in einer externen Quelle eine neue Datei liegt. Auch das kann das Plugin inzwischen und bietet es f\u00fcr nahezu alle externe Quellen an.\\n\\n\\n\\nExport von Dateien\\n\\n\\n\\nUnd 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\u00f6chte? Der klassische Fall vom Auslagern von Dateien (aka Offloading). Da ich schon die Verbindung zu den Quellen hatte, war es ein einfaches nun auch den Export von Dateien dorthin zu erm\u00f6glichen.\\n\\n\\n\\nLizenzierung als Herausforderung\\n\\n\\n\\nAnfang 2026 bat ich einige Freunde um einen Test der n\u00e4chsten Inkarnation des Plugins. Ich hatte bis dahin 7 Monate an einer Aktualisierung gearbeitet und wollte es endlich abschlie\u00dfen. Die R\u00fcckmeldungen waren zwiegespalten. Die einen waren \u00fcberw\u00e4ltigt von den M\u00f6glichkeiten und wussten nicht, wo sie \u00fcberhaupt was testen sollten. Andere begr\u00fc\u00dften die vielen gut formulierten Hinweise (zu dem Zeitpunkt alles in englisch) zur Handhabung von Funktionen.\\n\\n\\n\\nDaraufhin wollte ich das Plugin in Version 5.0.0 direkt ver\u00f6ffentlichen. Das Package war gigantische 6.8 MB gro\u00df geworden und enthielt alle ben\u00f6tigten Bibliotheken. Dadurch ergaben sich 2 Probleme, die mir vorher gar nicht bewusst gewesen sind:\\n\\n\\n\\n\\nDas Update per SVN ins WordPress Repository hochzuladen, geht nicht, da nach rund einer Stunde ein Timeout kommt. Diesen kann man auch nicht umgehen - er ist fest hinterlegt. Wie ich mitbekam war daran vor Jahren auch schonmal das Gutenberg-Team gescheitert.\\n\\n\\n\\nDadurch, dass ich mir die Dateien des Plugins auf Grund ihrer Menge nochmal anschauen musste, fiel mir auf, dass einige der verwendeten Bibliotheken gar nicht GPL-kompatibel sind.\\n\\n\\n\\n\\nDie L\u00f6sung war naheliegend: ich teilte das Plugin auf. Die nicht-GPL-kompatiblen Bibliotheken wanderten in eigene Plugins, die ich auf GitHub hosten konnte. Darunter fiel auch jegliche Unterst\u00fctzung f\u00fcr AWS S3-kompatible Cloud-Speicher. Aber daraus ergaben sich direkt einige Vorteile:\\n\\n\\n\\n\\nDie Funktionen des Plugins sind nicht mehr so erschlagend, wie von einigen Testern gemeldet.\\n\\n\\n\\nDas Package war wesentlich kleiner geworden und wird so auch ins SVN ver\u00f6ffentlicht werden k\u00f6nnen.\\n\\n\\n\\nIch gehe kein Risiko einer Mischung mit nicht-GPL-kompatiblen Bibliotheken ein, die zu einer Sperrung des Plugins im Repository f\u00fchren k\u00f6nnten.\\n\\n\\n\\nIch kann die Funktionen f\u00fcr einzelne externe Quellen in eigene Plugins kapseln, was es f\u00fcr mich \u00fcbersichtlicher und auch wartbarer macht.\\n\\n\\n\\nAndere Entwickler k\u00f6nnen ihre eigenen Plugins beisteuern um externe Quellen f\u00fcr mein Plugin bereitzustellen.\\n\\n\\n\\n\\nNach einigen Wochen waren die Plugins nun fertig f\u00fcr den Einsatz. Das Plugin hatte sich somit nochmals gewandelt, aber aus meiner Sicht zu seinem Vorteil.\\n\\n\\n\\nAbschlie\u00dfend\\n\\n\\n\\nMein oben formuliertes Konzept hat sich durch die vielf\u00e4ltigen M\u00f6glichkeiten, die das Plugin inzwischen bietet, gewandelt. Nach \u00fcber 3 Jahren Entwicklung w\u00fcrde ich es Anfang 2026 folgenderma\u00dfen umrei\u00dfen:\\n\\n\\n\\n\\nOptimierung der Verwaltung von Dateien in der Mediathek mit externen Quellen.\",\"datePublished\":\"2026-01-06T10:00+01:00\",\"url\":\"https:\/\/plugins.thomaszwirner.de\/en\/external-files-in-the-media-library\/the-plugin-concept\/\",\"upvoteCount\":1,\"author\":{\"@type\":\"Person\",\"name\":\"Thomas Zwirner\",\"url\":\"https:\/\/plugins.thomaszwirner.de\"}},\"suggestedAnswer\":{\"@type\":\"Answer\",\"text\":\"Das Plugin \\\"Externe Dateien f\u00fcr Mediathek\\\" hat sich im Laufe der Zeit aus einer kleinen Anwendung zu einem umfangreichen Tool entwickelt. Es kann helfen zahlreiche unterschiedlichste Anwendungsf\u00e4lle in Zusammenhang mit Dateien in WordPress zu l\u00f6sen. Hier erkl\u00e4re ich das Konzept dahinter um zu zeigen, welche M\u00f6glichkeiten es f\u00fcr sehr viele WordPress-basierte Projekte bieten kann.\\n\\n\\n\\nDie Entstehung\\n\\n\\n\\nUm das Konzept zu verstehen, muss man etwas von der Entstehungsgeschichte nachvollziehen k\u00f6nnen. Vor einigen Jahren hatte ich das Plugin Download Liste mit Icons entwickelt. Dieses erm\u00f6glicht die Ausgabe von Dateien in einer komfortablen Liste im Block Editor. Man ordnet Dateien aus der Mediathek dem Block zu und zeigt diese dann an.\\n\\n\\n\\nDie Anwender dieses Plugins sind interessanterweise vielfach im wissenschaftlichen Bereich t\u00e4tig. Hier geht es z.B. um PDF-basierte Dokumentationen von Ver\u00f6ffentlichungen. 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\u00f6nnen. Daraus ergab sich eine f\u00fcr mich v\u00f6llig neue Anforderung:\\n\\n\\n\\n\\nAnwender meines Plugins ben\u00f6tigten eine M\u00f6glichkeit um URLs in den Block der Download Liste zu hinterlegen \ud83d\ude12\\n\\n\\n\\n\\nIch versuchte erst mit React daf\u00fcr eine M\u00f6glichkeit zu schaffen, damit man das direkt am Block einf\u00fcgen kann. Ich scheiterte jedoch, was vor allem an der Nutzeroberfl\u00e4che, die hierf\u00fcr schlicht nicht geeignet war, lag.\\n\\n\\n\\nDas Grundkonzept\\n\\n\\n\\nZun\u00e4chst schaute ich mich um, ob im WordPress Plugin Repository sich irgendwo ein Plugin genau daf\u00fcr finden lassen w\u00fcrde. Ich fand interessanterweise ein paar kleine, die aber extrem veraltet waren. Sie erm\u00f6glichten z.B. den Download einer Datei per FTP in die Mediathek. War nicht ganz das was ich suchte. Und die Programmierweise dieser Plugins entsprach auch weder meinen Anspr\u00fcchen an Qualit\u00e4t noch denen des WordPress Repositories, die sich in letzter Zeit durchaus zum Positiven gewandelt hat.\\n\\n\\n\\nAlso entstand ein neues Plugin: Externe Dateien in der Mediathek. Ich erweiterte mit diesem die Mediathek um die M\u00f6glichkeit URLs f\u00fcr Dateien anzugeben, die dann im Projekt wie normale Medien-Dateien verwendet werden konnten.\\n\\n\\n\\nZun\u00e4chst 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\u00e4re, um externe Dateien als solche in der Mediathek zu speichern - und es funktionierte erstaunlich gut. Ich kam also zu meinem Grundkonzept f\u00fcr das Plugin:\\n\\n\\n\\n\\nDie URL von externen Dateien in der Mediathek hinterlegen, nicht die Datei selbst.\\n\\n\\n\\n\\nWarum gerade URL-basiert?\\nDateien im Internet sind alle mit einer URL referenziert. Diese kann direkt erreichbar oder mit irgendeinem Zugriffsschutz versehen sein. Aber sie haben alle URLs.\\n\\n\\n\\n\\nWarum nicht den \\\"Einbetten\\\" Block verwenden?\\nMit diesem kann man wunderbare externe Inhalte in die eigene Website integrieren. Aber es erm\u00f6glicht eben nicht die Verlinkung in meinem Block f\u00fcr die Download Liste.\\n\\n\\n\\n\\nDie Evolution des Plugins\\n\\n\\n\\nDamit hatte ich das eigentliche Ziel, externe URLs beim Plugin Download Liste mit Icons verwenden zu k\u00f6nnen, durchaus erreicht. Klar, ein weiteres Plugin was man installieren m\u00fcsste - aber wer es braucht wird es nutzen. Und so begann ich damit es St\u00fcck f\u00fcr St\u00fcck zu erweitern, meist aus eigenem Wunsch heraus, da ich es f\u00fcr mich als technische Herausforderung ansehe. Inzwischen \u00fcbersteigt es weit das urspr\u00fcngliche Ansinnen, eine Unterst\u00fctzung f\u00fcr mein anderes Plugin zu sein - beide sind jedoch weiterhin miteinander kompatibel.\\n\\n\\n\\nProtokolle\\n\\n\\n\\nURLs verwenden nat\u00fcrlich auch unterschiedliche Protokolle. HTTP kennt jeder, FTP sagt einigen auch noch etwas. Daneben gibt es noch HTTPS, SFTP, FTPS, SSH und andere (sogar so etwas wie Gopher). Die meisten sind zugangsgesch\u00fctzt, manche nur optional. Ich begann also damit diese Protokolle im Plugin mit zu unterst\u00fctzen.\\n\\n\\n\\nBesonders hilfreich bei dieser Entwicklung ist, dass WordPress selbst daf\u00fcr eigentlich schon alles mitbringt. Mit den auf WP_Filesystem() basierenden Objekten kann man problemlos verschiedenste Protokolle abfragen. Einige setzen nat\u00fcrlich serverseitig entsprechende PHP-Module voraus. Aber ich musste nicht das Rad neu erfinden.\\n\\n\\n\\nUnd so kam recht z\u00fcgig die Unterst\u00fctzung f\u00fcr viele verschiedene Protokolle in den URLs mit dazu.\\n\\n\\n\\nDateitypen\\n\\n\\n\\nWordPress selbst l\u00e4sst bei einer frischen Installation nur den Upload von bestimmten Dateitypen zu. PDF, JPG, PNG und andere geh\u00f6ren zum Alltag der meisten Anwender. Ich wollte mit meinem Plugin diese Regeln nicht erweitern, da Externe Dateien f\u00fcr die Mediathek sich um externe Dateien und nicht zur Verwaltung von Dateitypen k\u00fcmmern soll - daf\u00fcr gibt es andere sehr gute Plugins. Also greift mein Plugin auf diese Liste von WordPress zu (die andere Plugins erweitern k\u00f6nnen) um zu pr\u00fcfen, ob eine externe Datei zul\u00e4ssig ist. In den Einstellungen vom Plugin kann man zumindest noch w\u00e4hlen, welches Format, was WordPress unterst\u00fctzt, man f\u00fcr externe Dateien verwenden m\u00f6chte.\\n\\n\\n\\nDienste\\n\\n\\n\\nDa bis hierhin das Plugin \u00fcberaus zufriedenstellend lief, begann ich gr\u00f6\u00dfer zu denken. Was verwenden WordPress-Anwender zum Verwalten ihrer Dateien abseits von WordPress, die sie dann aber in ihr Projekt integrieren m\u00f6chten? Wie k\u00f6nnte ich denen die Arbeit erleichtern? Ich kam auf verschiedenste Dienstleister, die es erm\u00f6glichen Dateien zu verwalten. Und wie greift man von extern auf diese zu? Ja, per API.\\n\\n\\n\\nIch begann also St\u00fcck f\u00fcr St\u00fcck Dienstleister wie Dropbox, 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\u00fcr die Basis-Funkionen von \\\"Externe Dateien f\u00fcr die Mediathek\\\". Der Hauptaufwand bei der Implementierung bestand darin die jeweilige API kennenzulernen und anzubinden.\\n\\n\\n\\nDa ich selbst diese Plattformen selten bis gar nicht nutze, betrat ich f\u00fcr mich selbst Neuland - aber genau das fasziniert mich an der IT: die M\u00f6glichkeiten, die man hat ohne von ihnen zu wissen, und sie dann kennenzulernen.\\n\\n\\n\\nKomfortable Dateiansichten mit React\\n\\n\\n\\nBei all dem was ich bis hierher beschrieben habe, handelt es sich um T\u00e4tigkeiten im Hintergrund. Es entstehen Objekte und Aufgaben im Plugin die keine visuelle Ausgabe f\u00fcr den Anwender im Backend von WordPress haben. Aber ich musste f\u00fcr die Dienste dem Anwender auch eine Oberfl\u00e4che bereitstellen damit er sieht was f\u00fcr Dateien dort liegen und aus diesen ausw\u00e4hlen kann.\\n\\n\\n\\nSo entstand ein React-basiertes Tool names \\\"Easy Directory Listing for WordPress\\\" was bei GitHub als composer Package bereitsteht. Hier\u00fcber 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.\\n\\n\\n\\n\\n\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\n\\t\\tVerzeichnisansicht einer externen Quelle im Plugin \\\"Externe Dateien in der Mediathek\\\"\\n\\n\\n\\nKompatibilit\u00e4t mit anderen Plugins\\n\\n\\n\\nEin gro\u00dfes Manko der Mediathek in WordPress ist weiterhin, dass man Dateien dort nicht anordnen kann. Sie liegen einfach nur ohne Kategorisierung und Einordnung da. L\u00f6sen kann man das mit verschiedensten Plugins:\\n\\n\\n\\n\\nhttps:\/\/de.wordpress.org\/plugins\/filebird\/\\n\\n\\n\\nhttps:\/\/de.wordpress.org\/plugins\/ifolders\/\\n\\n\\n\\nhttps:\/\/de.wordpress.org\/plugins\/folders\/\\n\\n\\n\\nhttps:\/\/de.wordpress.org\/plugins\/real-media-library-lite\/\\n\\n\\n\\n\\n.. nur um einige zu nennen, es gibt noch weit mehr. Da mir bewusst ist, dass Anwender meines Plugins m\u00f6glicherweise die externen Dateien auch einordnen m\u00f6chten, schuf ich also eine Kompatibilit\u00e4t zu sehr vielen von diesen Drittanbieter-Plugins. Dadurch kann man beim Import festlegen, dass und wo man eine Datei einordnen m\u00f6chte, wenn man ein Plugin f\u00fcr Verzeichnisse in der Mediathek verwendet und \\\"Externe Dateien in der Mediathek\\\" daf\u00fcr eine Unterst\u00fctzung mitbringt.\\n\\n\\n\\nZus\u00e4tzlich dazu besteht auch eine Kompatibilit\u00e4t mit WooCommerce bei dessen CSV-basiertem Import sowie verschiedenen anderen Plugins, die mit Dateien in der Mediathek hantieren.\\n\\n\\n\\nSynchronisation\\n\\n\\n\\nNachdem der manuelle Weg f\u00fcr die verschiedensten Quellen so problemlos funktionierte, begann ich auch einen automatischen Weg zu \u00fcberlegen. Der Anwendungsfall k\u00f6nnte z.B. sein, dass man eine Galerie automatisch aktualisieren m\u00f6chte - einfach nur, weil in einer externen Quelle eine neue Datei liegt. Auch das kann das Plugin inzwischen und bietet es f\u00fcr nahezu alle externe Quellen an.\\n\\n\\n\\nExport von Dateien\\n\\n\\n\\nUnd 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\u00f6chte? Der klassische Fall vom Auslagern von Dateien (aka Offloading). Da ich schon die Verbindung zu den Quellen hatte, war es ein einfaches nun auch den Export von Dateien dorthin zu erm\u00f6glichen.\\n\\n\\n\\nLizenzierung als Herausforderung\\n\\n\\n\\nAnfang 2026 bat ich einige Freunde um einen Test der n\u00e4chsten Inkarnation des Plugins. Ich hatte bis dahin 7 Monate an einer Aktualisierung gearbeitet und wollte es endlich abschlie\u00dfen. Die R\u00fcckmeldungen waren zwiegespalten. Die einen waren \u00fcberw\u00e4ltigt von den M\u00f6glichkeiten und wussten nicht, wo sie \u00fcberhaupt was testen sollten. Andere begr\u00fc\u00dften die vielen gut formulierten Hinweise (zu dem Zeitpunkt alles in englisch) zur Handhabung von Funktionen.\\n\\n\\n\\nDaraufhin wollte ich das Plugin in Version 5.0.0 direkt ver\u00f6ffentlichen. Das Package war gigantische 6.8 MB gro\u00df geworden und enthielt alle ben\u00f6tigten Bibliotheken. Dadurch ergaben sich 2 Probleme, die mir vorher gar nicht bewusst gewesen sind:\\n\\n\\n\\n\\nDas Update per SVN ins WordPress Repository hochzuladen, geht nicht, da nach rund einer Stunde ein Timeout kommt. Diesen kann man auch nicht umgehen - er ist fest hinterlegt. Wie ich mitbekam war daran vor Jahren auch schonmal das Gutenberg-Team gescheitert.\\n\\n\\n\\nDadurch, dass ich mir die Dateien des Plugins auf Grund ihrer Menge nochmal anschauen musste, fiel mir auf, dass einige der verwendeten Bibliotheken gar nicht GPL-kompatibel sind.\\n\\n\\n\\n\\nDie L\u00f6sung war naheliegend: ich teilte das Plugin auf. Die nicht-GPL-kompatiblen Bibliotheken wanderten in eigene Plugins, die ich auf GitHub hosten konnte. Darunter fiel auch jegliche Unterst\u00fctzung f\u00fcr AWS S3-kompatible Cloud-Speicher. Aber daraus ergaben sich direkt einige Vorteile:\\n\\n\\n\\n\\nDie Funktionen des Plugins sind nicht mehr so erschlagend, wie von einigen Testern gemeldet.\\n\\n\\n\\nDas Package war wesentlich kleiner geworden und wird so auch ins SVN ver\u00f6ffentlicht werden k\u00f6nnen.\\n\\n\\n\\nIch gehe kein Risiko einer Mischung mit nicht-GPL-kompatiblen Bibliotheken ein, die zu einer Sperrung des Plugins im Repository f\u00fchren k\u00f6nnten.\\n\\n\\n\\nIch kann die Funktionen f\u00fcr einzelne externe Quellen in eigene Plugins kapseln, was es f\u00fcr mich \u00fcbersichtlicher und auch wartbarer macht.\\n\\n\\n\\nAndere Entwickler k\u00f6nnen ihre eigenen Plugins beisteuern um externe Quellen f\u00fcr mein Plugin bereitzustellen.\\n\\n\\n\\n\\nNach einigen Wochen waren die Plugins nun fertig f\u00fcr den Einsatz. Das Plugin hatte sich somit nochmals gewandelt, aber aus meiner Sicht zu seinem Vorteil.\\n\\n\\n\\nAbschlie\u00dfend\\n\\n\\n\\nMein oben formuliertes Konzept hat sich durch die vielf\u00e4ltigen M\u00f6glichkeiten, die das Plugin inzwischen bietet, gewandelt. Nach \u00fcber 3 Jahren Entwicklung w\u00fcrde ich es Anfang 2026 folgenderma\u00dfen umrei\u00dfen:\\n\\n\\n\\n\\nOptimierung der Verwaltung von Dateien in der Mediathek mit externen Quellen.\",\"datePublished\":\"2026-01-06T10:00+01:00\",\"url\":\"https:\/\/plugins.thomaszwirner.de\/en\/external-files-in-the-media-library\/the-plugin-concept\/\",\"upvoteCount\":1,\"author\":{\"@type\":\"Person\",\"name\":\"Thomas Zwirner\",\"url\":\"https:\/\/plugins.thomaszwirner.de\"}}}},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/plugins.thomaszwirner.de\/externe-dateien-in-der-mediathek\/das-plugin-konzept\/#primaryimage\",\"url\":\"https:\/\/plugins.thomaszwirner.de\/wp-content\/uploads\/2025\/10\/grafik-15.png\",\"contentUrl\":\"https:\/\/plugins.thomaszwirner.de\/wp-content\/uploads\/2025\/10\/grafik-15.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/plugins.thomaszwirner.de\/externe-dateien-in-der-mediathek\/das-plugin-konzept\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Startseite\",\"item\":\"https:\/\/plugins.thomaszwirner.de\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Das Plugin-Konzept\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/plugins.thomaszwirner.de\/#website\",\"url\":\"https:\/\/plugins.thomaszwirner.de\/\",\"name\":\"WordPress Plugins von Thomas Zwirner\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/plugins.thomaszwirner.de\/#\/schema\/person\/4dff08a99a879985211dc98128cb9140\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/plugins.thomaszwirner.de\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/plugins.thomaszwirner.de\/#\/schema\/person\/4dff08a99a879985211dc98128cb9140\",\"name\":\"Thomas Zwirner\",\"logo\":{\"@id\":\"https:\/\/plugins.thomaszwirner.de\/#\/schema\/person\/image\/\"},\"sameAs\":[\"https:\/\/www.thomaszwirner.de\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/plugins.thomaszwirner.de\/#\/schema\/person\/d3e8b1604002e6b915f31b48a86a7967\",\"name\":\"verwalter\",\"sameAs\":[\"https:\/\/plugins.thomaszwirner.de\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"The plugin concept - WordPress plugins by Thomas Zwirner","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/plugins.thomaszwirner.de\/en\/external-files-in-the-media-library\/the-plugin-concept\/","og_locale":"en_US","og_type":"article","og_title":"Das Plugin-Konzept - WordPress Plugins von Thomas Zwirner","og_description":"Wie ist das Plugin entstanden? Hier beschreibe ich den Hintergrund sowie das Konzept.","og_url":"https:\/\/plugins.thomaszwirner.de\/en\/external-files-in-the-media-library\/the-plugin-concept\/","og_site_name":"WordPress Plugins von Thomas Zwirner","article_published_time":"2026-01-06T09:00:00+00:00","article_modified_time":"2026-03-05T16:01:27+00:00","og_image":[{"width":800,"height":323,"url":"https:\/\/plugins.thomaszwirner.de\/wp-content\/uploads\/2025\/10\/grafik-15.png","type":"image\/png"}],"author":"verwalter","twitter_card":"summary_large_image","twitter_misc":{"Written by":"verwalter","Est. reading time":"10 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"TechArticle","@id":"https:\/\/plugins.thomaszwirner.de\/externe-dateien-in-der-mediathek\/das-plugin-konzept\/#article","isPartOf":{"@id":"https:\/\/plugins.thomaszwirner.de\/externe-dateien-in-der-mediathek\/das-plugin-konzept\/"},"author":{"name":"verwalter","@id":"https:\/\/plugins.thomaszwirner.de\/#\/schema\/person\/d3e8b1604002e6b915f31b48a86a7967"},"headline":"Das Plugin-Konzept","datePublished":"2026-01-06T09:00:00+00:00","dateModified":"2026-03-05T16:01:27+00:00","mainEntityOfPage":{"@id":"https:\/\/plugins.thomaszwirner.de\/externe-dateien-in-der-mediathek\/das-plugin-konzept\/"},"wordCount":1805,"commentCount":0,"publisher":{"@id":"https:\/\/plugins.thomaszwirner.de\/#\/schema\/person\/4dff08a99a879985211dc98128cb9140"},"image":{"@id":"https:\/\/plugins.thomaszwirner.de\/externe-dateien-in-der-mediathek\/das-plugin-konzept\/#primaryimage"},"thumbnailUrl":"https:\/\/plugins.thomaszwirner.de\/wp-content\/uploads\/2025\/10\/grafik-15.png","articleSection":["Externe Dateien in der Mediathek"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/plugins.thomaszwirner.de\/externe-dateien-in-der-mediathek\/das-plugin-konzept\/#respond"]}]},{"@type":["WebPage","QAPage"],"@id":"https:\/\/plugins.thomaszwirner.de\/externe-dateien-in-der-mediathek\/das-plugin-konzept\/","url":"https:\/\/plugins.thomaszwirner.de\/externe-dateien-in-der-mediathek\/das-plugin-konzept\/","name":"The plugin concept - WordPress plugins by Thomas Zwirner","isPartOf":{"@id":"https:\/\/plugins.thomaszwirner.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/plugins.thomaszwirner.de\/externe-dateien-in-der-mediathek\/das-plugin-konzept\/#primaryimage"},"image":{"@id":"https:\/\/plugins.thomaszwirner.de\/externe-dateien-in-der-mediathek\/das-plugin-konzept\/#primaryimage"},"thumbnailUrl":"https:\/\/plugins.thomaszwirner.de\/wp-content\/uploads\/2025\/10\/grafik-15.png","datePublished":"2026-01-06T09:00:00+00:00","dateModified":"2026-03-05T16:01:27+00:00","breadcrumb":{"@id":"https:\/\/plugins.thomaszwirner.de\/externe-dateien-in-der-mediathek\/das-plugin-konzept\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/plugins.thomaszwirner.de\/externe-dateien-in-der-mediathek\/das-plugin-konzept\/"]}],"mainEntity":{"@type":"Question","name":"Das Plugin-Konzept","answerCount":1,"datePublished":"2026-01-06T10:00+01:00","text":"Wie ist das Plugin entstanden? Hier beschreibe ich den Hintergrund sowie das Konzept.","author":{"@type":"Person","name":"Thomas Zwirner","url":"https:\/\/plugins.thomaszwirner.de"},"acceptedAnswer":{"@type":"Answer","text":"Das Plugin \"Externe Dateien f\u00fcr Mediathek\" hat sich im Laufe der Zeit aus einer kleinen Anwendung zu einem umfangreichen Tool entwickelt. Es kann helfen zahlreiche unterschiedlichste Anwendungsf\u00e4lle in Zusammenhang mit Dateien in WordPress zu l\u00f6sen. Hier erkl\u00e4re ich das Konzept dahinter um zu zeigen, welche M\u00f6glichkeiten es f\u00fcr sehr viele WordPress-basierte Projekte bieten kann.\n\n\n\nDie Entstehung\n\n\n\nUm das Konzept zu verstehen, muss man etwas von der Entstehungsgeschichte nachvollziehen k\u00f6nnen. Vor einigen Jahren hatte ich das Plugin Download Liste mit Icons entwickelt. Dieses erm\u00f6glicht die Ausgabe von Dateien in einer komfortablen Liste im Block Editor. Man ordnet Dateien aus der Mediathek dem Block zu und zeigt diese dann an.\n\n\n\nDie Anwender dieses Plugins sind interessanterweise vielfach im wissenschaftlichen Bereich t\u00e4tig. Hier geht es z.B. um PDF-basierte Dokumentationen von Ver\u00f6ffentlichungen. 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\u00f6nnen. Daraus ergab sich eine f\u00fcr mich v\u00f6llig neue Anforderung:\n\n\n\n\nAnwender meines Plugins ben\u00f6tigten eine M\u00f6glichkeit um URLs in den Block der Download Liste zu hinterlegen \ud83d\ude12\n\n\n\n\nIch versuchte erst mit React daf\u00fcr eine M\u00f6glichkeit zu schaffen, damit man das direkt am Block einf\u00fcgen kann. Ich scheiterte jedoch, was vor allem an der Nutzeroberfl\u00e4che, die hierf\u00fcr schlicht nicht geeignet war, lag.\n\n\n\nDas Grundkonzept\n\n\n\nZun\u00e4chst schaute ich mich um, ob im WordPress Plugin Repository sich irgendwo ein Plugin genau daf\u00fcr finden lassen w\u00fcrde. Ich fand interessanterweise ein paar kleine, die aber extrem veraltet waren. Sie erm\u00f6glichten z.B. den Download einer Datei per FTP in die Mediathek. War nicht ganz das was ich suchte. Und die Programmierweise dieser Plugins entsprach auch weder meinen Anspr\u00fcchen an Qualit\u00e4t noch denen des WordPress Repositories, die sich in letzter Zeit durchaus zum Positiven gewandelt hat.\n\n\n\nAlso entstand ein neues Plugin: Externe Dateien in der Mediathek. Ich erweiterte mit diesem die Mediathek um die M\u00f6glichkeit URLs f\u00fcr Dateien anzugeben, die dann im Projekt wie normale Medien-Dateien verwendet werden konnten.\n\n\n\nZun\u00e4chst 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\u00e4re, um externe Dateien als solche in der Mediathek zu speichern - und es funktionierte erstaunlich gut. Ich kam also zu meinem Grundkonzept f\u00fcr das Plugin:\n\n\n\n\nDie URL von externen Dateien in der Mediathek hinterlegen, nicht die Datei selbst.\n\n\n\n\nWarum gerade URL-basiert?\nDateien im Internet sind alle mit einer URL referenziert. Diese kann direkt erreichbar oder mit irgendeinem Zugriffsschutz versehen sein. Aber sie haben alle URLs.\n\n\n\n\nWarum nicht den \"Einbetten\" Block verwenden?\nMit diesem kann man wunderbare externe Inhalte in die eigene Website integrieren. Aber es erm\u00f6glicht eben nicht die Verlinkung in meinem Block f\u00fcr die Download Liste.\n\n\n\n\nDie Evolution des Plugins\n\n\n\nDamit hatte ich das eigentliche Ziel, externe URLs beim Plugin Download Liste mit Icons verwenden zu k\u00f6nnen, durchaus erreicht. Klar, ein weiteres Plugin was man installieren m\u00fcsste - aber wer es braucht wird es nutzen. Und so begann ich damit es St\u00fcck f\u00fcr St\u00fcck zu erweitern, meist aus eigenem Wunsch heraus, da ich es f\u00fcr mich als technische Herausforderung ansehe. Inzwischen \u00fcbersteigt es weit das urspr\u00fcngliche Ansinnen, eine Unterst\u00fctzung f\u00fcr mein anderes Plugin zu sein - beide sind jedoch weiterhin miteinander kompatibel.\n\n\n\nProtokolle\n\n\n\nURLs verwenden nat\u00fcrlich auch unterschiedliche Protokolle. HTTP kennt jeder, FTP sagt einigen auch noch etwas. Daneben gibt es noch HTTPS, SFTP, FTPS, SSH und andere (sogar so etwas wie Gopher). Die meisten sind zugangsgesch\u00fctzt, manche nur optional. Ich begann also damit diese Protokolle im Plugin mit zu unterst\u00fctzen.\n\n\n\nBesonders hilfreich bei dieser Entwicklung ist, dass WordPress selbst daf\u00fcr eigentlich schon alles mitbringt. Mit den auf WP_Filesystem() basierenden Objekten kann man problemlos verschiedenste Protokolle abfragen. Einige setzen nat\u00fcrlich serverseitig entsprechende PHP-Module voraus. Aber ich musste nicht das Rad neu erfinden.\n\n\n\nUnd so kam recht z\u00fcgig die Unterst\u00fctzung f\u00fcr viele verschiedene Protokolle in den URLs mit dazu.\n\n\n\nDateitypen\n\n\n\nWordPress selbst l\u00e4sst bei einer frischen Installation nur den Upload von bestimmten Dateitypen zu. PDF, JPG, PNG und andere geh\u00f6ren zum Alltag der meisten Anwender. Ich wollte mit meinem Plugin diese Regeln nicht erweitern, da Externe Dateien f\u00fcr die Mediathek sich um externe Dateien und nicht zur Verwaltung von Dateitypen k\u00fcmmern soll - daf\u00fcr gibt es andere sehr gute Plugins. Also greift mein Plugin auf diese Liste von WordPress zu (die andere Plugins erweitern k\u00f6nnen) um zu pr\u00fcfen, ob eine externe Datei zul\u00e4ssig ist. In den Einstellungen vom Plugin kann man zumindest noch w\u00e4hlen, welches Format, was WordPress unterst\u00fctzt, man f\u00fcr externe Dateien verwenden m\u00f6chte.\n\n\n\nDienste\n\n\n\nDa bis hierhin das Plugin \u00fcberaus zufriedenstellend lief, begann ich gr\u00f6\u00dfer zu denken. Was verwenden WordPress-Anwender zum Verwalten ihrer Dateien abseits von WordPress, die sie dann aber in ihr Projekt integrieren m\u00f6chten? Wie k\u00f6nnte ich denen die Arbeit erleichtern? Ich kam auf verschiedenste Dienstleister, die es erm\u00f6glichen Dateien zu verwalten. Und wie greift man von extern auf diese zu? Ja, per API.\n\n\n\nIch begann also St\u00fcck f\u00fcr St\u00fcck Dienstleister wie Dropbox, 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\u00fcr die Basis-Funkionen von \"Externe Dateien f\u00fcr die Mediathek\". Der Hauptaufwand bei der Implementierung bestand darin die jeweilige API kennenzulernen und anzubinden.\n\n\n\nDa ich selbst diese Plattformen selten bis gar nicht nutze, betrat ich f\u00fcr mich selbst Neuland - aber genau das fasziniert mich an der IT: die M\u00f6glichkeiten, die man hat ohne von ihnen zu wissen, und sie dann kennenzulernen.\n\n\n\nKomfortable Dateiansichten mit React\n\n\n\nBei all dem was ich bis hierher beschrieben habe, handelt es sich um T\u00e4tigkeiten im Hintergrund. Es entstehen Objekte und Aufgaben im Plugin die keine visuelle Ausgabe f\u00fcr den Anwender im Backend von WordPress haben. Aber ich musste f\u00fcr die Dienste dem Anwender auch eine Oberfl\u00e4che bereitstellen damit er sieht was f\u00fcr Dateien dort liegen und aus diesen ausw\u00e4hlen kann.\n\n\n\nSo entstand ein React-basiertes Tool names \"Easy Directory Listing for WordPress\" was bei GitHub als composer Package bereitsteht. Hier\u00fcber 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.\n\n\n\n\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\tVerzeichnisansicht einer externen Quelle im Plugin \"Externe Dateien in der Mediathek\"\n\n\n\nKompatibilit\u00e4t mit anderen Plugins\n\n\n\nEin gro\u00dfes Manko der Mediathek in WordPress ist weiterhin, dass man Dateien dort nicht anordnen kann. Sie liegen einfach nur ohne Kategorisierung und Einordnung da. L\u00f6sen kann man das mit verschiedensten Plugins:\n\n\n\n\nhttps:\/\/de.wordpress.org\/plugins\/filebird\/\n\n\n\nhttps:\/\/de.wordpress.org\/plugins\/ifolders\/\n\n\n\nhttps:\/\/de.wordpress.org\/plugins\/folders\/\n\n\n\nhttps:\/\/de.wordpress.org\/plugins\/real-media-library-lite\/\n\n\n\n\n.. nur um einige zu nennen, es gibt noch weit mehr. Da mir bewusst ist, dass Anwender meines Plugins m\u00f6glicherweise die externen Dateien auch einordnen m\u00f6chten, schuf ich also eine Kompatibilit\u00e4t zu sehr vielen von diesen Drittanbieter-Plugins. Dadurch kann man beim Import festlegen, dass und wo man eine Datei einordnen m\u00f6chte, wenn man ein Plugin f\u00fcr Verzeichnisse in der Mediathek verwendet und \"Externe Dateien in der Mediathek\" daf\u00fcr eine Unterst\u00fctzung mitbringt.\n\n\n\nZus\u00e4tzlich dazu besteht auch eine Kompatibilit\u00e4t mit WooCommerce bei dessen CSV-basiertem Import sowie verschiedenen anderen Plugins, die mit Dateien in der Mediathek hantieren.\n\n\n\nSynchronisation\n\n\n\nNachdem der manuelle Weg f\u00fcr die verschiedensten Quellen so problemlos funktionierte, begann ich auch einen automatischen Weg zu \u00fcberlegen. Der Anwendungsfall k\u00f6nnte z.B. sein, dass man eine Galerie automatisch aktualisieren m\u00f6chte - einfach nur, weil in einer externen Quelle eine neue Datei liegt. Auch das kann das Plugin inzwischen und bietet es f\u00fcr nahezu alle externe Quellen an.\n\n\n\nExport von Dateien\n\n\n\nUnd 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\u00f6chte? Der klassische Fall vom Auslagern von Dateien (aka Offloading). Da ich schon die Verbindung zu den Quellen hatte, war es ein einfaches nun auch den Export von Dateien dorthin zu erm\u00f6glichen.\n\n\n\nLizenzierung als Herausforderung\n\n\n\nAnfang 2026 bat ich einige Freunde um einen Test der n\u00e4chsten Inkarnation des Plugins. Ich hatte bis dahin 7 Monate an einer Aktualisierung gearbeitet und wollte es endlich abschlie\u00dfen. Die R\u00fcckmeldungen waren zwiegespalten. Die einen waren \u00fcberw\u00e4ltigt von den M\u00f6glichkeiten und wussten nicht, wo sie \u00fcberhaupt was testen sollten. Andere begr\u00fc\u00dften die vielen gut formulierten Hinweise (zu dem Zeitpunkt alles in englisch) zur Handhabung von Funktionen.\n\n\n\nDaraufhin wollte ich das Plugin in Version 5.0.0 direkt ver\u00f6ffentlichen. Das Package war gigantische 6.8 MB gro\u00df geworden und enthielt alle ben\u00f6tigten Bibliotheken. Dadurch ergaben sich 2 Probleme, die mir vorher gar nicht bewusst gewesen sind:\n\n\n\n\nDas Update per SVN ins WordPress Repository hochzuladen, geht nicht, da nach rund einer Stunde ein Timeout kommt. Diesen kann man auch nicht umgehen - er ist fest hinterlegt. Wie ich mitbekam war daran vor Jahren auch schonmal das Gutenberg-Team gescheitert.\n\n\n\nDadurch, dass ich mir die Dateien des Plugins auf Grund ihrer Menge nochmal anschauen musste, fiel mir auf, dass einige der verwendeten Bibliotheken gar nicht GPL-kompatibel sind.\n\n\n\n\nDie L\u00f6sung war naheliegend: ich teilte das Plugin auf. Die nicht-GPL-kompatiblen Bibliotheken wanderten in eigene Plugins, die ich auf GitHub hosten konnte. Darunter fiel auch jegliche Unterst\u00fctzung f\u00fcr AWS S3-kompatible Cloud-Speicher. Aber daraus ergaben sich direkt einige Vorteile:\n\n\n\n\nDie Funktionen des Plugins sind nicht mehr so erschlagend, wie von einigen Testern gemeldet.\n\n\n\nDas Package war wesentlich kleiner geworden und wird so auch ins SVN ver\u00f6ffentlicht werden k\u00f6nnen.\n\n\n\nIch gehe kein Risiko einer Mischung mit nicht-GPL-kompatiblen Bibliotheken ein, die zu einer Sperrung des Plugins im Repository f\u00fchren k\u00f6nnten.\n\n\n\nIch kann die Funktionen f\u00fcr einzelne externe Quellen in eigene Plugins kapseln, was es f\u00fcr mich \u00fcbersichtlicher und auch wartbarer macht.\n\n\n\nAndere Entwickler k\u00f6nnen ihre eigenen Plugins beisteuern um externe Quellen f\u00fcr mein Plugin bereitzustellen.\n\n\n\n\nNach einigen Wochen waren die Plugins nun fertig f\u00fcr den Einsatz. Das Plugin hatte sich somit nochmals gewandelt, aber aus meiner Sicht zu seinem Vorteil.\n\n\n\nAbschlie\u00dfend\n\n\n\nMein oben formuliertes Konzept hat sich durch die vielf\u00e4ltigen M\u00f6glichkeiten, die das Plugin inzwischen bietet, gewandelt. Nach \u00fcber 3 Jahren Entwicklung w\u00fcrde ich es Anfang 2026 folgenderma\u00dfen umrei\u00dfen:\n\n\n\n\nOptimierung der Verwaltung von Dateien in der Mediathek mit externen Quellen.","datePublished":"2026-01-06T10:00+01:00","url":"https:\/\/plugins.thomaszwirner.de\/en\/external-files-in-the-media-library\/the-plugin-concept\/","upvoteCount":1,"author":{"@type":"Person","name":"Thomas Zwirner","url":"https:\/\/plugins.thomaszwirner.de"}},"suggestedAnswer":{"@type":"Answer","text":"Das Plugin \"Externe Dateien f\u00fcr Mediathek\" hat sich im Laufe der Zeit aus einer kleinen Anwendung zu einem umfangreichen Tool entwickelt. Es kann helfen zahlreiche unterschiedlichste Anwendungsf\u00e4lle in Zusammenhang mit Dateien in WordPress zu l\u00f6sen. Hier erkl\u00e4re ich das Konzept dahinter um zu zeigen, welche M\u00f6glichkeiten es f\u00fcr sehr viele WordPress-basierte Projekte bieten kann.\n\n\n\nDie Entstehung\n\n\n\nUm das Konzept zu verstehen, muss man etwas von der Entstehungsgeschichte nachvollziehen k\u00f6nnen. Vor einigen Jahren hatte ich das Plugin Download Liste mit Icons entwickelt. Dieses erm\u00f6glicht die Ausgabe von Dateien in einer komfortablen Liste im Block Editor. Man ordnet Dateien aus der Mediathek dem Block zu und zeigt diese dann an.\n\n\n\nDie Anwender dieses Plugins sind interessanterweise vielfach im wissenschaftlichen Bereich t\u00e4tig. Hier geht es z.B. um PDF-basierte Dokumentationen von Ver\u00f6ffentlichungen. 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\u00f6nnen. Daraus ergab sich eine f\u00fcr mich v\u00f6llig neue Anforderung:\n\n\n\n\nAnwender meines Plugins ben\u00f6tigten eine M\u00f6glichkeit um URLs in den Block der Download Liste zu hinterlegen \ud83d\ude12\n\n\n\n\nIch versuchte erst mit React daf\u00fcr eine M\u00f6glichkeit zu schaffen, damit man das direkt am Block einf\u00fcgen kann. Ich scheiterte jedoch, was vor allem an der Nutzeroberfl\u00e4che, die hierf\u00fcr schlicht nicht geeignet war, lag.\n\n\n\nDas Grundkonzept\n\n\n\nZun\u00e4chst schaute ich mich um, ob im WordPress Plugin Repository sich irgendwo ein Plugin genau daf\u00fcr finden lassen w\u00fcrde. Ich fand interessanterweise ein paar kleine, die aber extrem veraltet waren. Sie erm\u00f6glichten z.B. den Download einer Datei per FTP in die Mediathek. War nicht ganz das was ich suchte. Und die Programmierweise dieser Plugins entsprach auch weder meinen Anspr\u00fcchen an Qualit\u00e4t noch denen des WordPress Repositories, die sich in letzter Zeit durchaus zum Positiven gewandelt hat.\n\n\n\nAlso entstand ein neues Plugin: Externe Dateien in der Mediathek. Ich erweiterte mit diesem die Mediathek um die M\u00f6glichkeit URLs f\u00fcr Dateien anzugeben, die dann im Projekt wie normale Medien-Dateien verwendet werden konnten.\n\n\n\nZun\u00e4chst 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\u00e4re, um externe Dateien als solche in der Mediathek zu speichern - und es funktionierte erstaunlich gut. Ich kam also zu meinem Grundkonzept f\u00fcr das Plugin:\n\n\n\n\nDie URL von externen Dateien in der Mediathek hinterlegen, nicht die Datei selbst.\n\n\n\n\nWarum gerade URL-basiert?\nDateien im Internet sind alle mit einer URL referenziert. Diese kann direkt erreichbar oder mit irgendeinem Zugriffsschutz versehen sein. Aber sie haben alle URLs.\n\n\n\n\nWarum nicht den \"Einbetten\" Block verwenden?\nMit diesem kann man wunderbare externe Inhalte in die eigene Website integrieren. Aber es erm\u00f6glicht eben nicht die Verlinkung in meinem Block f\u00fcr die Download Liste.\n\n\n\n\nDie Evolution des Plugins\n\n\n\nDamit hatte ich das eigentliche Ziel, externe URLs beim Plugin Download Liste mit Icons verwenden zu k\u00f6nnen, durchaus erreicht. Klar, ein weiteres Plugin was man installieren m\u00fcsste - aber wer es braucht wird es nutzen. Und so begann ich damit es St\u00fcck f\u00fcr St\u00fcck zu erweitern, meist aus eigenem Wunsch heraus, da ich es f\u00fcr mich als technische Herausforderung ansehe. Inzwischen \u00fcbersteigt es weit das urspr\u00fcngliche Ansinnen, eine Unterst\u00fctzung f\u00fcr mein anderes Plugin zu sein - beide sind jedoch weiterhin miteinander kompatibel.\n\n\n\nProtokolle\n\n\n\nURLs verwenden nat\u00fcrlich auch unterschiedliche Protokolle. HTTP kennt jeder, FTP sagt einigen auch noch etwas. Daneben gibt es noch HTTPS, SFTP, FTPS, SSH und andere (sogar so etwas wie Gopher). Die meisten sind zugangsgesch\u00fctzt, manche nur optional. Ich begann also damit diese Protokolle im Plugin mit zu unterst\u00fctzen.\n\n\n\nBesonders hilfreich bei dieser Entwicklung ist, dass WordPress selbst daf\u00fcr eigentlich schon alles mitbringt. Mit den auf WP_Filesystem() basierenden Objekten kann man problemlos verschiedenste Protokolle abfragen. Einige setzen nat\u00fcrlich serverseitig entsprechende PHP-Module voraus. Aber ich musste nicht das Rad neu erfinden.\n\n\n\nUnd so kam recht z\u00fcgig die Unterst\u00fctzung f\u00fcr viele verschiedene Protokolle in den URLs mit dazu.\n\n\n\nDateitypen\n\n\n\nWordPress selbst l\u00e4sst bei einer frischen Installation nur den Upload von bestimmten Dateitypen zu. PDF, JPG, PNG und andere geh\u00f6ren zum Alltag der meisten Anwender. Ich wollte mit meinem Plugin diese Regeln nicht erweitern, da Externe Dateien f\u00fcr die Mediathek sich um externe Dateien und nicht zur Verwaltung von Dateitypen k\u00fcmmern soll - daf\u00fcr gibt es andere sehr gute Plugins. Also greift mein Plugin auf diese Liste von WordPress zu (die andere Plugins erweitern k\u00f6nnen) um zu pr\u00fcfen, ob eine externe Datei zul\u00e4ssig ist. In den Einstellungen vom Plugin kann man zumindest noch w\u00e4hlen, welches Format, was WordPress unterst\u00fctzt, man f\u00fcr externe Dateien verwenden m\u00f6chte.\n\n\n\nDienste\n\n\n\nDa bis hierhin das Plugin \u00fcberaus zufriedenstellend lief, begann ich gr\u00f6\u00dfer zu denken. Was verwenden WordPress-Anwender zum Verwalten ihrer Dateien abseits von WordPress, die sie dann aber in ihr Projekt integrieren m\u00f6chten? Wie k\u00f6nnte ich denen die Arbeit erleichtern? Ich kam auf verschiedenste Dienstleister, die es erm\u00f6glichen Dateien zu verwalten. Und wie greift man von extern auf diese zu? Ja, per API.\n\n\n\nIch begann also St\u00fcck f\u00fcr St\u00fcck Dienstleister wie Dropbox, 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\u00fcr die Basis-Funkionen von \"Externe Dateien f\u00fcr die Mediathek\". Der Hauptaufwand bei der Implementierung bestand darin die jeweilige API kennenzulernen und anzubinden.\n\n\n\nDa ich selbst diese Plattformen selten bis gar nicht nutze, betrat ich f\u00fcr mich selbst Neuland - aber genau das fasziniert mich an der IT: die M\u00f6glichkeiten, die man hat ohne von ihnen zu wissen, und sie dann kennenzulernen.\n\n\n\nKomfortable Dateiansichten mit React\n\n\n\nBei all dem was ich bis hierher beschrieben habe, handelt es sich um T\u00e4tigkeiten im Hintergrund. Es entstehen Objekte und Aufgaben im Plugin die keine visuelle Ausgabe f\u00fcr den Anwender im Backend von WordPress haben. Aber ich musste f\u00fcr die Dienste dem Anwender auch eine Oberfl\u00e4che bereitstellen damit er sieht was f\u00fcr Dateien dort liegen und aus diesen ausw\u00e4hlen kann.\n\n\n\nSo entstand ein React-basiertes Tool names \"Easy Directory Listing for WordPress\" was bei GitHub als composer Package bereitsteht. Hier\u00fcber 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.\n\n\n\n\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\tVerzeichnisansicht einer externen Quelle im Plugin \"Externe Dateien in der Mediathek\"\n\n\n\nKompatibilit\u00e4t mit anderen Plugins\n\n\n\nEin gro\u00dfes Manko der Mediathek in WordPress ist weiterhin, dass man Dateien dort nicht anordnen kann. Sie liegen einfach nur ohne Kategorisierung und Einordnung da. L\u00f6sen kann man das mit verschiedensten Plugins:\n\n\n\n\nhttps:\/\/de.wordpress.org\/plugins\/filebird\/\n\n\n\nhttps:\/\/de.wordpress.org\/plugins\/ifolders\/\n\n\n\nhttps:\/\/de.wordpress.org\/plugins\/folders\/\n\n\n\nhttps:\/\/de.wordpress.org\/plugins\/real-media-library-lite\/\n\n\n\n\n.. nur um einige zu nennen, es gibt noch weit mehr. Da mir bewusst ist, dass Anwender meines Plugins m\u00f6glicherweise die externen Dateien auch einordnen m\u00f6chten, schuf ich also eine Kompatibilit\u00e4t zu sehr vielen von diesen Drittanbieter-Plugins. Dadurch kann man beim Import festlegen, dass und wo man eine Datei einordnen m\u00f6chte, wenn man ein Plugin f\u00fcr Verzeichnisse in der Mediathek verwendet und \"Externe Dateien in der Mediathek\" daf\u00fcr eine Unterst\u00fctzung mitbringt.\n\n\n\nZus\u00e4tzlich dazu besteht auch eine Kompatibilit\u00e4t mit WooCommerce bei dessen CSV-basiertem Import sowie verschiedenen anderen Plugins, die mit Dateien in der Mediathek hantieren.\n\n\n\nSynchronisation\n\n\n\nNachdem der manuelle Weg f\u00fcr die verschiedensten Quellen so problemlos funktionierte, begann ich auch einen automatischen Weg zu \u00fcberlegen. Der Anwendungsfall k\u00f6nnte z.B. sein, dass man eine Galerie automatisch aktualisieren m\u00f6chte - einfach nur, weil in einer externen Quelle eine neue Datei liegt. Auch das kann das Plugin inzwischen und bietet es f\u00fcr nahezu alle externe Quellen an.\n\n\n\nExport von Dateien\n\n\n\nUnd 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\u00f6chte? Der klassische Fall vom Auslagern von Dateien (aka Offloading). Da ich schon die Verbindung zu den Quellen hatte, war es ein einfaches nun auch den Export von Dateien dorthin zu erm\u00f6glichen.\n\n\n\nLizenzierung als Herausforderung\n\n\n\nAnfang 2026 bat ich einige Freunde um einen Test der n\u00e4chsten Inkarnation des Plugins. Ich hatte bis dahin 7 Monate an einer Aktualisierung gearbeitet und wollte es endlich abschlie\u00dfen. Die R\u00fcckmeldungen waren zwiegespalten. Die einen waren \u00fcberw\u00e4ltigt von den M\u00f6glichkeiten und wussten nicht, wo sie \u00fcberhaupt was testen sollten. Andere begr\u00fc\u00dften die vielen gut formulierten Hinweise (zu dem Zeitpunkt alles in englisch) zur Handhabung von Funktionen.\n\n\n\nDaraufhin wollte ich das Plugin in Version 5.0.0 direkt ver\u00f6ffentlichen. Das Package war gigantische 6.8 MB gro\u00df geworden und enthielt alle ben\u00f6tigten Bibliotheken. Dadurch ergaben sich 2 Probleme, die mir vorher gar nicht bewusst gewesen sind:\n\n\n\n\nDas Update per SVN ins WordPress Repository hochzuladen, geht nicht, da nach rund einer Stunde ein Timeout kommt. Diesen kann man auch nicht umgehen - er ist fest hinterlegt. Wie ich mitbekam war daran vor Jahren auch schonmal das Gutenberg-Team gescheitert.\n\n\n\nDadurch, dass ich mir die Dateien des Plugins auf Grund ihrer Menge nochmal anschauen musste, fiel mir auf, dass einige der verwendeten Bibliotheken gar nicht GPL-kompatibel sind.\n\n\n\n\nDie L\u00f6sung war naheliegend: ich teilte das Plugin auf. Die nicht-GPL-kompatiblen Bibliotheken wanderten in eigene Plugins, die ich auf GitHub hosten konnte. Darunter fiel auch jegliche Unterst\u00fctzung f\u00fcr AWS S3-kompatible Cloud-Speicher. Aber daraus ergaben sich direkt einige Vorteile:\n\n\n\n\nDie Funktionen des Plugins sind nicht mehr so erschlagend, wie von einigen Testern gemeldet.\n\n\n\nDas Package war wesentlich kleiner geworden und wird so auch ins SVN ver\u00f6ffentlicht werden k\u00f6nnen.\n\n\n\nIch gehe kein Risiko einer Mischung mit nicht-GPL-kompatiblen Bibliotheken ein, die zu einer Sperrung des Plugins im Repository f\u00fchren k\u00f6nnten.\n\n\n\nIch kann die Funktionen f\u00fcr einzelne externe Quellen in eigene Plugins kapseln, was es f\u00fcr mich \u00fcbersichtlicher und auch wartbarer macht.\n\n\n\nAndere Entwickler k\u00f6nnen ihre eigenen Plugins beisteuern um externe Quellen f\u00fcr mein Plugin bereitzustellen.\n\n\n\n\nNach einigen Wochen waren die Plugins nun fertig f\u00fcr den Einsatz. Das Plugin hatte sich somit nochmals gewandelt, aber aus meiner Sicht zu seinem Vorteil.\n\n\n\nAbschlie\u00dfend\n\n\n\nMein oben formuliertes Konzept hat sich durch die vielf\u00e4ltigen M\u00f6glichkeiten, die das Plugin inzwischen bietet, gewandelt. Nach \u00fcber 3 Jahren Entwicklung w\u00fcrde ich es Anfang 2026 folgenderma\u00dfen umrei\u00dfen:\n\n\n\n\nOptimierung der Verwaltung von Dateien in der Mediathek mit externen Quellen.","datePublished":"2026-01-06T10:00+01:00","url":"https:\/\/plugins.thomaszwirner.de\/en\/external-files-in-the-media-library\/the-plugin-concept\/","upvoteCount":1,"author":{"@type":"Person","name":"Thomas Zwirner","url":"https:\/\/plugins.thomaszwirner.de"}}}},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/plugins.thomaszwirner.de\/externe-dateien-in-der-mediathek\/das-plugin-konzept\/#primaryimage","url":"https:\/\/plugins.thomaszwirner.de\/wp-content\/uploads\/2025\/10\/grafik-15.png","contentUrl":"https:\/\/plugins.thomaszwirner.de\/wp-content\/uploads\/2025\/10\/grafik-15.png"},{"@type":"BreadcrumbList","@id":"https:\/\/plugins.thomaszwirner.de\/externe-dateien-in-der-mediathek\/das-plugin-konzept\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Startseite","item":"https:\/\/plugins.thomaszwirner.de\/"},{"@type":"ListItem","position":2,"name":"Das Plugin-Konzept"}]},{"@type":"WebSite","@id":"https:\/\/plugins.thomaszwirner.de\/#website","url":"https:\/\/plugins.thomaszwirner.de\/","name":"WordPress Plugins from Thomas Zwirner","description":"","publisher":{"@id":"https:\/\/plugins.thomaszwirner.de\/#\/schema\/person\/4dff08a99a879985211dc98128cb9140"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/plugins.thomaszwirner.de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/plugins.thomaszwirner.de\/#\/schema\/person\/4dff08a99a879985211dc98128cb9140","name":"Thomas Zwirner","logo":{"@id":"https:\/\/plugins.thomaszwirner.de\/#\/schema\/person\/image\/"},"sameAs":["https:\/\/www.thomaszwirner.de"]},{"@type":"Person","@id":"https:\/\/plugins.thomaszwirner.de\/#\/schema\/person\/d3e8b1604002e6b915f31b48a86a7967","name":"administrator","sameAs":["https:\/\/plugins.thomaszwirner.de"]}]}},"_links":{"self":[{"href":"https:\/\/plugins.thomaszwirner.de\/en\/wp-json\/wp\/v2\/posts\/451","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/plugins.thomaszwirner.de\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/plugins.thomaszwirner.de\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/plugins.thomaszwirner.de\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/plugins.thomaszwirner.de\/en\/wp-json\/wp\/v2\/comments?post=451"}],"version-history":[{"count":15,"href":"https:\/\/plugins.thomaszwirner.de\/en\/wp-json\/wp\/v2\/posts\/451\/revisions"}],"predecessor-version":[{"id":914,"href":"https:\/\/plugins.thomaszwirner.de\/en\/wp-json\/wp\/v2\/posts\/451\/revisions\/914"}],"wp:attachment":[{"href":"https:\/\/plugins.thomaszwirner.de\/en\/wp-json\/wp\/v2\/media?parent=451"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/plugins.thomaszwirner.de\/en\/wp-json\/wp\/v2\/categories?post=451"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/plugins.thomaszwirner.de\/en\/wp-json\/wp\/v2\/tags?post=451"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}