{"id":20861,"date":"2026-10-10T13:04:00","date_gmt":"2026-10-10T11:04:00","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/blog\/?p=20861"},"modified":"2026-10-09T22:29:14","modified_gmt":"2026-10-09T20:29:14","slug":"readme-plugin-header-und-svn","status":"publish","type":"post","link":"https:\/\/www.lukaswojcik.com\/blog\/de\/wordpress-plugins-tricks-de\/readme-plugin-header-und-svn\/","title":{"rendered":"readme.txt, Plugin-Header und SVN: wie WordPress.org sie liest"},"content":{"rendered":"<p>Ein Plugin im Verzeichnis von WordPress.org wird durch zwei Textquellen beschrieben, die unterschiedliche Fragen beantworten. Den Kommentar-Header oben in der PHP-Hauptdatei lesen WordPress selbst und das Verzeichnis, die <code>readme.txt<\/code> liest nur das Verzeichnis. Welche der beiden Quellen gilt, ist auf den ersten Blick nicht klar: Der Download-Button zeigt die Version aus dem Header, die Kurzbeschreibung unter dem Plugin-Namen stammt aus der Readme, und f\u00fcr \u201eRequires at least\u201c d\u00fcrfen beide Dateien einen Wert enthalten. Dazu kommt, dass das SVN-Repository dar\u00fcber entscheidet, welche Kopie der Readme \u00fcberhaupt gelesen wird.<\/p>\n<p>Dieser Beitrag geht beide Dateien mit vollst\u00e4ndigen Beispielen durch, kl\u00e4rt anhand des Import-Codes des Verzeichnisses, welches Feld bei Widerspruch gewinnt, erkl\u00e4rt den Aufbau aus <code>trunk\/<\/code>, <code>tags\/<\/code> und <code>assets\/<\/code> mit einer kompletten Befehlsfolge und listet die Fehler, die Readme-Validator und Importer melden. <a href=\"https:\/\/www.lukaswojcik.com\/blog\/de\/wordpress-plugins-tricks-de\/plugin-verzeichnis-richtlinien\/\">Review<\/a> und <a href=\"https:\/\/www.lukaswojcik.com\/blog\/de\/wordpress-plugins-tricks-de\/tutorials-de-wordpress-plugins-tricks-de\/plugin-check-lokal-und-ci\/\">Plugin Check<\/a> behandeln eigene Beitr\u00e4ge dieser Reihe.<\/p>\n<h2>Der Plugin-Header in der Hauptdatei<\/h2>\n<p>WordPress erkennt ein Plugin an einem Kommentarblock, der mindestens die Zeile <code>Plugin Name:<\/code> enth\u00e4lt. Alle weiteren Felder sind optional, mehrere davon wertet aber das Verzeichnis aus. Beim Import einer Version durchsucht es die PHP-Dateien im Wurzelverzeichnis des ver\u00f6ffentlichten Ordners und nimmt die erste Datei, deren Header einen Plugin-Namen tr\u00e4gt. Deshalb verlangt das Plugin-Handbuch, dass die Hauptdatei direkt in <code>trunk\/<\/code> liegt: Ein Pfad wie <code>trunk\/my-plugin\/my-plugin.php<\/code> macht die Downloads kaputt. Unterordner f\u00fcr eingebundene Dateien sind dagegen kein Problem.<\/p>\n<p>Die folgende Hauptdatei ist vollst\u00e4ndig und l\u00e4sst sich so aktivieren; das kleine Beispiel-Plugin \u201eLW Reading Time\u201c begleitet den ganzen Beitrag:<\/p>\n<pre><code>&lt;?php\n\/**\n * Plugin Name:       LW Reading Time\n * Plugin URI:        https:\/\/lukaswojcik.com\/plugins\/lw-reading-time\/\n * Description:       Shows the estimated reading time above single posts.\n * Version:           1.2.0\n * Requires at least: 6.5\n * Requires PHP:      7.4\n * Author:            Lukas Wojcik\n * Author URI:        https:\/\/lukaswojcik.com\/\n * License:           GPLv2 or later\n * License URI:       https:\/\/www.gnu.org\/licenses\/gpl-2.0.html\n * Text Domain:       lw-reading-time\n *\n * @package LW_Reading_Time\n *\/\n\nif ( ! defined( 'ABSPATH' ) ) {\n\texit;\n}\n\n\/**\n * Prepends the estimated reading time to the content of single posts.\n *\n * @param string $content Post content.\n * @return string Filtered content.\n *\/\nfunction lw_reading_time_prepend( $content ) {\n\tif ( ! is_singular( 'post' ) || ! in_the_loop() || ! is_main_query() ) {\n\t\treturn $content;\n\t}\n\n\t$words   = str_word_count( wp_strip_all_tags( $content ) );\n\t$minutes = max( 1, (int) ceil( $words \/ 200 ) );\n\n\t$label = sprintf(\n\t\t\/* translators: %d: number of minutes. *\/\n\t\t_n( '%d minute read', '%d minutes read', $minutes, 'lw-reading-time' ),\n\t\t$minutes\n\t);\n\n\treturn '&lt;p class=\"lw-reading-time\"&gt;' . esc_html( $label ) . '&lt;\/p&gt;' . $content;\n}\nadd_filter( 'the_content', 'lw_reading_time_prepend' );<\/code><\/pre>\n<p>Einige Felder verdienen einen genaueren Blick:<\/p>\n<ul>\n<li><strong>Version<\/strong> wird mit PHPs <code>version_compare()<\/code> verglichen; <code>1.02<\/code> gilt daher als gr\u00f6\u00dfer als <code>1.1<\/code>. Der Importer warnt bei allem au\u00dfer Ziffern, Punkten und einem optionalen Suffix <code>-rc<\/code>, <code>-beta<\/code> oder <code>-alpha<\/code> und lehnt Versionsangaben ab, die als Ordnerpfad unsicher w\u00e4ren.<\/li>\n<li><strong>Requires at least<\/strong> und <strong>Requires PHP<\/strong> sind die Versionsanforderungen, die WordPress selbst bei der Aktivierung pr\u00fcft; seit WordPress 6.5 pr\u00fcft es au\u00dferdem <strong>Requires Plugins<\/strong>. Seit WordPress 5.8 wird die Readme daf\u00fcr nicht mehr ausgewertet; <code>validate_plugin_requirements()<\/code> im Core liest ausschlie\u00dflich den Header \u00fcber <code>get_plugin_data()<\/code>.<\/li>\n<li><strong>Description<\/strong> erscheint in der Plugin-Liste im Backend (laut Handbuch unter 140 Zeichen); im Verzeichnis dient sie nur als Ersatz.<\/li>\n<li><strong>Requires Plugins<\/strong> (seit WordPress 6.5) erwartet eine kommagetrennte Liste von Verzeichnis-Slugs wie <code>woocommerce<\/code>, keine Pfade wie <code>my-plugin\/my-plugin.php<\/code>. Plugins auf WordPress.org d\u00fcrfen nur von Plugins abh\u00e4ngen, die ebenfalls dort liegen. L\u00e4sst sich ein Slug keinem ver\u00f6ffentlichten Plugin zuordnen, bricht der Importer die Version ab.<\/li>\n<li><strong>Update URI<\/strong> geh\u00f6rt nicht in ein Verzeichnis-Plugin. Der Importer akzeptiert das Feld nur, wenn es auf die eigene Adresse unter <code>wordpress.org\/plugins\/&lt;slug&gt;<\/code> zeigt, und bricht sonst ab.<\/li>\n<li><strong>Text Domain<\/strong> entspricht dem Slug; \u00dcbersetzungen sind Thema <span class=\"lw-artikel-geplant\">eines eigenen Beitrags dieser Reihe<\/span>.<\/li>\n<\/ul>\n<h2>Die readme.txt: Kopffelder, Kurzbeschreibung, Abschnitte<\/h2>\n<p>Die Readme nutzt einen angepassten Markdown-Dialekt mit \u00dcberschriften in <code>==<\/code>. Eine vollst\u00e4ndige Readme f\u00fcr das Beispiel-Plugin sieht so aus:<\/p>\n<pre><code>=== LW Reading Time ===\nContributors: lukaswojcik\nTags: reading time, posts, content\nRequires at least: 6.5\nTested up to: 7.1\nRequires PHP: 7.4\nStable tag: 1.2.0\nLicense: GPLv2 or later\nLicense URI: https:\/\/www.gnu.org\/licenses\/gpl-2.0.html\n\nShows the estimated reading time above single posts, based on the word count of the post content.\n\n== Description ==\n\nLW Reading Time counts the words of a post and shows the estimated reading time above the content of single posts.\n\n* No settings page, no database tables.\n* The output is a single paragraph with the class `lw-reading-time`.\n* Translations are managed on translate.wordpress.org.\n\n== Installation ==\n\n1. Install the plugin via Plugins &gt; Add New, or upload the folder `lw-reading-time` to `\/wp-content\/plugins\/`.\n2. Activate the plugin.\n3. Open any single post; the reading time appears above the content.\n\n== Frequently Asked Questions ==\n\n= How is the reading time calculated? =\n\nThe word count of the post content is divided by 200 and rounded up to full minutes.\n\n= Does the plugin change pages? =\n\nNo. Only single posts of the post type `post` are changed.\n\n== Screenshots ==\n\n1. Reading time above a single post.\n2. The same post with the Polish translation active.\n\n== Changelog ==\n\n= 1.2.0 =\n* Plural forms for the reading time label.\n* WordPress 6.5 or later is required.\n\n= 1.1.0 =\n* Output limited to the main query.\n\n== Upgrade Notice ==\n\n= 1.2.0 =\nAdds plural forms. WordPress 6.5 or later is now required.<\/code><\/pre>\n<h3>Kopffelder<\/h3>\n<ul>\n<li><strong>Contributors<\/strong> muss Benutzernamen von WordPress.org enthalten. Der Parser entfernt ein f\u00fchrendes <code>@<\/code>, sucht jeden Eintrag zuerst als Login-Namen und dann als Profil-Slug und verwirft mit einer Warnung alles, was er nicht findet. Das Handbuch bezeichnet die Liste als gro\u00df- und kleinschreibungssensitiv.<\/li>\n<li><strong>Tags<\/strong> nimmt h\u00f6chstens f\u00fcnf Begriffe auf, der Rest wird mit Warnung ignoriert. Die Tags <code>plugin<\/code> und <code>wordpress<\/code> fallen ganz weg, und der Validator vermerkt Tags, die weniger als f\u00fcnf Plugins nutzen. Namen von Konkurrenz-Plugins sind laut Handbuch als Tags nicht erlaubt.<\/li>\n<li><strong>Tested up to<\/strong> soll nur Zahlen enthalten, etwa <code>7.1<\/code>. Das Verzeichnis ignoriert Unterversionen und erg\u00e4nzt die aktuelle selbst; deshalb zeigt die Seite von Plugin Check derzeit \u201eTested up to 7.0.6\u201c. Werte, die mehr als eine Hauptversion \u00fcber dem aktuellen stabilen Zweig liegen, verwirft der Parser: Mit WordPress 7.1.2 als aktueller Version am 29.09.2026 wird <code>7.2<\/code> angenommen, <code>7.3<\/code> nicht.<\/li>\n<li><strong>Requires PHP<\/strong> muss die Form <code>x.y<\/code> oder <code>x.y.z<\/code> haben, sonst wird der Wert mit Warnung ignoriert.<\/li>\n<li><strong>License<\/strong> wird gegen Schlagwortlisten gepr\u00fcft. Begriffe wie \u201eNonCommercial\u201c oder \u201eproprietary\u201c f\u00fchren im Validator zu einem Fehler, eine unbekannte Lizenz nur zu einem Hinweis.<\/li>\n<li><strong>Stable tag<\/strong> steuert den gesamten SVN-Mechanismus und bekommt unten einen eigenen Abschnitt.<\/li>\n<\/ul>\n<h3>Kurzbeschreibung und Abschnitte<\/h3>\n<p>Der Text nach den Kopffeldern bis zur ersten Abschnitts\u00fcberschrift ist die Kurzbeschreibung, also die Zeile direkt unter dem Plugin-Namen; mehrere Zeilen oder Abs\u00e4tze f\u00fcgt der Parser zu einer zusammen. Der Parser erlaubt 150 Zeichen, gez\u00e4hlt nach dem Entfernen von Markdown und HTML. L\u00e4ngerer Text wird an einem Punkt im letzten F\u00fcnftel der Grenze abgeschnitten, andernfalls mit Auslassungszeichen, und der Validator warnt. Fehlt die Zeile, springt die erste Zeile der Beschreibung ein.<\/p>\n<p>Erwartet werden die Abschnitte Description, Installation, Frequently Asked Questions, Screenshots, Changelog und Upgrade Notice. Unbekannte Abschnitte gehen nicht verloren, sondern werden mit ihrem Titel als Zwischen\u00fcberschrift an die Beschreibung angeh\u00e4ngt. Jeder Abschnitt ist auf 2500 W\u00f6rter begrenzt, FAQ und Changelog auf 5000; l\u00e4ngerer Text wird gek\u00fcrzt. FAQ-Eintr\u00e4ge in der Form <code>= Frage =<\/code> werden auf der Plugin-Seite zu einer Definitionsliste, und die nummerierten Zeilen unter Screenshots werden zu den Bildunterschriften von <code>screenshot-1<\/code>, <code>screenshot-2<\/code> und so weiter. Das Handbuch warnt, dass Readme-Dateien \u00fcber 10 kB Fehler verursachen k\u00f6nnen, und empfiehlt, \u00e4ltere Changelog-Eintr\u00e4ge in eine eigene <code>changelog.txt<\/code> auszulagern.<\/p>\n<p>Die Upgrade Notice ist kein Reiter auf der Plugin-Seite. Der Importer speichert sie getrennt, die Verzeichnis-API liefert sie aus, und WordPress zeigt sie als reinen Text unter Dashboard \u2192 Aktualisierungen neben dem anstehenden Update. Die offizielle Beispiel-Readme empfiehlt h\u00f6chstens 300 Zeichen; der Parser setzt diese Grenze nicht durch.<\/p>\n<h2>Welcher Wert gewinnt, wenn Header und Readme sich widersprechen<\/h2>\n<p>Das Handbuch sagt nur allgemein, dass die Version aus der Hauptdatei kommt und der Rest aus der Readme. Der Import-Code des Verzeichnisses ist genauer. Die Tabelle fasst zusammen, was er mit Stand 29.09.2026 tut:<\/p>\n<table>\n<thead>\n<tr>\n<th>Anzeige auf der Plugin-Seite<\/th>\n<th>Gewinnender Wert<\/th>\n<th>Ersatz<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Plugin-Name (Seitentitel)<\/td>\n<td>Titelzeile der Readme <code>=== \u2026 ===<\/code>, sofern nicht gleich dem Slug<\/td>\n<td>Header <code>Plugin Name<\/code><\/td>\n<\/tr>\n<tr>\n<td>Zeile unter dem Namen<\/td>\n<td>Kurzbeschreibung der Readme<\/td>\n<td>Header <code>Description<\/code><\/td>\n<\/tr>\n<tr>\n<td>Version, Download-Button<\/td>\n<td>Header <code>Version<\/code><\/td>\n<td>keiner<\/td>\n<\/tr>\n<tr>\n<td>\u201eWordPress version \u2026 or higher\u201c<\/td>\n<td>Header <code>Requires at least<\/code>, wenn wohlgeformt<\/td>\n<td>Readme<\/td>\n<\/tr>\n<tr>\n<td>\u201ePHP version \u2026 or higher\u201c<\/td>\n<td>Header <code>Requires PHP<\/code>, wenn wohlgeformt<\/td>\n<td>Readme<\/td>\n<\/tr>\n<tr>\n<td>\u201eTested up to\u201c<\/td>\n<td>Header <code>Tested up to<\/code>, wenn vorhanden und wohlgeformt<\/td>\n<td>Readme<\/td>\n<\/tr>\n<tr>\n<td>Tags, Contributors, Spendenlink<\/td>\n<td>Readme<\/td>\n<td>keiner<\/td>\n<\/tr>\n<tr>\n<td>Plugin- und Autoren-Website<\/td>\n<td>Header <code>Plugin URI<\/code>, <code>Author URI<\/code><\/td>\n<td>keiner<\/td>\n<\/tr>\n<tr>\n<td>Ausgelieferter Code<\/td>\n<td><code>Stable tag<\/code> in <code>trunk\/readme.txt<\/code><\/td>\n<td><code>trunk\/<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u201eWohlgeformt\u201c hei\u00dft: mindestens drei Zeichen aus Ziffern und Punkten. Die Zeile zu \u201eTested up to\u201c wird leicht \u00fcbersehen. Der Importer registriert <code>Tested up to<\/code> als zus\u00e4tzliches Header-Feld der Hauptdatei, ein Wert dort \u00fcberschreibt also die Readme, und Plugin Check meldet eine Abweichung zwischen beiden. Da der Core Anforderungen nur aus dem Header liest, sollten die Anforderungswerte in beiden Dateien identisch sein.<\/p>\n<figure class=\"lw-diagram\">\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/diagrams\/wp-readme-svn-de.png?v=20260930\" width=\"1120\" height=\"580\" alt=\"Welche Datei welchen Teil der Plugin-Seite auf WordPress.org f\u00fcllt\"><figcaption>Die Readme in trunk nennt nur den Stable tag; Tag-Ordner, Header und assets\/ f\u00fcllen die Seite<\/figcaption><\/figure>\n<h2>SVN-Aufbau: trunk, tags und assets<\/h2>\n<p>Nach der Freigabe bekommt jedes Plugin ein Repository unter <code>https:\/\/plugins.svn.wordpress.org\/&lt;slug&gt;<\/code> mit drei Ordnern: <code>trunk\/<\/code> f\u00fcr den aktuellen Code, <code>tags\/<\/code> f\u00fcr Versionen und <code>assets\/<\/code> f\u00fcr Bilder und Blueprint. <code>branches\/<\/code> wird nicht mehr angelegt. Das Handbuch versteht SVN hier als Release-Repository: Jeder Commit baut die ZIP-Dateien aller Versionen neu, ein Grund daf\u00fcr, dass \u00c4nderungen bis zu sechs Stunden brauchen k\u00f6nnen.<\/p>\n<h3>Wie der Stable tag den Code ausw\u00e4hlt<\/h3>\n<p>Der Import beginnt bei <code>trunk\/readme.txt<\/code> und liest daraus nur eine Zeile: <code>Stable tag<\/code>. Bei <code>Stable tag: 1.2.0<\/code> sucht das Verzeichnis nach <code>tags\/1.2.0\/<\/code>. Existiert dieser Ordner und enth\u00e4lt er Dateien, kommt alles Weitere von dort: die angezeigte Readme, der Plugin-Header und die ZIP-Datei f\u00fcr die Nutzer. \u00c4nderungen an der Beschreibung in <code>trunk\/readme.txt<\/code> wirken sich nicht aus, solange das Tag existiert. Auch die Readme im Tag muss den richtigen Stable tag tragen; sonst kann das Plugin laut Handbuch nicht mehr aktualisiert werden.<\/p>\n<p>Der Ordnername w\u00e4hlt den Code aus, legt aber nicht die Version fest. Die Version auf dem Download-Button stammt aus dem Header <code>Version<\/code> der getaggten Hauptdatei. Steht in <code>tags\/1.4\/<\/code> noch <code>Version: 1.3<\/code>, zeigt die Seite 1.3, und der Importer meldet, dass Header und Tag nicht zusammenpassen. Anf\u00fchrungszeichen um den Wert des Stable tag und ein Pr\u00e4fix <code>tags\/<\/code> entfernt der Parser.<\/p>\n<h3>Assets: Namen, Gr\u00f6\u00dfen und der Blueprint<\/h3>\n<p>Alles in <code>assets\/<\/code> gilt f\u00fcr alle Versionen und geh\u00f6rt nicht zur ZIP-Datei. Bilder in <code>trunk\/assets\/<\/code> oder <code>tags\/1.0\/assets\/<\/code> werden nicht verwendet. Die Dateinamen sind festgelegt:<\/p>\n<table>\n<thead>\n<tr>\n<th>Zweck<\/th>\n<th>Dateiname<\/th>\n<th>Maximale Gr\u00f6\u00dfe<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Banner<\/td>\n<td><code>banner-772x250.png<\/code> oder <code>.jpg<\/code><\/td>\n<td>4 MB<\/td>\n<\/tr>\n<tr>\n<td>Banner, hohe Aufl\u00f6sung<\/td>\n<td><code>banner-1544x500.png<\/code> oder <code>.jpg<\/code><\/td>\n<td>4 MB<\/td>\n<\/tr>\n<tr>\n<td>Icon<\/td>\n<td><code>icon-128x128.png<\/code>, <code>.jpg<\/code> oder <code>.gif<\/code><\/td>\n<td>1 MB<\/td>\n<\/tr>\n<tr>\n<td>Icon, hohe Aufl\u00f6sung<\/td>\n<td><code>icon-256x256.png<\/code>, <code>.jpg<\/code> oder <code>.gif<\/code><\/td>\n<td>1 MB<\/td>\n<\/tr>\n<tr>\n<td>Icon, Vektor<\/td>\n<td><code>icon.svg<\/code> plus PNG als Ersatz<\/td>\n<td>1 MB<\/td>\n<\/tr>\n<tr>\n<td>Screenshots<\/td>\n<td><code>screenshot-1.png<\/code>, <code>screenshot-2.jpg<\/code> \u2026<\/td>\n<td>10 MB<\/td>\n<\/tr>\n<tr>\n<td>Playground-Vorschau<\/td>\n<td><code>blueprints\/blueprint.json<\/code><\/td>\n<td>100 kB (Grenze des Importers)<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Die Pixelma\u00dfe m\u00fcssen zu den Namen passen, und das hochaufl\u00f6sende Banner funktioniert nur zus\u00e4tzlich zum normalen. Dateinamen m\u00fcssen kleingeschrieben sein. Banner und Screenshots lassen sich mit Suffixen wie <code>-de<\/code> lokalisieren, Banner auch mit <code>-rtl<\/code>. Wegen des CDN-Cachings k\u00f6nnen neue Bilder bis zu sechs Stunden brauchen.<\/p>\n<p>Beim Blueprint akzeptiert der Importer nur g\u00fcltiges JSON und h\u00e4ngt einen Schritt <code>installPlugin<\/code> mit Aktivierung an, wenn die Datei das Plugin nicht selbst installiert. Der Vorschau-Button ist nur f\u00fcr Committer sichtbar, bis ein Committer die Vorschau in der Advanced-Ansicht des Plugins \u00f6ffentlich schaltet. Wie ein Blueprint entsteht, zeigt <span class=\"lw-artikel-geplant\">der Beitrag zu Playground und Blueprints<\/span> in dieser Reihe.<\/p>\n<h2>Vollst\u00e4ndige Befehlsfolge f\u00fcr die erste Version und ein Update<\/h2>\n<p>Der SVN-Benutzername ist der Benutzername auf WordPress.org, nicht die E-Mail-Adresse, und Gro\u00df- und Kleinschreibung z\u00e4hlt. Ein eigenes SVN-Passwort l\u00e4sst sich im Profil auf WordPress.org festlegen. Die folgende Folge deckt die erste Ver\u00f6ffentlichung von Version 1.2.0 samt Assets ab:<\/p>\n<pre><code># First release: check out the repository created after approval.\nsvn co https:\/\/plugins.svn.wordpress.org\/lw-reading-time lw-reading-time-svn\ncd lw-reading-time-svn\n\n# Main plugin file and readme.txt go directly into trunk\/, not into a subfolder.\ncp ..\/lw-reading-time\/lw-reading-time.php ..\/lw-reading-time\/readme.txt trunk\/\nsvn add trunk\/*\n\n# Banner, icon, screenshots and blueprint go into the top-level assets\/ folder.\ncp ..\/lw-reading-time-assets\/banner-772x250.png ..\/lw-reading-time-assets\/banner-1544x500.png assets\/\ncp ..\/lw-reading-time-assets\/icon-128x128.png ..\/lw-reading-time-assets\/icon-256x256.png assets\/\ncp ..\/lw-reading-time-assets\/screenshot-1.png ..\/lw-reading-time-assets\/screenshot-2.png assets\/\nmkdir assets\/blueprints\ncp ..\/lw-reading-time-assets\/blueprint.json assets\/blueprints\/\nsvn add assets\/*\n\n# Serve the images as images instead of application\/octet-stream.\nsvn propset svn:mime-type image\/png assets\/*.png\n\n# The username is case sensitive.\nsvn ci -m \"Add LW Reading Time 1.2.0 to trunk, add assets\" --username WPORG_USERNAME\n\n# Tag the release from trunk and commit the tag.\nsvn cp trunk tags\/1.2.0\nsvn ci -m \"Tag version 1.2.0\"<\/code><\/pre>\n<p>Zwischen den beiden Commits zeigt der Stable tag auf ein Tag, das noch nicht existiert; das Verzeichnis greift kurz auf <code>trunk\/<\/code> zur\u00fcck, was das Handbuch als unbedenklich beschreibt. Die Zeile mit <code>svn propset<\/code> ist die dokumentierte Abhilfe, wenn Browser Bilder herunterladen statt sie anzuzeigen; f\u00fcr JPEG-Dateien lautet der Typ <code>image\/jpeg<\/code>.<\/p>\n<p>F\u00fcr jede weitere Version empfiehlt das Handbuch, zuerst <code>trunk\/<\/code> einschlie\u00dflich des neuen Stable tag zu bearbeiten, dann trunk mit <code>svn cp<\/code> in das neue Tag zu kopieren und beides in einem Schritt zu committen:<\/p>\n<pre><code># Next release: bring the working copy up to date.\ncd lw-reading-time-svn\nsvn up\n\n# Version header and Stable tag both say 1.3.0 in the copied files.\ncp ..\/lw-reading-time\/lw-reading-time.php ..\/lw-reading-time\/readme.txt trunk\/\nsvn add --force trunk\nsvn stat\nsvn diff\n\n# Copy trunk to the new tag and commit trunk and tag together.\nsvn cp trunk tags\/1.3.0\nsvn ci -m \"Release 1.3.0\"<\/code><\/pre>\n<p>Weil <code>svn cp<\/code> in der Arbeitskopie arbeitet, bleibt die Historie erhalten, und das Tag erh\u00e4lt genau die Dateien aus <code>trunk\/<\/code>, einschlie\u00dflich der Readme mit dem richtigen Stable tag. Alles, was committet wird, landet auf den Websites der Nutzer, auch eine <code>.gitignore<\/code>; ZIP-Archive geh\u00f6ren \u00fcberhaupt nicht ins SVN.<\/p>\n<h2>Typische Fehler und der Readme-Validator<\/h2>\n<p>Die meisten Probleme nach einer Ver\u00f6ffentlichung gehen auf wenige Ursachen zur\u00fcck:<\/p>\n<ul>\n<li><strong>Stable tag zeigt auf ein nicht existierendes Tag.<\/strong> Der Importer f\u00e4llt mit einer Warnung auf <code>trunk\/<\/code> zur\u00fcck, und Nutzer bekommen, was gerade in trunk liegt, wom\u00f6glich unfertigen Code.<\/li>\n<li><strong><code>Stable tag: trunk<\/code>.<\/strong> Das funktioniert noch, gilt laut Handbuch aber als nicht unterst\u00fctzt und ist f\u00fcr neue Plugins verboten. Der Validator bem\u00e4ngelt jeden Stable tag, der \u201etrunk\u201c enth\u00e4lt, und bei aktivierter Release-Best\u00e4tigung lehnt der Importer eine Ver\u00f6ffentlichung aus trunk ab.<\/li>\n<li><strong>Tag angelegt, Header nicht angepasst.<\/strong> Die Seite zeigt weiter die alte Version, und der Importer meldet die Abweichung zwischen Version-Header und Tag.<\/li>\n<li><strong>Readme nur in trunk ge\u00e4ndert.<\/strong> Solange der Stable tag auf ein vorhandenes Tag zeigt, erscheint die \u00c4nderung nicht.<\/li>\n<li><strong>Falsche Asset-Namen.<\/strong> Eigene Bannergr\u00f6\u00dfen, gro\u00dfgeschriebene Dateinamen oder Assets in <code>trunk\/<\/code> werden ignoriert.<\/li>\n<li><strong>Abh\u00e4ngigkeiten au\u00dferhalb des Verzeichnisses.<\/strong> Ein Slug in <code>Requires Plugins<\/code>, der kein ver\u00f6ffentlichtes Verzeichnis-Plugin ist, stoppt den Import.<\/li>\n<\/ul>\n<p>Der Readme-Validator unter <code>wordpress.org\/plugins\/developers\/readme-validator\/<\/code> nutzt denselben Parser wie das Verzeichnis. Er nimmt eingef\u00fcgten Text an oder eine URL auf <code>plugins.svn.wordpress.org<\/code>, <code>themes.svn.wordpress.org<\/code> oder <code>raw.githubusercontent.com<\/code> bis 512 kB. Fehler sind etwa ein fehlender oder als Platzhalter stehen gelassener Name wie <code>=== Plugin Name ===<\/code>, eine Marke im Namen und eine inkompatible Lizenz. Warnungen betreffen einen ung\u00fcltigen Stable tag, ein fehlendes oder ignoriertes \u201eTested up to\u201c, verworfene Contributors, \u00fcberz\u00e4hlige Tags und gek\u00fcrzten Text. Hinweise nennen fehlende optionale Teile wie FAQ, Changelog oder Screenshots. Der Validator sieht nur die Readme; ob das Tag existiert, die Version passt und Abh\u00e4ngigkeiten aufl\u00f6sbar sind, pr\u00fcft erst der Import.<\/p>\n<h2>Grenzen und offene Punkte<\/h2>\n<p>Die Aussagen zur Rangfolge st\u00fctzen sich auf den Quellcode des Verzeichnisses im GitHub-Spiegel des Meta-Repositorys mit Stand 29.09.2026. Dieser Code \u00e4ndert sich h\u00e4ufig; allein die Import-Klasse erhielt im September 2026 mehrere Commits. Das Verhalten kann sich also \u00e4ndern, ohne dass das Handbuch nachzieht.<\/p>\n<p>Einige Punkte bleiben offen. Die Aussage im Handbuch, Readmes w\u00fcrden nicht mehr auf Anforderungen ausgewertet, bezieht sich auf den WordPress-Core; das Verzeichnis nutzt Readme-Werte weiterhin als Ersatz. Welchen Eintrag der Upgrade Notice die Update-API f\u00fcr ein bestimmtes Update ausw\u00e4hlt, wurde nicht nachverfolgt. Wie streng die Suche nach Contributors mit Gro\u00df- und Kleinschreibung umgeht, wurde nicht getestet.<\/p>\n<p>MIME-Typ-Befehle sind nur f\u00fcr PNG und JPEG dokumentiert, nicht f\u00fcr SVG-Icons. Die 10 kB f\u00fcr die Readme sind eher ein allgemeiner Hinweis als eine feste Grenze.<\/p>\n<p>Das Beispiel-Plugin wurde nicht eingereicht. Auf einer Testinstallation mit WordPress 7.1.2 l\u00e4sst es sich ohne Hinweise aktivieren, und Plugin Check 2.1.0 meldet daf\u00fcr keine Fehler. Beide SVN-Befehlsfolgen liefen gegen ein lokales Repository fehlerfrei durch. Das beschriebene Verhalten des Validators stammt aus seinem Quellcode.<\/p>\n<div class=\"lw-faq\">\n<h2>Fragen und Antworten<\/h2>\n<h3>Kommt die Beschreibung auf der Plugin-Seite aus trunk\/readme.txt oder aus dem Tag?<\/h3>\n<p>Aus dem Tag. In <code>trunk\/readme.txt<\/code> wird nur die Zeile <code>Stable tag<\/code> gelesen. Existiert der genannte Ordner unter <code>tags\/<\/code> und enth\u00e4lt er Dateien, stammen Readme, Plugin-Header und ZIP-Datei von dort. \u00c4nderungen, die nur in trunk liegen, erscheinen nicht, solange das Tag existiert.<\/p>\n<h3>Warum zeigt die Plugin-Seite bei \u201eTested up to\u201c einen anderen Wert als die Readme?<\/h3>\n<p>Daf\u00fcr gibt es zwei \u00fcbliche Gr\u00fcnde:<\/p>\n<ul>\n<li>Das Verzeichnis ignoriert Unterversionen und erg\u00e4nzt die aktuelle selbst, aus <code>7.0<\/code> wird so etwa <code>7.0.6<\/code>.<\/li>\n<li>Eine Zeile <code>Tested up to<\/code> im Header der Hauptdatei \u00fcberschreibt die Readme, wenn sie wohlgeformt ist.<\/li>\n<\/ul>\n<p>Liegt der Wert zu weit \u00fcber dem aktuellen stabilen Zweig, verwirft der Parser ihn ganz.<\/p>\n<h3>Darf ein Plugin aus dem Verzeichnis von einem Plugin abh\u00e4ngen, das au\u00dferhalb von WordPress.org vertrieben wird?<\/h3>\n<p>Nein. Plugins auf WordPress.org d\u00fcrfen in <code>Requires Plugins<\/code> nur Plugins nennen, die ebenfalls dort liegen, und zwar als Slug, nicht als Pfad. L\u00e4sst sich ein Slug keinem ver\u00f6ffentlichten Plugin zuordnen, bricht der Importer die Version ab.<\/p>\n<\/div>\n<div class=\"lw-quellen\">\n<h2>Quellen<\/h2>\n<ul>\n<li><a href=\"https:\/\/developer.wordpress.org\/plugins\/wordpress-org\/how-your-readme-txt-works\/\" target=\"_blank\" rel=\"noopener noreferrer\">Plugin Handbook: How your readme.txt works<\/a> (abgerufen am 29.09.2026)<\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/plugins\/plugin-basics\/header-requirements\/\" target=\"_blank\" rel=\"noopener noreferrer\">Plugin Handbook: Header Requirements<\/a> (abgerufen am 29.09.2026)<\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/plugins\/wordpress-org\/how-to-use-subversion\/\" target=\"_blank\" rel=\"noopener noreferrer\">Plugin Handbook: Using Subversion<\/a> (abgerufen am 29.09.2026)<\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/plugins\/wordpress-org\/plugin-assets\/\" target=\"_blank\" rel=\"noopener noreferrer\">Plugin Handbook: How Your Plugin Assets Work<\/a> (abgerufen am 29.09.2026)<\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/plugins\/wordpress-org\/previews-and-blueprints\/\" target=\"_blank\" rel=\"noopener noreferrer\">Plugin Handbook: Previews and Blueprints<\/a> (abgerufen am 29.09.2026)<\/li>\n<li><a href=\"https:\/\/wordpress.org\/plugins\/developers\/readme-validator\/\" target=\"_blank\" rel=\"noopener noreferrer\">WordPress.org: Readme Validator<\/a> (abgerufen am 29.09.2026)<\/li>\n<li><a href=\"https:\/\/wordpress.org\/plugins\/readme.txt\" target=\"_blank\" rel=\"noopener noreferrer\">WordPress.org: Beispiel-readme.txt<\/a> (abgerufen am 29.09.2026)<\/li>\n<li><a href=\"https:\/\/github.com\/WordPress\/wordpress.org\/blob\/trunk\/wordpress.org\/public_html\/wp-content\/plugins\/plugin-directory\/readme\/class-parser.php\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub WordPress\/wordpress.org: Readme-Parser (class-parser.php)<\/a> (abgerufen am 29.09.2026)<\/li>\n<li><a href=\"https:\/\/github.com\/WordPress\/wordpress.org\/blob\/trunk\/wordpress.org\/public_html\/wp-content\/plugins\/plugin-directory\/readme\/class-validator.php\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub WordPress\/wordpress.org: Readme-Validator (class-validator.php)<\/a> (abgerufen am 29.09.2026)<\/li>\n<li><a href=\"https:\/\/github.com\/WordPress\/wordpress.org\/blob\/trunk\/wordpress.org\/public_html\/wp-content\/plugins\/plugin-directory\/cli\/class-import.php\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub WordPress\/wordpress.org: Plugin-Importer (class-import.php)<\/a> (abgerufen am 29.09.2026)<\/li>\n<li><a href=\"https:\/\/github.com\/WordPress\/wordpress-develop\/blob\/trunk\/src\/wp-admin\/includes\/plugin.php\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub WordPress\/wordpress-develop: validate_plugin_requirements() in plugin.php<\/a> (abgerufen am 29.09.2026)<\/li>\n<li><a href=\"https:\/\/github.com\/WordPress\/wordpress-develop\/blob\/trunk\/src\/wp-admin\/update-core.php\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub WordPress\/wordpress-develop: Upgrade Notice in update-core.php<\/a> (abgerufen am 29.09.2026)<\/li>\n<li><a href=\"https:\/\/make.wordpress.org\/core\/2024\/03\/05\/introducing-plugin-dependencies-in-wordpress-6-5\/\" target=\"_blank\" rel=\"noopener noreferrer\">Make WordPress Core: Introducing Plugin Dependencies in WordPress 6.5<\/a> (abgerufen am 29.09.2026)<\/li>\n<li><a href=\"https:\/\/wordpress.org\/plugins\/plugin-check\/\" target=\"_blank\" rel=\"noopener noreferrer\">WordPress.org: Plugin Check (PCP), Plugin-Seite und Changelog<\/a> (abgerufen am 29.09.2026)<\/li>\n<li><a href=\"https:\/\/api.wordpress.org\/core\/version-check\/1.7\/\" target=\"_blank\" rel=\"noopener noreferrer\">WordPress.org API: Core-Versionspr\u00fcfung (aktuelle Version 7.1.2)<\/a> (abgerufen am 29.09.2026)<\/li>\n<\/ul>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Plugin-Header, readme.txt und SVN-Tags bestimmen gemeinsam, was das Verzeichnis von WordPress.org anzeigt. Der Import-Code kl\u00e4rt, welches Feld gewinnt.<\/p>\n","protected":false},"author":1,"featured_media":20901,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[24],"tags":[92214,92759,92277],"class_list":["post-20861","post","type-post","status-publish","format-standard","hentry","category-wordpress-plugins-tricks-de","tag-devops-de","tag-web-development-de","tag-wordpress-de"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>readme.txt, Plugin-Header und SVN: wie WordPress.org sie liest | Lukas Wojcik<\/title>\n<meta name=\"description\" content=\"Header oder readme.txt: welcher Wert auf der Plugin-Seite von WordPress.org erscheint, wie der Stable tag den Code w\u00e4hlt, Asset-Namen und SVN-Befehle.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.lukaswojcik.com\/blog\/de\/wordpress-plugins-tricks-de\/readme-plugin-header-und-svn\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"readme.txt, Plugin-Header und SVN: wie WordPress.org sie liest | Lukas Wojcik\" \/>\n<meta property=\"og:description\" content=\"Header oder readme.txt: welcher Wert auf der Plugin-Seite von WordPress.org erscheint, wie der Stable tag den Code w\u00e4hlt, Asset-Namen und SVN-Befehle.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/de\/wordpress-plugins-tricks-de\/readme-plugin-header-und-svn\/\" \/>\n<meta property=\"og:site_name\" content=\"Lukas Wojcik - Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-10-10T11:04:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/fi-20861-readme-plugin-header-und-svn.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Lukas Wojcik\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Lukas Wojcik\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"15 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/wordpress-plugins-tricks-de\\\/readme-plugin-header-und-svn\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/wordpress-plugins-tricks-de\\\/readme-plugin-header-und-svn\\\/\"},\"author\":{\"name\":\"Lukas Wojcik\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"headline\":\"readme.txt, Plugin-Header und SVN: wie WordPress.org sie liest\",\"datePublished\":\"2026-10-10T11:04:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/wordpress-plugins-tricks-de\\\/readme-plugin-header-und-svn\\\/\"},\"wordCount\":2365,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/wordpress-plugins-tricks-de\\\/readme-plugin-header-und-svn\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/fi-20861-readme-plugin-header-und-svn.png\",\"keywords\":[\"DevOps\",\"Web Development\",\"WordPress\"],\"articleSection\":[\"WordPress-Plugins &amp; Tricks\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/wordpress-plugins-tricks-de\\\/readme-plugin-header-und-svn\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/wordpress-plugins-tricks-de\\\/readme-plugin-header-und-svn\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/wordpress-plugins-tricks-de\\\/readme-plugin-header-und-svn\\\/\",\"name\":\"readme.txt, Plugin-Header und SVN: wie WordPress.org sie liest | Lukas Wojcik\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/wordpress-plugins-tricks-de\\\/readme-plugin-header-und-svn\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/wordpress-plugins-tricks-de\\\/readme-plugin-header-und-svn\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/fi-20861-readme-plugin-header-und-svn.png\",\"datePublished\":\"2026-10-10T11:04:00+00:00\",\"description\":\"Header oder readme.txt: welcher Wert auf der Plugin-Seite von WordPress.org erscheint, wie der Stable tag den Code w\u00e4hlt, Asset-Namen und SVN-Befehle.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/wordpress-plugins-tricks-de\\\/readme-plugin-header-und-svn\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/wordpress-plugins-tricks-de\\\/readme-plugin-header-und-svn\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/wordpress-plugins-tricks-de\\\/readme-plugin-header-und-svn\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/fi-20861-readme-plugin-header-und-svn.png\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/fi-20861-readme-plugin-header-und-svn.png\",\"width\":1200,\"height\":630,\"caption\":\"readme.txt, Plugin-Header und SVN: wie WordPress.org sie liest\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/wordpress-plugins-tricks-de\\\/readme-plugin-header-und-svn\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"readme.txt, Plugin-Header und SVN: wie WordPress.org sie liest\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\",\"name\":\"Lukas Wojcik - Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\",\"name\":\"Lukas Wojcik\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"width\":424,\"height\":636,\"caption\":\"Lukas Wojcik\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\"},\"sameAs\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"readme.txt, Plugin-Header und SVN: wie WordPress.org sie liest | Lukas Wojcik","description":"Header oder readme.txt: welcher Wert auf der Plugin-Seite von WordPress.org erscheint, wie der Stable tag den Code w\u00e4hlt, Asset-Namen und SVN-Befehle.","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:\/\/www.lukaswojcik.com\/blog\/de\/wordpress-plugins-tricks-de\/readme-plugin-header-und-svn\/","og_locale":"en_US","og_type":"article","og_title":"readme.txt, Plugin-Header und SVN: wie WordPress.org sie liest | Lukas Wojcik","og_description":"Header oder readme.txt: welcher Wert auf der Plugin-Seite von WordPress.org erscheint, wie der Stable tag den Code w\u00e4hlt, Asset-Namen und SVN-Befehle.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/de\/wordpress-plugins-tricks-de\/readme-plugin-header-und-svn\/","og_site_name":"Lukas Wojcik - Blog","article_published_time":"2026-10-10T11:04:00+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/fi-20861-readme-plugin-header-und-svn.png","type":"image\/png"}],"author":"Lukas Wojcik","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Lukas Wojcik","Est. reading time":"15 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/wordpress-plugins-tricks-de\/readme-plugin-header-und-svn\/#article","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/wordpress-plugins-tricks-de\/readme-plugin-header-und-svn\/"},"author":{"name":"Lukas Wojcik","@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"headline":"readme.txt, Plugin-Header und SVN: wie WordPress.org sie liest","datePublished":"2026-10-10T11:04:00+00:00","mainEntityOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/wordpress-plugins-tricks-de\/readme-plugin-header-und-svn\/"},"wordCount":2365,"commentCount":0,"publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/wordpress-plugins-tricks-de\/readme-plugin-header-und-svn\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/fi-20861-readme-plugin-header-und-svn.png","keywords":["DevOps","Web Development","WordPress"],"articleSection":["WordPress-Plugins &amp; Tricks"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.lukaswojcik.com\/blog\/de\/wordpress-plugins-tricks-de\/readme-plugin-header-und-svn\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/wordpress-plugins-tricks-de\/readme-plugin-header-und-svn\/","url":"https:\/\/www.lukaswojcik.com\/blog\/de\/wordpress-plugins-tricks-de\/readme-plugin-header-und-svn\/","name":"readme.txt, Plugin-Header und SVN: wie WordPress.org sie liest | Lukas Wojcik","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/wordpress-plugins-tricks-de\/readme-plugin-header-und-svn\/#primaryimage"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/wordpress-plugins-tricks-de\/readme-plugin-header-und-svn\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/fi-20861-readme-plugin-header-und-svn.png","datePublished":"2026-10-10T11:04:00+00:00","description":"Header oder readme.txt: welcher Wert auf der Plugin-Seite von WordPress.org erscheint, wie der Stable tag den Code w\u00e4hlt, Asset-Namen und SVN-Befehle.","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/wordpress-plugins-tricks-de\/readme-plugin-header-und-svn\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/de\/wordpress-plugins-tricks-de\/readme-plugin-header-und-svn\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/wordpress-plugins-tricks-de\/readme-plugin-header-und-svn\/#primaryimage","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/fi-20861-readme-plugin-header-und-svn.png","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/fi-20861-readme-plugin-header-und-svn.png","width":1200,"height":630,"caption":"readme.txt, Plugin-Header und SVN: wie WordPress.org sie liest"},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/wordpress-plugins-tricks-de\/readme-plugin-header-und-svn\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.lukaswojcik.com\/blog\/"},{"@type":"ListItem","position":2,"name":"readme.txt, Plugin-Header und SVN: wie WordPress.org sie liest"}]},{"@type":"WebSite","@id":"https:\/\/www.lukaswojcik.com\/blog\/#website","url":"https:\/\/www.lukaswojcik.com\/blog\/","name":"Lukas Wojcik - Blog","description":"","publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.lukaswojcik.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9","name":"Lukas Wojcik","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","width":424,"height":636,"caption":"Lukas Wojcik"},"logo":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg"},"sameAs":["https:\/\/www.lukaswojcik.com\/blog"]}]}},"_links":{"self":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/20861","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/comments?post=20861"}],"version-history":[{"count":1,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/20861\/revisions"}],"predecessor-version":[{"id":21736,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/20861\/revisions\/21736"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media\/20901"}],"wp:attachment":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media?parent=20861"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/categories?post=20861"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=20861"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}