<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Wordpress Archive - Das ist die Welt von Thomas</title>
	<atom:link href="https://www.schiffler.eu/thema/wordpress/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.schiffler.eu/thema/wordpress/</link>
	<description>meine Gedanken, mal strukturiert, mal nicht ...</description>
	<lastBuildDate>Mon, 19 Oct 2026 05:58:47 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.3</generator>

<image>
	<url>https://www.schiffler.eu/wp-content/uploads/2025/07/cropped-Profilfoto_2024-32x32.png</url>
	<title>Wordpress Archive - Das ist die Welt von Thomas</title>
	<link>https://www.schiffler.eu/thema/wordpress/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Ein WordPress-Plugin für Sportvereine statt einer Website für einen Verein</title>
		<link>https://www.schiffler.eu/wordpress-plugin-fuer-sportvereine-statt-vereinsprojekt/</link>
					<comments>https://www.schiffler.eu/wordpress-plugin-fuer-sportvereine-statt-vereinsprojekt/#respond</comments>
		
		<dc:creator><![CDATA[Thomas Schiffler]]></dc:creator>
		<pubDate>Tue, 13 Oct 2026 06:40:00 +0000</pubDate>
				<category><![CDATA[eigene Projekte]]></category>
		<category><![CDATA[KI-generierte Bilder]]></category>
		<category><![CDATA[Ober-Olm]]></category>
		<category><![CDATA[Product Owner]]></category>
		<category><![CDATA[Squadeno – das Plugin für Sportvereine]]></category>
		<category><![CDATA[Wordpress]]></category>
		<guid isPermaLink="false">https://www.schiffler.eu/?p=3293</guid>

					<description><![CDATA[<p>In Teil 1 ging es darum, wie ich zum TV Ober-Olm kam und was bei der Anforderungserhebung herauskam. Am Ende &#8230; <a href="https://www.schiffler.eu/wordpress-plugin-fuer-sportvereine-statt-vereinsprojekt/" class="more-link">More <span class="screen-reader-text">Ein WordPress-Plugin für Sportvereine statt einer Website für einen Verein</span> <span class="meta-nav">&#8594;</span></a></p>
<p>Der Beitrag <a href="https://www.schiffler.eu/wordpress-plugin-fuer-sportvereine-statt-vereinsprojekt/">Ein WordPress-Plugin für Sportvereine statt einer Website für einen Verein</a> erschien zuerst auf <a href="https://www.schiffler.eu">Das ist die Welt von Thomas</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">In <a href="https://www.schiffler.eu/vereinswebsite-selbst-pflegen-wordpress-plugin" data-type="link" data-id="https://www.schiffler.eu/vereinswebsite-selbst-pflegen-wordpress-plugin">Teil 1</a> ging es darum, wie ich zum <a href="https://tvoo.de">TV Ober-Olm</a> kam und was bei der Anforderungserhebung herauskam. Am Ende stand ein klares Bild davon, wie die Pflege funktionieren muss. Offen war die Frage, womit man das baut.</p>



<p class="wp-block-paragraph">Meine Antwort war ein eigenes WordPress-Plugin für Sportvereine. Nicht für diesen einen. Für alle.</p>



<p class="wp-block-paragraph">Das klingt nach Größenwahn für ein Dorfprojekt. Ich erkläre, warum es das Gegenteil war.</p>



<h2 class="wp-block-heading">Der Reflex heißt: für den bauen, der fragt</h2>


<div class="wp-block-image">
<figure class="alignright size-large is-resized has-lightbox"><img fetchpriority="high" decoding="async" width="1024" height="559" src="https://www.schiffler.eu/wp-content/uploads/2026/09/squadeno_2_2-1024x559.jpeg" alt="Eine einzelne Maßanfertigung auf einer Schneiderpuppe neben einer leeren Kleiderstange" class="wp-image-3279" style="width:350px;height:auto" srcset="https://www.schiffler.eu/wp-content/uploads/2026/09/squadeno_2_2-1024x559.jpeg 1024w, https://www.schiffler.eu/wp-content/uploads/2026/09/squadeno_2_2-300x164.jpeg 300w, https://www.schiffler.eu/wp-content/uploads/2026/09/squadeno_2_2-768x419.jpeg 768w, https://www.schiffler.eu/wp-content/uploads/2026/09/squadeno_2_2.jpeg 1408w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph">Wenn dich ein Verein um Hilfe bittet, baust du für diesen Verein. Das ist keine bewusste Entscheidung, das ist die Voreinstellung. Die Anforderungen kommen von dort, die Beispiele kommen von dort, und irgendwann steht der Vereinsname im Quelltext. Nicht aus Faulheit, sondern weil jede einzelne Abkürzung in dem Moment vernünftig aussieht.</p>



<p class="wp-block-paragraph">Man weiß ja, dass die Halle in <a href="https://www.schiffler.eu/thema/ober-olm/" data-type="post_tag" data-id="138">Ober-Olm</a> liegt. Also setzt man den Kartenmittelpunkt dorthin. Man weiß, dass die Vereinsfarbe ein bestimmtes Blau ist. Also steht das Blau im Stylesheet. Man weiß, dass der Verein Deutsch spricht. Also schreibt man die Beschriftungen auf Deutsch hin, statt sie übersetzbar zu machen.</p>



<p class="wp-block-paragraph">Jede dieser Abkürzungen spart eine Viertelstunde. Zusammen entscheiden sie darüber, ob das Ergebnis jemals ein zweites Mal benutzt werden kann.</p>



<h2 class="wp-block-heading">Die Frage, die alles gedreht hat</h2>


<div class="wp-block-image">
<figure class="alignleft size-large is-resized has-lightbox"><img decoding="async" width="827" height="1024" src="https://www.schiffler.eu/wp-content/uploads/2026/09/squadeno-screenshot-1-827x1024.png" alt="Übersicht aller Sportarten eines Vereins mit Filtern nach Altersgruppe" class="wp-image-3281" style="width:350px;height:auto" srcset="https://www.schiffler.eu/wp-content/uploads/2026/09/squadeno-screenshot-1-827x1024.png 827w, https://www.schiffler.eu/wp-content/uploads/2026/09/squadeno-screenshot-1-242x300.png 242w, https://www.schiffler.eu/wp-content/uploads/2026/09/squadeno-screenshot-1-768x951.png 768w, https://www.schiffler.eu/wp-content/uploads/2026/09/squadeno-screenshot-1-1240x1536.png 1240w, https://www.schiffler.eu/wp-content/uploads/2026/09/squadeno-screenshot-1.png 1280w" sizes="(max-width: 827px) 100vw, 827px" /></figure>
</div>


<p class="wp-block-paragraph">Ich habe mir irgendwann während der Anforderungsphase die Liste angeschaut und gefragt: Ist hier eigentlich irgendetwas speziell?</p>



<p class="wp-block-paragraph">Sportarten mit Untergruppen. Trainingszeiten, die sich im Sommer ändern. Trainer, die man ansprechen kann. Hallen und Sportplätze. Ferien, in denen nichts stattfindet, außer Ferienbetreuung. Angebote, die im Beitrag enthalten sind oder extra kosten.</p>



<p class="wp-block-paragraph">Das ist kein TV Ober-Olm. Das ist jeder Sportverein in Deutschland. Der Turnverein im Nachbardorf hat dieselbe Struktur, nur andere Namen drin. Und der Fußballverein zwei Orte weiter hat sie auch, plus Mannschaften und Spielbetrieb.</p>



<p class="wp-block-paragraph">Wenn das Problem nicht speziell ist, ist die Lösung es auch nicht. Und dann ist es eine schlechte Idee, sie speziell zu bauen.</p>



<h2 class="wp-block-heading">Was es schon gab, und warum es nicht passte</h2>


<div class="wp-block-image">
<figure class="alignright size-large is-resized has-lightbox"><img decoding="async" width="467" height="1024" src="https://www.schiffler.eu/wp-content/uploads/2026/09/squadeno-screenshot-11-467x1024.png" alt="Mannschaftsverwaltung mit Kader, Rückennummern und Ligaverweis" class="wp-image-3291" style="width:350px;height:auto" srcset="https://www.schiffler.eu/wp-content/uploads/2026/09/squadeno-screenshot-11-467x1024.png 467w, https://www.schiffler.eu/wp-content/uploads/2026/09/squadeno-screenshot-11-137x300.png 137w, https://www.schiffler.eu/wp-content/uploads/2026/09/squadeno-screenshot-11-768x1682.png 768w, https://www.schiffler.eu/wp-content/uploads/2026/09/squadeno-screenshot-11-701x1536.png 701w, https://www.schiffler.eu/wp-content/uploads/2026/09/squadeno-screenshot-11-935x2048.png 935w, https://www.schiffler.eu/wp-content/uploads/2026/09/squadeno-screenshot-11.png 730w" sizes="(max-width: 467px) 100vw, 467px" /></figure>
</div>


<p class="wp-block-paragraph">Fertige Lösungen gibt es reichlich. Kalender-Plugins, Event-Plugins, Vereinsverwaltungen mit Mitgliederdatenbank und Beitragseinzug, Baukästen für eigene Inhaltstypen.</p>



<p class="wp-block-paragraph">Das Problem war nie die fehlende Funktion. Das Problem war, wer die Lücke dazwischen füllt.</p>



<p class="wp-block-paragraph">Ein Kalender-Plugin kennt Termine, aber keine Sportarten. Es weiß nicht, dass „Leichtathletik Kinder&#8220; im Sommer draußen und im Winter drinnen stattfindet, und schon gar nicht, dass in den Osterferien alles ausfällt. Eine Vereinsverwaltung fängt bei Mitgliedern und Beiträgen an, also bei einem Thema, das der Verein gar nicht auf der Website haben will. Und mit einem Baukasten für Inhaltstypen kann man sich das alles zusammenklicken, aber dann hat man genau das gebaut, was ich vermeiden wollte: ein System, dessen Logik nur der versteht, der es zusammengeklickt hat.</p>



<p class="wp-block-paragraph">Der Ehrenamtliche, der in zwei Jahren die Trainingszeit von dienstags auf mittwochs ändern soll, muss sonst verstehen, wie drei Systeme zusammenhängen. Genau diese Verständnislast ist der Grund, warum Vereinswebsites verwaisen.</p>



<p class="wp-block-paragraph">Ein Werkzeug, das den Verein bereits kennt, verlangt das nicht. Es fragt nicht „welchen Inhaltstyp möchten Sie anlegen&#8220;, sondern zeigt ein Feld für Trainingszeiten.</p>



<h2 class="wp-block-heading">Die Entscheidung fiel am ersten Tag</h2>


<div class="wp-block-image">
<figure class="alignleft size-large is-resized has-lightbox"><img loading="lazy" decoding="async" width="766" height="1024" src="https://www.schiffler.eu/wp-content/uploads/2026/09/squadeno-screenshot-3-766x1024.png" alt="Vereinskalender mit automatisch geblockten Ferien und einem abgesagten Training" class="wp-image-3283" style="width:350px;height:auto" srcset="https://www.schiffler.eu/wp-content/uploads/2026/09/squadeno-screenshot-3-766x1024.png 766w, https://www.schiffler.eu/wp-content/uploads/2026/09/squadeno-screenshot-3-224x300.png 224w, https://www.schiffler.eu/wp-content/uploads/2026/09/squadeno-screenshot-3-768x1027.png 768w, https://www.schiffler.eu/wp-content/uploads/2026/09/squadeno-screenshot-3-1149x1536.png 1149w, https://www.schiffler.eu/wp-content/uploads/2026/09/squadeno-screenshot-3.png 1197w" sizes="auto, (max-width: 766px) 100vw, 766px" /></figure>
</div>


<p class="wp-block-paragraph">Das ist der Teil, den ich selbst erst beim Nachschauen gemerkt habe, und er gefällt mir.</p>



<p class="wp-block-paragraph">Der allererste Commit im Projekt heißt „Initialer Stand: Konzept Club Sports Manager (TVOO-Relaunch)&#8220;, vom 17. August. Vereinsprojekt, schon im Titel. In derselben Datei, im selben Commit, steht die zwölfte Entscheidung:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Bewusst produkt- statt vereinsspezifisch, damit jeder Sportverein es nutzen kann. „TVOO&#8220; ist nur unsere Installation, nicht der Produktname.</p>
</blockquote>



<p class="wp-block-paragraph">Bevor eine einzige Zeile Code existierte, stand fest, dass der Verein ein Anwendungsfall ist und nicht das Ziel. Das ist keine nachträgliche Verklärung einer Erfolgsgeschichte. Das ist datiert und nachlesbar, und ich war selbst überrascht, wie früh das war.</p>



<p class="wp-block-paragraph">Der Grund war übrigens nicht Weitsicht. Der Grund war Bequemlichkeit in der richtigen Richtung: Ich wollte nicht in einem Jahr dasselbe nochmal bauen, wenn <a href="https://ssvon.de">der Schützenverein</a> fragt.</p>



<h2 class="wp-block-heading">Was die Entscheidung im Alltag bedeutet</h2>



<p class="wp-block-paragraph">Sie klingt nach einem Satz im Konzept. In Wirklichkeit ist sie eine tägliche Disziplin, und man verliert sie ständig aus den Augen.</p>


<div class="wp-block-image">
<figure class="alignright size-large is-resized has-lightbox"><img loading="lazy" decoding="async" width="1024" height="559" src="https://www.schiffler.eu/wp-content/uploads/2026/09/squadeno_2_3-1024x559.jpeg" alt="Hände nehmen Klebezettel von einem Whiteboard ab" class="wp-image-3280" style="width:350px;height:auto" srcset="https://www.schiffler.eu/wp-content/uploads/2026/09/squadeno_2_3-1024x559.jpeg 1024w, https://www.schiffler.eu/wp-content/uploads/2026/09/squadeno_2_3-300x164.jpeg 300w, https://www.schiffler.eu/wp-content/uploads/2026/09/squadeno_2_3-768x419.jpeg 768w, https://www.schiffler.eu/wp-content/uploads/2026/09/squadeno_2_3.jpeg 1408w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph">Ein paar Monate später, kurz vor der Veröffentlichung, bin ich das Projekt nochmal auf Vereinsspezifisches durchgegangen. Ich hatte ja alles generisch gebaut, dachte ich.</p>



<p class="wp-block-paragraph">Gefunden habe ich: einen fest eingetragenen Kartenmittelpunkt, der auf Rheinhessen zeigte. Eine Kennung, mit der sich das Plugin beim Geocoding-Dienst vorstellte und die den Vereinsnamen enthielt. Einen Rückfall-Hostnamen in den Kalender-Exportdateien, der auf unseren Server zeigte. Und einen Platzhalter für die Markenfarbe, der eben nicht neutral war.</p>



<p class="wp-block-paragraph">Nichts davon war falsch für den TV Ober-Olm. Alles davon war falsch für jeden anderen.</p>



<p class="wp-block-paragraph">Das ist die eigentliche Arbeit hinter „generisch bauen&#8220;. Nicht die Architektur, nicht das saubere Trennen von Schichten. Sondern immer wieder die Frage: Weiß dieser Code gerade etwas, das er nicht wissen darf?</p>



<h2 class="wp-block-heading">Was das kostet, und wer es bezahlt</h2>


<div class="wp-block-image">
<figure class="alignleft size-large is-resized has-lightbox"><img loading="lazy" decoding="async" width="643" height="1024" src="https://www.schiffler.eu/wp-content/uploads/2026/09/squadeno-screenshot-2-643x1024.png" alt="Seite einer Sportart mit Trainingszeiten, Ansprechpartnern und kommenden Terminen" class="wp-image-3282" style="width:350px;height:auto" srcset="https://www.schiffler.eu/wp-content/uploads/2026/09/squadeno-screenshot-2-643x1024.png 643w, https://www.schiffler.eu/wp-content/uploads/2026/09/squadeno-screenshot-2-188x300.png 188w, https://www.schiffler.eu/wp-content/uploads/2026/09/squadeno-screenshot-2-768x1223.png 768w, https://www.schiffler.eu/wp-content/uploads/2026/09/squadeno-screenshot-2-965x1536.png 965w, https://www.schiffler.eu/wp-content/uploads/2026/09/squadeno-screenshot-2.png 1005w" sizes="auto, (max-width: 643px) 100vw, 643px" /></figure>
</div>


<p class="wp-block-paragraph">Ehrlich gesagt: Es dauert länger. Spürbar.</p>



<p class="wp-block-paragraph">Jede Annahme wird zu einer Einstellung. Jede Beschriftung wird übersetzbar, also brauchst du Sprachdateien und einen Weg, sie zu prüfen. Jede Adresse im System muss konfigurierbar sein, weil ein Verein in Österreich eine andere Struktur will als einer in Hessen. Aus zwei Zeilen werden fünfzehn.</p>



<p class="wp-block-paragraph">Diese Zeit bezahlt der Verein mit. Er bekommt sein Ergebnis später, als wenn ich ihm eine maßgeschneiderte Seite hingestellt hätte.</p>



<p class="wp-block-paragraph">Im Gegenzug bekommt er etwas, das ein Auftragsprojekt nie hat: Das Ding gehört ihm nicht allein, also hängt es auch nicht an mir allein. Es liegt öffentlich, es bekommt Aktualisierungen, es hat eine Dokumentation, die nicht aus meinem Kopf kommt. Wenn ich morgen keine Lust mehr habe, steht der Verein immer noch besser da als mit einer Maßanfertigung von jemandem, der weg ist.</p>



<p class="wp-block-paragraph">Das war von Anfang an das Ziel: Hilfe zur Selbsthilfe. Ein Produkt ist die belastbarere Form davon als ein Gefallen.</p>



<h2 class="wp-block-heading">Der Name war die letzte Konsequenz</h2>



<p class="wp-block-paragraph">Irgendwann braucht das Ding einen Namen, und der Name entscheidet mit, wofür man es hält.</p>



<p class="wp-block-paragraph">„TVOO-Kalender&#8220; wäre der ehrliche Name für ein Vereinsprojekt gewesen. Geworden ist es <strong><a href="https://www.schiffler.eu/thema/squadeno-plugin-sportvereine/" data-type="post_tag" data-id="374">Squadeno – Club Sports Manager</a></strong>: ein beschreibender Teil, der sagt, was es tut, und ein Markenteil davor. Die Software heißt bewusst nicht nach dem Verein, für den sie zuerst gebaut wurde. Wenn sie es täte, würde sie niemand sonst installieren, egal wie generisch der Code darunter ist.</p>



<p class="wp-block-paragraph">Dass mir ausgerechnet bei diesem Namen später noch jemand reingeredet hat, und zwar das Review von WordPress.org, ist eine eigene Geschichte. Die kommt in Teil 4.</p>



<h2 class="wp-block-heading">Fazit</h2>



<p class="wp-block-paragraph">Ich bin nicht losgezogen, um ein Produkt zu bauen. Ich wollte einem Verein helfen, dessen Angebot meine Tochter nutzt.</p>



<p class="wp-block-paragraph">Der Umweg über „für alle statt für einen&#8220; hat das Projekt größer gemacht, langsamer und anstrengender. Er ist trotzdem die richtige Entscheidung gewesen, und der Grund ist banal: Eine Maßanfertigung ist nur so lange gut, wie der Schneider erreichbar ist.</p>



<p class="wp-block-paragraph">Das Plugin liegt inzwischen kostenlos im <a href="https://de.wordpress.org/plugins/squadeno-club-sports-manager/" target="_blank" rel="noopener">WordPress-Verzeichnis</a>, und es gibt eine <a href="https://squadeno.com/de/" target="_blank" rel="noopener">eigene Seite dazu</a>. Wie so ein Ding in wenigen Wochen entsteht, ohne auseinanderzufallen, kommt in Teil 3. Was das Review daran auszusetzen hatte, in Teil 4.</p>



<p class="wp-block-paragraph"></p>
<p>Der Beitrag <a href="https://www.schiffler.eu/wordpress-plugin-fuer-sportvereine-statt-vereinsprojekt/">Ein WordPress-Plugin für Sportvereine statt einer Website für einen Verein</a> erschien zuerst auf <a href="https://www.schiffler.eu">Das ist die Welt von Thomas</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.schiffler.eu/wordpress-plugin-fuer-sportvereine-statt-vereinsprojekt/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Vereinswebsite selbst pflegen: Die Anforderung, die niemand ausgesprochen hat</title>
		<link>https://www.schiffler.eu/vereinswebsite-selbst-pflegen-wordpress-plugin/</link>
					<comments>https://www.schiffler.eu/vereinswebsite-selbst-pflegen-wordpress-plugin/#respond</comments>
		
		<dc:creator><![CDATA[Thomas Schiffler]]></dc:creator>
		<pubDate>Thu, 01 Oct 2026 06:37:00 +0000</pubDate>
				<category><![CDATA[eigene Projekte]]></category>
		<category><![CDATA[Anforderungserhebung]]></category>
		<category><![CDATA[KI-generierte Bilder]]></category>
		<category><![CDATA[Ober-Olm]]></category>
		<category><![CDATA[Squadeno – das Plugin für Sportvereine]]></category>
		<category><![CDATA[Webdesign – aber nicht so, wie du denkst]]></category>
		<category><![CDATA[Wordpress]]></category>
		<guid isPermaLink="false">https://www.schiffler.eu/?p=3268</guid>

					<description><![CDATA[<p>Die wichtigste Anforderung an die neue Website des TV Ober-Olm e.V. stand nicht in der Funktionsliste. Sie lautete: Der Verein &#8230; <a href="https://www.schiffler.eu/vereinswebsite-selbst-pflegen-wordpress-plugin/" class="more-link">More <span class="screen-reader-text">Vereinswebsite selbst pflegen: Die Anforderung, die niemand ausgesprochen hat</span> <span class="meta-nav">&#8594;</span></a></p>
<p>Der Beitrag <a href="https://www.schiffler.eu/vereinswebsite-selbst-pflegen-wordpress-plugin/">Vereinswebsite selbst pflegen: Die Anforderung, die niemand ausgesprochen hat</a> erschien zuerst auf <a href="https://www.schiffler.eu">Das ist die Welt von Thomas</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Die wichtigste Anforderung an die neue Website des <a href="https://www.tvoo.de" target="_blank" rel="noopener">TV Ober-Olm e.V.</a> stand nicht in der Funktionsliste. Sie lautete: Der Verein muss seine Vereinswebsite selbst pflegen können. Ohne mich. Alles andere war Beiwerk.</p>



<p class="wp-block-paragraph">Es gab keinen dramatischen Moment, an dem das klar wurde. Keinen Anruf, kein „wir haben ein Problem&#8220;. Meine Tochter ist im Verein aktiv, und wir schätzen das Angebot hier im Ort sehr. Wer im Dorf ein Kind hat, landet früher oder später in diesem Verein.</p>



<p class="wp-block-paragraph">Und wer wissen will, wann dort was stattfindet, landet auf der Website. Genau da fing es an zu haken.</p>



<h2 class="wp-block-heading">Was man findet, wenn man hinschaut</h2>



<p class="wp-block-paragraph">Die Seite des TV Ober-Olm läuft auf einem Web-Baukasten. Die Angebote sind nach Altersgruppen sortiert, Kleinkinder, Kinder und Jugend, Erwachsene, Senioren, Outdoor, Kurse. Eltern-Kind-Turnen, Gerätturnen, Leichtathletik, Tischtennis, Taekwondo, Yoga, Pilates, Zumba, Wandern, Genussradeln. Ein beachtliches Angebot für ein Dorf.</p>



<p class="wp-block-paragraph">Nur: Wann trainiert die Leichtathletik-Gruppe der Kinder? Wo? Und ist nächste Woche überhaupt, oder sind Ferien?</p>


<div class="wp-block-image is-style-default has-lightbox">
<figure class="alignright size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="559" src="https://www.schiffler.eu/wp-content/uploads/2026/09/squadeno_1_2-1024x559.jpeg" alt="Vergilbte Aushänge im Schaukasten eines Sportvereins" class="wp-image-3262" style="width:350px;height:auto" srcset="https://www.schiffler.eu/wp-content/uploads/2026/09/squadeno_1_2-1024x559.jpeg 1024w, https://www.schiffler.eu/wp-content/uploads/2026/09/squadeno_1_2-300x164.jpeg 300w, https://www.schiffler.eu/wp-content/uploads/2026/09/squadeno_1_2-768x419.jpeg 768w, https://www.schiffler.eu/wp-content/uploads/2026/09/squadeno_1_2.jpeg 1408w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph">Die Antwort steht irgendwo. Manchmal im Fließtext einer Seite, manchmal in einem PDF, manchmal gar nicht. Die Anmeldung läuft über ein Word-Formular zum Herunterladen. Parallel lag noch eine halbfertige WordPress-Testinstanz herum, mit einem Kalender-Plugin, das niemand mehr genau zuordnen konnte, und einer Unterseite <code>/sportangebote/</code>, die teilweise ins Leere lief.</p>



<p class="wp-block-paragraph">Das ist kein Vorwurf an irgendwen. Das ist der Normalzustand. Ehrenamtliche pflegen eine Website neben Job, Familie und dem eigentlichen Vereinsleben, mit Werkzeugen, die sie sich nicht ausgesucht haben, und nach Anleitungen von jemandem, der vor drei Jahren weggezogen ist.</p>



<p class="wp-block-paragraph">Irgendwann bin ich auf Jasmin aus dem Vorstand zugegangen und habe gefragt, ob wir da nicht mal was Besseres machen wollen.</p>



<h2 class="wp-block-heading">Die Falle, in die ich fast getappt wäre</h2>



<p class="wp-block-paragraph">Der naheliegende Reflex als ITler: Ärmel hoch, ich bau euch das.</p>


<div class="wp-block-image has-lightbox">
<figure class="alignleft size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="559" src="https://www.schiffler.eu/wp-content/uploads/2026/09/squadeno_1_3-1024x559.jpeg" alt="Ein einzelner Schlüssel in einer offenen Hand" class="wp-image-3263" style="width:350px;height:auto" srcset="https://www.schiffler.eu/wp-content/uploads/2026/09/squadeno_1_3-1024x559.jpeg 1024w, https://www.schiffler.eu/wp-content/uploads/2026/09/squadeno_1_3-300x164.jpeg 300w, https://www.schiffler.eu/wp-content/uploads/2026/09/squadeno_1_3-768x419.jpeg 768w, https://www.schiffler.eu/wp-content/uploads/2026/09/squadeno_1_3.jpeg 1408w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph">Das Angebot ist gut gemeint und in aller Regel ein Bärendienst. Denn was dabei herauskommt, ist eine schöne Website und ein Verein, der jetzt von genau einer Person abhängt. Beim nächsten Trainerwechsel schreibt mir jemand eine WhatsApp. Bei der nächsten Ferienbetreuung auch. Nach zwei Jahren bin ich der Webmaster auf Lebenszeit, und wenn ich keine Lust mehr habe, steht der Verein schlechter da als vorher, weil er sich die Pflege inzwischen abgewöhnt hat.</p>



<p class="wp-block-paragraph">Genau dieses Muster hatte den alten Zustand ja erst erzeugt.</p>



<p class="wp-block-paragraph">Also war die Ansage von Anfang an eine andere: Ich mache euch das nicht. Ich sorge dafür, dass ihr es könnt. Hilfe zur Selbsthilfe, im wörtlichen Sinn.</p>



<p class="wp-block-paragraph">Das klingt nach einer netten Geste. Tatsächlich ist es die deutlich härtere Aufgabe. Eine Website bauen kann ich an einem Wochenende. Ein Pflegemodell bauen, das Laien nach einem halben Jahr Pause noch bedienen, ist Arbeit an einer ganz anderen Stelle.</p>



<h2 class="wp-block-heading">Die eine Anforderung, die zählte</h2>



<p class="wp-block-paragraph">Aus dem Erstgespräch sind sieben funktionale Anforderungen hervorgegangen. Eigene Seite je Sportart. Auffindbarkeit über Google, weil Leute nach „Taekwondo Ober-Olm&#8220; suchen und nicht nach dem Verein. Termine je Sportart im Kalender. Ansprechpartner sichtbar. Ferien als geblockte Zeiten. Ferien-Events. Kostenangaben.</p>



<p class="wp-block-paragraph">Und dann stand unter „nicht-funktionale Anforderungen&#8220; ein Satz, der die eigentliche Aufgabe beschreibt:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Einfache Pflege durch Mitglieder (Laien), nicht nur durch Technik-Profis. Oberste Priorität.</p>
</blockquote>


<div class="wp-block-image has-lightbox">
<figure class="alignright size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="559" src="https://www.schiffler.eu/wp-content/uploads/2026/09/squadeno_1_4-1024x559.jpeg" alt="Anforderungsliste mit einer nachträglich ergänzten Notiz am Ende" class="wp-image-3264" style="width:350px;height:auto" srcset="https://www.schiffler.eu/wp-content/uploads/2026/09/squadeno_1_4-1024x559.jpeg 1024w, https://www.schiffler.eu/wp-content/uploads/2026/09/squadeno_1_4-300x164.jpeg 300w, https://www.schiffler.eu/wp-content/uploads/2026/09/squadeno_1_4-768x419.jpeg 768w, https://www.schiffler.eu/wp-content/uploads/2026/09/squadeno_1_4.jpeg 1408w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph">Wer das ernst nimmt, entwirft anders. Jede Funktion muss sich fragen lassen, ob sie die Pflege leichter oder schwerer macht. Und die ehrliche Antwort lautet bei den meisten Funktionen: schwerer.</p>



<p class="wp-block-paragraph">Ich habe das damals so aufgeschrieben und beim Lesen ein paar Wochen später gemerkt, dass ich es an der falschen Stelle einsortiert hatte. Das war keine Nebenbedingung. Das war die Anforderung. Die anderen sieben waren nur die Liste dessen, was dabei herauskommen sollte.</p>



<h2 class="wp-block-heading">Ein Verein hat keine Termine, er hat einen Trainingsplan</h2>



<p class="wp-block-paragraph">Der Kern des Ganzen ist eine einzige Entscheidung, und sie ist nicht technisch.</p>


<div class="wp-block-image has-lightbox">
<figure class="alignleft size-large is-resized advgb-dyn-2520d2cf"><img loading="lazy" decoding="async" width="1024" height="559" src="https://www.schiffler.eu/wp-content/uploads/2026/09/squadeno_1_5-1024x559.jpeg" alt="Drei übereinander gehängte Trainingspläne mit handschriftlichen Korrekturen" class="wp-image-3265" style="width:350px;height:auto" srcset="https://www.schiffler.eu/wp-content/uploads/2026/09/squadeno_1_5-1024x559.jpeg 1024w, https://www.schiffler.eu/wp-content/uploads/2026/09/squadeno_1_5-300x164.jpeg 300w, https://www.schiffler.eu/wp-content/uploads/2026/09/squadeno_1_5-768x419.jpeg 768w, https://www.schiffler.eu/wp-content/uploads/2026/09/squadeno_1_5.jpeg 1408w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph">Ein Verein hat keine Termine. Er hat einen Trainingsplan. Dienstags um 17 Uhr Leichtathletik Kinder, in der Halle, außer im Sommer, dann draußen auf dem Sportplatz. Das ist die Wahrheit über den Verein. Alles andere sind Ableitungen davon.</p>



<p class="wp-block-paragraph">Die alte Logik war umgekehrt: Der Kalender war die Wahrheit, und jemand musste ihn befüllen. Also entstanden Einzeltermine, per Hand, Woche für Woche. Oder eben nicht, was häufiger vorkam. Und wenn Ferien waren, mussten sie einzeln wieder gelöscht werden.</p>


<div class="wp-block-image has-lightbox">
<figure class="alignright size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="559" src="https://www.schiffler.eu/wp-content/uploads/2026/09/squadeno_1_6-1024x559.jpeg" alt="Diagramm: aus einem Trainingsplan entstehen Kalender, Webseite und Handy-Ansicht" class="wp-image-3266" style="width:350px;height:auto" srcset="https://www.schiffler.eu/wp-content/uploads/2026/09/squadeno_1_6-1024x559.jpeg 1024w, https://www.schiffler.eu/wp-content/uploads/2026/09/squadeno_1_6-300x164.jpeg 300w, https://www.schiffler.eu/wp-content/uploads/2026/09/squadeno_1_6-768x419.jpeg 768w, https://www.schiffler.eu/wp-content/uploads/2026/09/squadeno_1_6.jpeg 1408w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph">Die neue Logik: Der Trainingsplan ist die Quelle, der Kalender die Ausgabe. Man pflegt „dienstags 17 Uhr, Sommersaison, Sportplatz&#8220; ein einziges Mal. Die Termine entstehen daraus von selbst. Die Ferien liegen zentral als Schließzeiten und blocken automatisch, ohne dass jemand irgendwo etwas löscht. Fällt ein einzelnes Training aus, sagt man genau diesen einen Termin ab, direkt am Termin, mit zwei Klicks.</p>



<p class="wp-block-paragraph">Klingt banal. Es ist der Unterschied zwischen einer Website, die gepflegt wird, und einer, die verwaist.</p>



<h2 class="wp-block-heading">Was Anforderungserhebung im Ehrenamt anders macht</h2>



<p class="wp-block-paragraph">Im Job <a href="https://www.schiffler.eu/thomas-schiffler-ueber-mich/" data-type="page" data-id="45">mache ich das beruflich</a>. <a href="https://www.schiffler.eu/thema/anforderungserhebung/" data-type="post_tag" data-id="312">Anforderungsanalyse</a> heißt dort: Stakeholder identifizieren, Workshops ansetzen, Fachbereiche befragen, Ergebnisse abstimmen. Es gibt Termine, Protokolle und jemanden, der für die Freigabe zuständig ist.</p>


<div class="wp-block-image has-lightbox">
<figure class="alignleft size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="559" src="https://www.schiffler.eu/wp-content/uploads/2026/09/squadeno_1_7-1024x559.jpeg" alt="Zwei Personen im Gespräch am Rand einer Sporthalle, eine macht Notizen" class="wp-image-3267" style="width:350px;height:auto" srcset="https://www.schiffler.eu/wp-content/uploads/2026/09/squadeno_1_7-1024x559.jpeg 1024w, https://www.schiffler.eu/wp-content/uploads/2026/09/squadeno_1_7-300x164.jpeg 300w, https://www.schiffler.eu/wp-content/uploads/2026/09/squadeno_1_7-768x419.jpeg 768w, https://www.schiffler.eu/wp-content/uploads/2026/09/squadeno_1_7.jpeg 1408w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph">Im Verein gibt es das alles nicht. Es gibt Leute, die ihre Freizeit hergeben, und die haben keine Lust auf einen Workshop über Informationsarchitektur. Man bekommt keine Anforderungsliste. Man bekommt Sätze wie „die Seite ist halt kompliziert&#8220;.</p>



<p class="wp-block-paragraph">Der Unterschied in der Arbeitsweise ist deshalb weniger groß, als man denkt, aber er liegt woanders: Man muss die Anforderung erraten, die niemand ausspricht. Niemand sagt „unsere oberste Priorität ist, dass Laien das pflegen können&#8220;. Das sagt keiner, weil es für den, der drinsteckt, so selbstverständlich ist, dass es keiner Erwähnung wert scheint.</p>



<p class="wp-block-paragraph">Meine einzige Gegenmaßnahme: alles aufschreiben, auch das, was nebenbei gesagt wird, und es später nochmal lesen. Genau dabei ist mir aufgefallen, dass ich den wichtigsten Satz unter „nicht-funktional&#8220; abgelegt hatte.</p>



<h2 class="wp-block-heading">Und dann?</h2>



<p class="wp-block-paragraph">Am Ende der Anforderungserhebung stand ein Bild davon, wie Pflege funktionieren muss, damit sie stattfindet. Ein Trainingsplan als Quelle. Ferien, die zentral einmal gepflegt werden. Eine eigene Seite je Sportart, weil Leute nach „Taekwondo Ober-Olm&#8220; suchen. Trainer, die ihren eigenen Kram anfassen dürfen, ohne alles andere kaputt machen zu können.</p>



<p class="wp-block-paragraph">Was nicht dastand: womit man das baut.</p>



<p class="wp-block-paragraph">Die naheliegende Antwort wäre gewesen, ein paar fertige WordPress-Plugins zusammenzustecken und dem Verein zu erklären, wie sie zusammenhängen. Ich habe mich dagegen entschieden, und zwar aus einem Grund, der mit dem <a href="https://www.tvoo.de/" data-type="link" data-id="https://www.tvoo.de/" target="_blank" rel="noreferrer noopener">TV Ober-Olm</a> nur am Rande zu tun hat.</p>



<p class="wp-block-paragraph"><a href="https://www.schiffler.eu/wordpress-plugin-fuer-sportvereine-statt-vereinsprojekt/" data-type="post" data-id="3293">Darum geht es in Teil 2</a>. &#8211; to be continued &#8230;.</p>



<p class="wp-block-paragraph"></p>
<p>Der Beitrag <a href="https://www.schiffler.eu/vereinswebsite-selbst-pflegen-wordpress-plugin/">Vereinswebsite selbst pflegen: Die Anforderung, die niemand ausgesprochen hat</a> erschien zuerst auf <a href="https://www.schiffler.eu">Das ist die Welt von Thomas</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.schiffler.eu/vereinswebsite-selbst-pflegen-wordpress-plugin/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>WordPress-Plugin mit GitLab CI nach SVN deployen: mein Release läuft auf einen Klick</title>
		<link>https://www.schiffler.eu/wordpress-plugin-gitlab-ci-nach-svn-deployen/</link>
					<comments>https://www.schiffler.eu/wordpress-plugin-gitlab-ci-nach-svn-deployen/#respond</comments>
		
		<dc:creator><![CDATA[Thomas Schiffler]]></dc:creator>
		<pubDate>Tue, 08 Sep 2026 05:40:54 +0000</pubDate>
				<category><![CDATA[IT-Know How]]></category>
		<category><![CDATA[Automatisierung]]></category>
		<category><![CDATA[Codeschnipsel]]></category>
		<category><![CDATA[Git]]></category>
		<category><![CDATA[gitlab]]></category>
		<category><![CDATA[KI-generierte Bilder]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[Portrait-Archiv]]></category>
		<category><![CDATA[Squadeno – das Plugin für Sportvereine]]></category>
		<category><![CDATA[Wordpress]]></category>
		<guid isPermaLink="false">https://www.schiffler.eu/?p=3243</guid>

					<description><![CDATA[<p>Ich habe seit Jahren ein Plugin im offiziellen WordPress-Verzeichnis: portrait-archiv-shop, den Shop-Teil meiner Bildagentur portrait-archiv.com. Aktuell Version 4.4.0. Und ich &#8230; <a href="https://www.schiffler.eu/wordpress-plugin-gitlab-ci-nach-svn-deployen/" class="more-link">More <span class="screen-reader-text">WordPress-Plugin mit GitLab CI nach SVN deployen: mein Release läuft auf einen Klick</span> <span class="meta-nav">&#8594;</span></a></p>
<p>Der Beitrag <a href="https://www.schiffler.eu/wordpress-plugin-gitlab-ci-nach-svn-deployen/">WordPress-Plugin mit GitLab CI nach SVN deployen: mein Release läuft auf einen Klick</a> erschien zuerst auf <a href="https://www.schiffler.eu">Das ist die Welt von Thomas</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Ich habe seit Jahren ein Plugin im offiziellen WordPress-Verzeichnis: <a href="https://de.wordpress.org/plugins/portrait-archiv-shop/" target="_blank" rel="noopener">portrait-archiv-shop</a>, den Shop-Teil <a href="https://www.portrait-service.com">meiner Bildagentur portrait-archiv.com</a>. Aktuell Version 4.4.0. Und ich habe ziemlich lange gebraucht, um mein WordPress-Plugin mit GitLab CI nach SVN zu deployen, statt es jedes Mal von Hand hochzuschieben. Schwierig war das nie. Ich habe es geschoben, so wie man alles schiebt, was man ja irgendwie hinkriegt, wenn man sich eine Stunde hinsetzt und konzentriert.</p>



<p class="wp-block-paragraph">Nur: Ein Release, für das man sich konzentrieren muss, geht irgendwann schief.</p>



<h2 class="wp-block-heading">Warum mich das SVN von wordpress.org so genervt hat</h2>



<p class="wp-block-paragraph">Mein Entwicklungsprozess sieht bei jedem Projekt gleich aus. Alles liegt in meinem GitLab, <code>feature/*</code> zweigt von <code>integration</code> ab, <code>integration</code> von <code>master</code>. Die CI lintet, testet, baut ein Paket. Wenn das Paket grün ist, ist es das Ergebnis, mit dem ich weiterarbeite. Das ist mein Takt, seit Jahren, über alle Projekte hinweg.</p>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:66.66%">
<p class="wp-block-paragraph">wordpress.org spielt bei dem Spiel nicht mit. Das Plugin-Verzeichnis läuft auf Subversion, mit der klassischen Struktur aus <code>trunk</code>, <code>tags</code> und <code>assets</code>. Kein Git, keine Pull Requests, kein Tag-Objekt. Ein Release ist dort ein Verzeichnis, das du kopierst. Und <code>assets</code> ist nicht mal Teil des Plugins, da liegen Banner, Icon und Screenshots für die Store-Seite.</p>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:33.33%">
<figure class="wp-block-image size-large has-lightbox"><img loading="lazy" decoding="async" width="1024" height="559" src="https://www.schiffler.eu/wp-content/uploads/2026/09/gitSvnPipeline_09-1024x559.jpeg" alt="Alte Werkzeuge für neue Dinge" class="wp-image-3237" srcset="https://www.schiffler.eu/wp-content/uploads/2026/09/gitSvnPipeline_09-1024x559.jpeg 1024w, https://www.schiffler.eu/wp-content/uploads/2026/09/gitSvnPipeline_09-300x164.jpeg 300w, https://www.schiffler.eu/wp-content/uploads/2026/09/gitSvnPipeline_09-768x419.jpeg 768w, https://www.schiffler.eu/wp-content/uploads/2026/09/gitSvnPipeline_09.jpeg 1408w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>
</div>



<p class="wp-block-paragraph">Von Hand heißt das jedes Mal: SVN auschecken, Dateien nach <code>trunk</code> kopieren, neue Dateien mit <code>svn add</code> anmelden, gelöschte mit <code>svn delete</code> abmelden, <code>svn copy trunk tags/4.4.0</code>, committen. Sechs Handgriffe, in der richtigen Reihenfolge, mit einem Passwort, das ich mir nie merke. Alle zwei Monate, also selten genug, dass ich jedes Mal in meinen alten Notizen nachgesehen habe, wie das nochmal ging.</p>



<p class="wp-block-paragraph">Der Beweis, dass das nicht funktioniert, lag jahrelang im veröffentlichten <code>trunk</code>. Aus den Handbetrieb-Zeiten schleppte mein Plugin <code>.project</code>, <code>.buildpath</code> und <code>.settings</code> mit sich herum, Eclipse-Altlasten von einem Rechner, den ich längst nicht mehr habe. Aufgefallen ist es erst, als der offizielle WordPress Plugin Check bei mir in der Pipeline lief und mir sagte: „Hidden files are not permitted.&#8220; Die Dateien lagen also im Store-Download, jahrelang, bei jedem, der das Plugin installiert hat. Beschwert hat sich nie jemand.</p>



<p class="wp-block-paragraph">Ein zweiter Punkt, über den ich beim ersten Versuch gestolpert bin und der in keiner Doku fett genug steht: Das SVN-Passwort ist nicht dein wordpress.org-Passwort. Du legst es separat im Profil unter „Account &amp; Security&#8220; an. Ich war eine ganze Weile überzeugt, mein Zugang sei kaputt.</p>



<h2 class="wp-block-heading">Die Grundidee: SVN ist kein Arbeitsplatz, sondern ein Ausgabegerät</h2>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:33.33%">
<figure class="wp-block-image size-large has-lightbox"><img loading="lazy" decoding="async" width="1024" height="559" src="https://www.schiffler.eu/wp-content/uploads/2026/09/gitSvnPipeline_03-1024x559.jpeg" alt="ungeordneter Schreibtisch am Abend" class="wp-image-3231" srcset="https://www.schiffler.eu/wp-content/uploads/2026/09/gitSvnPipeline_03-1024x559.jpeg 1024w, https://www.schiffler.eu/wp-content/uploads/2026/09/gitSvnPipeline_03-300x164.jpeg 300w, https://www.schiffler.eu/wp-content/uploads/2026/09/gitSvnPipeline_03-768x419.jpeg 768w, https://www.schiffler.eu/wp-content/uploads/2026/09/gitSvnPipeline_03.jpeg 1408w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:66.66%">
<p class="wp-block-paragraph">Der Denkfehler war, das SVN als zweites Repository zu betrachten, in dem ich irgendwie auch arbeite. Sobald man es als Drucker begreift, löst sich die Sache auf. Git ist die Wahrheit. Das SVN bekommt fertige Ware geliefert und interessiert mich sonst nicht.</p>



<p class="wp-block-paragraph">Praktisch bedeutet das: Kein Mensch checkt das Plugin-SVN mehr aus. Ein Skript kennt die sechs Handgriffe, die CI ruft es auf, und die Zugangsdaten liegen als maskierte CI/CD-Variablen in GitLab:</p>
</div>
</div>



<pre class="wp-block-code advgb-dyn-c4886699"><code>SVN_USERNAME = mein wordpress.org-Benutzername (case-sensitiv)
SVN_PASSWORD = das separate SVN-Passwort aus dem Profil
</code></pre>



<p class="wp-block-paragraph">Das ist die ganze Konfiguration. Alles andere steckt in Skripten, die im Repo liegen und die ich lokal genauso aufrufen kann.</p>



<h2 class="wp-block-heading">Was passiert, bevor überhaupt jemand an SVN denkt</h2>



<p class="wp-block-paragraph">Die Pipeline hat sechs Stufen: <code>image</code>, <code>lint</code>, <code>test</code>, <code>quality</code>, <code>build</code>, <code>deploy</code>. Bis es zum Deploy kommt, kann die Pipeline an vier Stellen vorher Nein sagen.</p>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:33.33%">
<figure class="wp-block-image size-large has-lightbox"><img loading="lazy" decoding="async" width="1024" height="559" src="https://www.schiffler.eu/wp-content/uploads/2026/09/gitSvnPipeline_05-1024x559.jpeg" alt="die moderne Werkbank" class="wp-image-3233" srcset="https://www.schiffler.eu/wp-content/uploads/2026/09/gitSvnPipeline_05-1024x559.jpeg 1024w, https://www.schiffler.eu/wp-content/uploads/2026/09/gitSvnPipeline_05-300x164.jpeg 300w, https://www.schiffler.eu/wp-content/uploads/2026/09/gitSvnPipeline_05-768x419.jpeg 768w, https://www.schiffler.eu/wp-content/uploads/2026/09/gitSvnPipeline_05.jpeg 1408w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:66.66%">
<p class="wp-block-paragraph"><strong>Stufe 0, das eigene CI-Image.</strong> Alle Jobs laufen in einem Base-Image, das die Pipeline selbst baut: PHP 8.1 mit den nötigen Extensions, Composer, wp-cli, MySQL-Client und, wichtig für später, <code>subversion</code> und <code>rsync</code>. Gebaut wird es mit Kaniko, also ohne Docker-Daemon und ohne Docker-in-Docker. Das Ergebnis landet in meiner eigenen Container-Registry, der Layer-Cache gleich daneben. Vorher hat jeder Job sein <code>apt-get install</code> selbst gemacht, was pro Lauf Minuten gekostet hat und bei jeder Netzstörung rot war.</p>
</div>
</div>



<p class="wp-block-paragraph"><strong>Stufe 1, Lint.</strong> PHPCS mit dem WordPress-Coding-Standard, strikt auf den modernen Kern in <code>plugin/src</code> (null Errors), dazu die PHP-8.1-Kompatibilitätsprüfung auf dem gesamten Plugin. Das Plugin ist alt, es gibt noch prozedurale Dateien aus der Frühzeit. Die wandern nach und nach in <code>plugin/src</code> und werden dort dann automatisch mitgeprüft. Ich finde das ehrlicher, als den Standard auf alles zu werfen, tausend Findings zu sehen und den Job dann dauerhaft auf <code>allow_failure</code> zu stellen. Dazu PHPStan auf Level 5 mit <code>phpstan-wordpress</code> und <code>composer audit</code> für bekannte Schwachstellen in den Abhängigkeiten.</p>



<p class="wp-block-paragraph"><strong>Stufe 2, Test.</strong> Die komplette PHPUnit-Suite gegen ein echtes WordPress. Als Service läuft <code>mariadb:10.11</code>, <code>bin/install-wp-tests.sh</code> zieht sich WordPress 6.5 samt Test-Library, dann läuft PHPUnit. Auf <code>integration</code> ist dieser Job die eigentliche Freigabe: Nur wenn er grün ist, darf nach <code>master</code> gemergt werden. Das erzwinge ich zusätzlich in GitLab über geschützte Branches und „Pipelines must succeed&#8220;, weil eine Regel, die nur in einem YAML-Kommentar steht, keine Regel ist.</p>



<p class="wp-block-paragraph"><strong>Stufe 3, Quality.</strong> Hier läuft der offizielle <a href="https://wordpress.org/plugins/plugin-check/" target="_blank" rel="noopener">Plugin Check</a> von wordpress.org, also genau das Werkzeug, mit dem auch das Plugin-Team schaut. Der Job baut sich ein Wegwerf-WordPress in <code>/tmp</code>, hängt das Plugin per Symlink ein und prüft es. Die Schwelle steht bei <code>warning</code>, nicht bei <code>error</code>: null Fehler und null Warnungen, sonst bricht die Pipeline.</p>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:66.66%">
<p class="wp-block-paragraph">Das war unbequem. Die alten Warnungen, vor allem <code>DirectDatabaseQuery</code> an meinem lokalen Bild-Cache, musste ich einzeln durchgehen: echte Findings gefixt, die unvermeidbaren Fehlalarme mit einem begründeten <code>phpcs:ignore</code> versehen. Danach war die Liste leer, und seitdem ist jede neue Warnung ein echtes Signal. Gefunden hat der Job unter anderem die Eclipse-Altlasten von oben, die mir in fünf Jahren Handbetrieb nie aufgefallen sind.</p>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:33.33%">
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="559" src="https://www.schiffler.eu/wp-content/uploads/2026/09/gitSvnPipeline_01-1024x559.jpeg" alt="Alte Bilder, alte Tags" class="wp-image-3229" srcset="https://www.schiffler.eu/wp-content/uploads/2026/09/gitSvnPipeline_01-1024x559.jpeg 1024w, https://www.schiffler.eu/wp-content/uploads/2026/09/gitSvnPipeline_01-300x164.jpeg 300w, https://www.schiffler.eu/wp-content/uploads/2026/09/gitSvnPipeline_01-768x419.jpeg 768w, https://www.schiffler.eu/wp-content/uploads/2026/09/gitSvnPipeline_01.jpeg 1408w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>
</div>



<p class="wp-block-paragraph">Kleiner Nebeneffekt, der mich lange geärgert hat: Sobald ein Branch einen offenen Merge Request hat, lief bei mir alles doppelt, einmal als Branch-Pipeline und einmal als MR-Pipeline, auf demselben Commit. Drei Regeln im <code>workflow</code>-Block räumen das auf, und <code>auto_cancel: on_new_commit: interruptible</code> beendet alte Läufe, wenn ich nachschiebe. Bei einer Pipeline, die für jeden Lauf ein komplettes WordPress installiert, merkt man das direkt an der Wartezeit.</p>



<h2 class="wp-block-heading">Der Build: was ins Paket gehört und was nicht</h2>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:33.33%">
<figure class="wp-block-image size-large has-lightbox"><img loading="lazy" decoding="async" width="1024" height="559" src="https://www.schiffler.eu/wp-content/uploads/2026/09/gitSvnPipeline_02-1024x559.jpeg" alt="unterschiedliche Tags für unterschiedliche Dinge" class="wp-image-3230" srcset="https://www.schiffler.eu/wp-content/uploads/2026/09/gitSvnPipeline_02-1024x559.jpeg 1024w, https://www.schiffler.eu/wp-content/uploads/2026/09/gitSvnPipeline_02-300x164.jpeg 300w, https://www.schiffler.eu/wp-content/uploads/2026/09/gitSvnPipeline_02-768x419.jpeg 768w, https://www.schiffler.eu/wp-content/uploads/2026/09/gitSvnPipeline_02.jpeg 1408w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:66.66%">
<p class="wp-block-paragraph">Auf <code>master</code> entsteht das eigentliche Auslieferungspaket, per <code>bin/build-plugin.sh</code>. Das Skript macht zwei Dinge, die wichtiger sind als das Zippen selbst.</p>



<p class="wp-block-paragraph">Erstens liest es die Version aus <code>plugin/readme.txt</code>, aus dem Feld <code>Stable tag</code>. Das ist bei wordpress.org die Angabe, die entscheidet, was ausgeliefert wird. Zweitens vergleicht es sie mit der <code>Version:</code> im Plugin-Header. Weichen die voneinander ab, bricht es ab:</p>
</div>
</div>



<pre class="wp-block-code"><code>VERSION=$(grep -i "^Stable tag:" "${PLUGIN_DIR}/readme.txt" | head -1 | sed 's/.*: *//' | tr -d '&#91;:space:]')
HEADER_VERSION=$(grep -iE "^\s*Version:" "${PLUGIN_DIR}/portraitarchiv-store.php" | head -1 | sed 's/.*: *//' | tr -d '&#91;:space:]')
if &#91; "$HEADER_VERSION" != "$VERSION" ]; then
    echo "FEHLER: Header-Version ($HEADER_VERSION) != readme Stable tag ($VERSION)"
    exit 1
fi
</code></pre>



<p class="wp-block-paragraph">Der Grund für die Härte: Eine falsch getaggte Version bekommst du bei wordpress.org nicht mehr zurück. Es gibt kein Zurückziehen, nur ein weiteres Release hinterher, und der Store zeigt in der Zwischenzeit fröhlich die kaputte Version an.</p>



<p class="wp-block-paragraph">Das Zip enthält einen Top-Level-Ordner mit dem Plugin-Slug, so wie WordPress es beim Installieren erwartet, und IDE- sowie VCS-Reste sind per <code>rsync</code>-Exclude ausgeschlossen. Es geht zusätzlich als Artefakt in die Pipeline, versioniert, 5 Tage haltbar. Damit habe ich für jede ausgelieferte Version das exakte Paket zum Download, ohne im SVN zu wühlen.</p>



<h2 class="wp-block-heading">Der Deploy: vierzig Zeilen, die das SVN erledigen</h2>



<p class="wp-block-paragraph"><code>bin/deploy-svn.sh</code> ist der Kern. Der Ablauf ist genau der Handbetrieb von früher, nur eben aufgeschrieben.</p>



<p class="wp-block-paragraph">Version lesen, SVN auschecken, <code>trunk</code> synchronisieren:</p>



<pre class="wp-block-code"><code>svn checkout --quiet "$SVN_URL" "$BUILD_DIR"

rsync -a --delete \
    --exclude='.svn' --exclude='.git' \
    --exclude='.settings' --exclude='.project' --exclude='.buildpath' \
    "${PLUGIN_DIR}/" "${BUILD_DIR}/trunk/"
</code></pre>



<p class="wp-block-paragraph"><code>--delete</code> ist hier das entscheidende Flag. Ohne das wächst der <code>trunk</code> bei jedem Release, weil gelöschte Dateien einfach liegen bleiben. Genau so entstehen die Altlasten, die ich oben beschrieben habe.</p>



<p class="wp-block-paragraph">Danach die Store-Assets aus <code>.wordpress-org</code> nach <code>assets</code>, ebenfalls mit <code>--delete</code>. Dann der Schritt, den man von Hand am liebsten vergisst: SVN muss man mitteilen, welche Dateien neu sind und welche verschwunden sind.</p>



<pre class="wp-block-code"><code>svn add --force . --quiet
svn status | awk '/^!/ {print $2}' | xargs -r svn delete --quiet
</code></pre>



<p class="wp-block-paragraph">Das <code>!</code> in der Statusausgabe steht für „laut SVN vorhanden, im Dateisystem weg&#8220;. Ohne diese Zeile scheitert der Commit oder, schlimmer, er läuft durch und lässt Dateien im Verzeichnis, die du längst gelöscht hast.</p>



<p class="wp-block-paragraph">Dann der Tag. Und zwar bedingt:</p>



<pre class="wp-block-code"><code>if svn ls "${SVN_URL}/tags/${VERSION}" &gt;/dev/null 2&gt;&amp;1; then
    echo "==&gt; Tag ${VERSION} existiert bereits im SVN – überspringe Tag-Erstellung"
else
    svn copy --quiet "trunk" "tags/${VERSION}"
fi
</code></pre>



<p class="wp-block-paragraph">Das ist mir wichtiger geworden, als es aussieht. Der Deploy läuft bei mir auf jedem <code>master</code>-Commit, also auch bei einem Nachtrag am Changelog ohne Versionsbump. Wenn der Job dann am schon existierenden Tag stirbt, ist meine Pipeline rot, obwohl alles in Ordnung ist. Seitdem kann ich den Job zweimal laufen lassen, ohne vorher nachzudenken, und traue mich deshalb auch, ihn mal von Hand anzustoßen.</p>



<p class="wp-block-paragraph">Am Ende ein einziger Commit, der <code>trunk</code>, <code>assets</code> und den neuen Tag zusammen veröffentlicht:</p>



<pre class="wp-block-code"><code>svn commit --username "$SVN_USERNAME" --password "$SVN_PASSWORD" \
    --non-interactive --no-auth-cache -m "Release ${VERSION}"
</code></pre>



<p class="wp-block-paragraph">Zwei Details noch. Das Skript kennt <code>DRY_RUN=1</code>, dann bereitet es alles vor und zeigt nur den <code>svn status</code>. So habe ich es entwickelt, ohne das öffentliche Verzeichnis als Testumgebung zu benutzen. Und in der Pipeline steht der Job auf <code>interruptible: false</code>. Alle anderen Jobs dürfen abgebrochen werden, wenn ich einen neuen Commit nachschiebe. Ein halb übertragener SVN-Commit dagegen ist öffentlich sichtbarer Murks.</p>



<h2 class="wp-block-heading">Der Git-Tag: dieselbe Version in beiden Welten</h2>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:66.66%">
<p class="wp-block-paragraph">Nach erfolgreichem SVN-Push setzt ein zweiter Job denselben Tag im Git, also <code>4.4.0</code> hier und <code>tags/4.4.0</code> dort. Damit finde ich Monate später zu jeder ausgelieferten Version den Commit, ohne zu raten. Bei einer Support-Anfrage ist das immer die erste Frage, die ich mir selbst stellen muss: Welchen Stand hat der Kunde da eigentlich installiert?</p>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:33.33%">
<figure class="wp-block-image size-large has-lightbox"><img loading="lazy" decoding="async" width="1024" height="559" src="https://www.schiffler.eu/wp-content/uploads/2026/09/gitSvnPipeline_12-1024x559.jpeg" alt="sauber sortierte Pakete mit Tags" class="wp-image-3240" srcset="https://www.schiffler.eu/wp-content/uploads/2026/09/gitSvnPipeline_12-1024x559.jpeg 1024w, https://www.schiffler.eu/wp-content/uploads/2026/09/gitSvnPipeline_12-300x164.jpeg 300w, https://www.schiffler.eu/wp-content/uploads/2026/09/gitSvnPipeline_12-768x419.jpeg 768w, https://www.schiffler.eu/wp-content/uploads/2026/09/gitSvnPipeline_12.jpeg 1408w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>
</div>



<p class="wp-block-paragraph">Und hier bin ich in eine Falle gelaufen, die nichts mit WordPress zu tun hat. Der eingebaute Weg über das <code>release:</code>-Keyword in GitLab CI hat bei mir nicht funktioniert: Der Runner-Step delegiert intern an <code>glab</code>, und <code>glab</code> kennt keine Option, die TLS-Prüfung zu überspringen. Meine GitLab-Instanz läuft mit selbstsigniertem Zertifikat, also endete jeder Versuch bei <code>x509: certificate signed by unknown authority</code>. Die Lösung war, <code>release-cli</code> direkt im Script aufzurufen. Das spricht die Releases-API an, akzeptiert <code>--insecure-https</code> und liest Server-URL, Projekt-ID und Job-Token selbst aus den vordefinierten CI-Variablen.</p>



<pre class="wp-block-code"><code>tag:release:
  stage: deploy
  needs: &#91;"deploy:svn"]
  interruptible: false
  image: registry.gitlab.com/gitlab-org/release-cli:latest
  script:
    - 'VERSION=$(grep -i "^Stable tag:" plugin/readme.txt | head -1 | sed ''s/.*: *//'' | tr -d ''&#91;:space:]'')'
    - &gt;
      release-cli --insecure-https create
      --tag-name "$VERSION" --ref "$CI_COMMIT_SHA" --name "$VERSION"
      --description "Release $VERSION - Changelog siehe plugin/readme.txt"
</code></pre>



<p class="wp-block-paragraph">Wer eine GitLab-Instanz mit ordentlichem Zertifikat hat, kann bei <code>release:</code> bleiben. Ich schreibe es trotzdem hin, weil die Fehlermeldung nach einem Zertifikatsproblem im Repository aussieht und man erstmal an der völlig falschen Stelle sucht.</p>



<h2 class="wp-block-heading">Was ich beim zweiten Plugin anders gemacht habe</h2>



<p class="wp-block-paragraph">Vor ein paar Wochen habe ich für einen <a href="https://www.ssvon.de">Sportverein hier im Ort</a> <a href="https://squadeno.com">ein Plugin gebaut</a>. Die sind mit ihrer Verwaltung ziemlich am Anschlag, Termine, Mannschaften, Ansprechpartner, das alles per Mail und Excel. Weil ich das Ergebnis sowieso brauchbar finde, wollte ich es auch veröffentlichen, und damit stand ich wieder vor derselben SVN-Strecke.</p>



<p class="wp-block-paragraph">Diesmal war es eine Stunde Arbeit statt eines Abends, weil das Muster stand. Vier Dinge habe ich dabei bewusst anders gelöst, und die zeigen ziemlich gut, wo die Shop-Pipeline noch die erste Ausbaustufe ist.</p>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:33.33%">
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="559" src="https://www.schiffler.eu/wp-content/uploads/2026/09/gitSvnPipeline_10-1024x559.jpeg" alt="sortierte Artefakte" class="wp-image-3238" srcset="https://www.schiffler.eu/wp-content/uploads/2026/09/gitSvnPipeline_10-1024x559.jpeg 1024w, https://www.schiffler.eu/wp-content/uploads/2026/09/gitSvnPipeline_10-300x164.jpeg 300w, https://www.schiffler.eu/wp-content/uploads/2026/09/gitSvnPipeline_10-768x419.jpeg 768w, https://www.schiffler.eu/wp-content/uploads/2026/09/gitSvnPipeline_10.jpeg 1408w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:66.66%">
<p class="wp-block-paragraph"><strong>Online geht das Artefakt, nicht das Repository.</strong> Im Shop synchronisiert das Deploy-Skript den <code>plugin/</code>-Ordner aus dem Arbeitsverzeichnis. Im neuen Plugin ist die Quelle ausschließlich das gebaute Zip aus dem Build-Job. Das Skript entpackt es und schiebt genau diesen Inhalt ins SVN. Der Unterschied ist keine Kosmetik: So kann prinzipiell nichts online gehen, was nicht vorher gebaut, getestet und geprüft wurde, und Entwicklungsdateien können gar nicht erst mitrutschen.</p>
</div>
</div>



<p class="wp-block-paragraph"><strong>Der Checkout bleibt schlank.</strong> Ein vollständiger Checkout des Plugin-SVN holt jedes alte Release mit. Beim ersten Plugin fällt das nicht auf, bei Version 40 schon. Also sparse:</p>



<pre class="wp-block-code"><code>svn checkout --quiet --depth immediates "$SVN_URL" "$CHECKOUT"
# trunk und assets vollständig, tags nur als Verzeichnisliste
svn update --quiet --set-depth infinity trunk
svn update --quiet --set-depth immediates tags
</code></pre>



<p class="wp-block-paragraph">Der Inhalt alter Tags interessiert niemanden, ich muss nur wissen, welche es schon gibt.</p>



<p class="wp-block-paragraph"><strong>Der Deploy ist sichtbar, wartet aber auf mich.</strong> Im Shop läuft er auf jedem <code>master</code>-Commit automatisch. Beim neuen Plugin steht er als manueller Job in der Pipeline und wartet auf den Play-Knopf, und mit einer gesetzten Variable <code>WPORG_DEPLOY=1</code> läuft er automatisch durch. Zwei Regelzweige, weil GitLab einen Job, dessen Regel nicht greift, gar nicht anlegt, und eine leere Stage zeigt die Oberfläche nicht an. Mir war wichtig, dass ich die Stage sehe, auch wenn gerade nichts rausgehen soll.</p>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:66.66%">
<p class="wp-block-paragraph"><strong>Der Tag-Job stellt die richtige Frage.</strong> Das ist der Fehler, auf den ich am wenigsten stolz bin. Im Shop hängt der Tag-Job an einer <code>changes</code>-Regel auf <code>plugin/readme.txt</code>, damit er nur bei einem Versionsbump feuert. Klingt vernünftig, ist aber die falsche Frage. Die Regel fragt „hat sich diese Datei in diesem Commit geändert?&#8220;, entscheidend wäre „fehlt der Tag?&#8220;. Am 29. August ist mir das aufgefallen: Ein Deploy, den ich von Hand angestoßen hatte, blieb ohne Git-Tag zurück, weil der Commit die readme nicht angefasst hatte. Der neue Job läuft nach jedem erfolgreichen SVN-Deploy und entscheidet selbst:</p>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:33.33%">
<figure class="wp-block-image size-large has-lightbox"><img loading="lazy" decoding="async" width="1024" height="559" src="https://www.schiffler.eu/wp-content/uploads/2026/09/gitSvnPipeline_14-1024x559.jpeg" alt="Paketierungspipeline" class="wp-image-3242" srcset="https://www.schiffler.eu/wp-content/uploads/2026/09/gitSvnPipeline_14-1024x559.jpeg 1024w, https://www.schiffler.eu/wp-content/uploads/2026/09/gitSvnPipeline_14-300x164.jpeg 300w, https://www.schiffler.eu/wp-content/uploads/2026/09/gitSvnPipeline_14-768x419.jpeg 768w, https://www.schiffler.eu/wp-content/uploads/2026/09/gitSvnPipeline_14.jpeg 1408w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>
</div>



<pre class="wp-block-code"><code>if release-cli --insecure-https get --tag-name "$VERSION" &gt;/dev/null 2&gt;&amp;1; then
  echo "==&gt; Release ${VERSION} existiert bereits – kein neuer Tag."
  exit 0
fi
</code></pre>



<p class="wp-block-paragraph">Dieselbe Idempotenz-Idee wie beim SVN-Tag. Prüfe den Zustand, nicht das Ereignis.</p>



<p class="wp-block-paragraph">Dazu noch eine Kleinigkeit, die ich beim zweiten Mal sauberer gelöst habe: Die Version steht dort an drei Stellen, in der <code>readme.txt</code>, im Plugin-Header und in einer PHP-Konstante fürs Cache-Busting. Es gibt genau ein Skript, das sie ermittelt und dabei alle drei auf Gleichheit prüft. Build, Deploy und Tag greifen darauf zu. Im Shop steckt derselbe Vergleich noch im Build-Skript selbst.</p>



<h2 class="wp-block-heading">Was es gebracht hat</h2>



<p class="wp-block-paragraph">Ein Release ist bei mir jetzt ein Merge nach <code>master</code> und, beim neuen Plugin, ein Klick. Ich muss nichts über Subversion wissen, während ich das mache. Der Teil, der früher Konzentration gebraucht hat, ist der Teil, über den ich am wenigsten nachdenke.</p>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:33.33%">
<figure class="wp-block-image size-large has-lightbox"><img loading="lazy" decoding="async" width="1024" height="559" src="https://www.schiffler.eu/wp-content/uploads/2026/09/gitSvnPipeline_14-1024x559.jpeg" alt="Paketierungspipeline" class="wp-image-3242" srcset="https://www.schiffler.eu/wp-content/uploads/2026/09/gitSvnPipeline_14-1024x559.jpeg 1024w, https://www.schiffler.eu/wp-content/uploads/2026/09/gitSvnPipeline_14-300x164.jpeg 300w, https://www.schiffler.eu/wp-content/uploads/2026/09/gitSvnPipeline_14-768x419.jpeg 768w, https://www.schiffler.eu/wp-content/uploads/2026/09/gitSvnPipeline_14.jpeg 1408w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:66.66%">
<p class="wp-block-paragraph">Der zweite Gewinn ist der, mit dem ich nicht gerechnet habe: Weil das Deployen billig geworden ist, veröffentliche ich häufiger. Vorher habe ich Fixes gesammelt, bis sich der Aufwand „lohnt&#8220;. Version 4.3.0 mit den signierten Bild-URLs wäre früher ein Ereignis gewesen, für das ich mir einen ruhigen Abend freihalte.</p>
</div>
</div>



<p class="wp-block-paragraph">Wenn ich nochmal bei null anfinge, würde ich zwei Dinge sofort anders machen: das gebaute Artefakt deployen und nicht das Arbeitsverzeichnis, und den Plugin Check vom ersten Tag an als hartes Gate laufen lassen, bevor sich Altlasten ansammeln, die dann jahrelang im Store liegen. Die vier Punkte aus dem zweiten Plugin ziehe ich beim Shop nach, das steht auf der Liste.</p>



<p class="wp-block-paragraph">Und das SVN? Interessiert mich inzwischen ungefähr so sehr wie der Druckertreiber.</p>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:25%"></div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:50%">
<figure class="wp-block-image size-large has-lightbox"><img loading="lazy" decoding="async" width="1024" height="559" src="https://www.schiffler.eu/wp-content/uploads/2026/09/gitSvnPipeline_08-1024x559.jpeg" alt="geordneter Schreibtisch am Morgen" class="wp-image-3236" srcset="https://www.schiffler.eu/wp-content/uploads/2026/09/gitSvnPipeline_08-1024x559.jpeg 1024w, https://www.schiffler.eu/wp-content/uploads/2026/09/gitSvnPipeline_08-300x164.jpeg 300w, https://www.schiffler.eu/wp-content/uploads/2026/09/gitSvnPipeline_08-768x419.jpeg 768w, https://www.schiffler.eu/wp-content/uploads/2026/09/gitSvnPipeline_08.jpeg 1408w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:25%"></div>
</div>
<p>Der Beitrag <a href="https://www.schiffler.eu/wordpress-plugin-gitlab-ci-nach-svn-deployen/">WordPress-Plugin mit GitLab CI nach SVN deployen: mein Release läuft auf einen Klick</a> erschien zuerst auf <a href="https://www.schiffler.eu">Das ist die Welt von Thomas</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.schiffler.eu/wordpress-plugin-gitlab-ci-nach-svn-deployen/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>WordPress Mainz: Warum ich diese Webseite trotzdem gebaut habe</title>
		<link>https://www.schiffler.eu/wordpress-mainz-goldenes-lamm-bodenheim/</link>
					<comments>https://www.schiffler.eu/wordpress-mainz-goldenes-lamm-bodenheim/#comments</comments>
		
		<dc:creator><![CDATA[Thomas Schiffler]]></dc:creator>
		<pubDate>Mon, 02 Feb 2026 06:53:13 +0000</pubDate>
				<category><![CDATA[eigene Projekte]]></category>
		<category><![CDATA[Bodenheim]]></category>
		<category><![CDATA[Homepage]]></category>
		<category><![CDATA[Kundenauftrag]]></category>
		<category><![CDATA[Webdesign – aber nicht so, wie du denkst]]></category>
		<category><![CDATA[Wordpress]]></category>
		<guid isPermaLink="false">https://www.schiffler.eu/?p=2833</guid>

					<description><![CDATA[<p>Ich baue normalerweise keine Webseiten. Und ich nehme auch keine Aufträge dafür an.Mein Alltag dreht sich eher um Funktionalität, saubere &#8230; <a href="https://www.schiffler.eu/wordpress-mainz-goldenes-lamm-bodenheim/" class="more-link">More <span class="screen-reader-text">WordPress Mainz: Warum ich diese Webseite trotzdem gebaut habe</span> <span class="meta-nav">&#8594;</span></a></p>
<p>Der Beitrag <a href="https://www.schiffler.eu/wordpress-mainz-goldenes-lamm-bodenheim/">WordPress Mainz: Warum ich diese Webseite trotzdem gebaut habe</a> erschien zuerst auf <a href="https://www.schiffler.eu">Das ist die Welt von Thomas</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Ich baue normalerweise keine Webseiten. Und ich nehme auch keine Aufträge dafür an.<br>Mein Alltag dreht sich eher um Funktionalität, saubere Lösungen und Dinge, die im Hintergrund einfach zuverlässig laufen.</p>



<p class="wp-block-paragraph">Aber manchmal gibt es Projekte, bei denen man nicht Nein sagen kann.</p>



<p class="wp-block-paragraph">Ein guter Freund hat im Januar <a href="https://goldeneslamm-bodenheim.de/gasthaus/" type="link" id="https://goldeneslamm-bodenheim.de/gasthaus/" target="_blank" rel="noreferrer noopener">das Restaurant seiner Eltern übernommen – ein Familienbetrieb</a>, der inzwischen in <strong>fünfter Generation</strong> geführt wird. Als ich mir die bestehende Webseite angesehen habe, war ich ehrlich gesagt erschrocken. Nicht, weil jemand „schlecht gearbeitet“ hätte, sondern weil sie dem, was dieses Restaurant ausmacht, einfach nicht gerecht wurde.</p>



<p class="wp-block-paragraph">Und genau da begann es.</p>



<h3 class="wp-block-heading">Warum WordPress – und warum Mainz?</h3>



<p class="wp-block-paragraph">Gerade für regionale Unternehmen rund um <strong>Mainz</strong> braucht es keine überladene Agentur-Webseite. Was es braucht, ist eine Seite, die:</p>



<ul class="wp-block-list">
<li>das Gefühl des Ortes transportiert</li>



<li>Vertrauen schafft</li>



<li>einfach zu pflegen ist</li>



<li>und bei Google gefunden wird</li>
</ul>



<p class="wp-block-paragraph"><strong>WordPress</strong> ist dafür nach wie vor mein Werkzeug der Wahl. Nicht, weil es hip ist, sondern weil es funktioniert. Sauber umgesetzt, mit klarer Struktur und ohne unnötigen Ballast, ist <a href="https://www.schiffler.eu/thema/wordpress/" type="post_tag" id="105">WordPress </a>eine extrem starke Basis – besonders für lokale Unternehmen im Raum Mainz.</p>



<h3 class="wp-block-heading">Mehr als nur „eine neue Webseite“</h3>



<p class="wp-block-paragraph"><a href="https://www.schiffler.eu/thomas-schiffler-it-architekt-java-jee-spring-python/" type="page" id="45">Ich </a>wollte keine Webseite bauen, die „okay“ ist.<br>Ich wollte eine Seite, die dem Restaurant gerecht wird.</p>



<p class="wp-block-paragraph">Eine Seite, bei der man beim Durchklicken merkt:<br>Hier steckt Herz drin. Hier isst man nicht einfach nur – hier wird Tradition gelebt.</p>



<p class="wp-block-paragraph">Also habe ich mir Zeit genommen. Habe reduziert statt aufgeblasen. Habe auf bewährte WordPress-Module gesetzt und nur dort eingegriffen, wo es wirklich nötig war. Kein Schnickschnack, kein lautes Design – sondern Klarheit, Wärme und Ruhe.</p>



<h3 class="wp-block-heading">Eine Seite, die sich richtig anfühlt</h3>



<p class="wp-block-paragraph">Die neue Webseite ist inzwischen online:<br><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f449.png" alt="👉" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <a href="https://goldeneslamm-bodenheim.de/" target="_blank" rel="noreferrer noopener">https://goldeneslamm-bodenheim.de/</a></p>



<p class="wp-block-paragraph">Und zum ersten Mal seit sehr langer Zeit kann ich sagen:<br>Diese Webseite gefällt mir wirklich. Nicht nur technisch, sondern als Ganzes.</p>



<p class="wp-block-paragraph">Sie fühlt sich stimmig an.<br>Sie passt zum Restaurant.<br>Und sie macht Lust darauf, dort einen Tisch zu reservieren.</p>



<p class="wp-block-paragraph">Genau das sollte eine gute Webseite tun.</p>



<h3 class="wp-block-heading">WordPress Mainz – manchmal macht man eine Ausnahme</h3>



<p class="wp-block-paragraph">Ich weiß, dass ich solche Projekte normalerweise nicht anbiete. Aber dieses hier zeigt, warum ich WordPress mag – und warum ich es gerade für Unternehmen in und um <strong>Mainz</strong> weiterhin für das richtige Werkzeug halte.</p>



<p class="wp-block-paragraph">Manchmal entsteht etwas Gutes, weil man nicht nach einem Auftrag sucht, sondern weil man helfen möchte.</p>



<p class="wp-block-paragraph">Und manchmal ist genau das der Unterschied.</p>
<p>Der Beitrag <a href="https://www.schiffler.eu/wordpress-mainz-goldenes-lamm-bodenheim/">WordPress Mainz: Warum ich diese Webseite trotzdem gebaut habe</a> erschien zuerst auf <a href="https://www.schiffler.eu">Das ist die Welt von Thomas</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.schiffler.eu/wordpress-mainz-goldenes-lamm-bodenheim/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Simple Amazon Referral &#8211; WordPress Modul durch ChatGPT</title>
		<link>https://www.schiffler.eu/simple-amazon-referral-wordpress-modul-durch-chatgpt/</link>
					<comments>https://www.schiffler.eu/simple-amazon-referral-wordpress-modul-durch-chatgpt/#respond</comments>
		
		<dc:creator><![CDATA[Thomas Schiffler]]></dc:creator>
		<pubDate>Mon, 20 Jan 2025 18:30:00 +0000</pubDate>
				<category><![CDATA[eigene Projekte]]></category>
		<category><![CDATA[artificial intelligence]]></category>
		<category><![CDATA[ChatGPT]]></category>
		<category><![CDATA[Codeschnipsel]]></category>
		<category><![CDATA[LLM]]></category>
		<category><![CDATA[Simple Amazon Referral]]></category>
		<category><![CDATA[werbung]]></category>
		<category><![CDATA[Wordpress]]></category>
		<guid isPermaLink="false">https://www.schiffler.eu/?p=2458</guid>

					<description><![CDATA[<p>Dem ein oder anderen mag es schon aufgefallen sein, hier und da verwende ich Referral Links in meinen Artikel. Diese &#8230; <a href="https://www.schiffler.eu/simple-amazon-referral-wordpress-modul-durch-chatgpt/" class="more-link">More <span class="screen-reader-text">Simple Amazon Referral &#8211; WordPress Modul durch ChatGPT</span> <span class="meta-nav">&#8594;</span></a></p>
<p>Der Beitrag <a href="https://www.schiffler.eu/simple-amazon-referral-wordpress-modul-durch-chatgpt/">Simple Amazon Referral &#8211; WordPress Modul durch ChatGPT</a> erschien zuerst auf <a href="https://www.schiffler.eu">Das ist die Welt von Thomas</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Dem ein oder anderen mag es schon aufgefallen sein, hier und da verwende ich Referral Links in meinen Artikel. Diese waren, bis vor kurzem, Abhängig von einer externen API welche den Zugriff beliebig beschränkt. Nun kam mir die Idee die Daten einfach direkt in WordPress zu halten ohne externe Abhängigkeiten. Also stellte ich am Sonntag ChatGPT die Frage ob er mir ein Modul erstellen könnte und das Ergebnis hat mich wirklich überrascht &#8211; entstanden ist das <a href="https://github.com/tschiffler/simple-amazon-referral" target="_blank" rel="noreferrer noopener">Simple Amazon Referral Modul für WordPress</a>. </p>



<h2 class="wp-block-heading">Warum überhaupt ein neues Modul?</h2>



<p class="wp-block-paragraph">Mehr oder weniger Regelmäßig kommt es dazu, dass <a href="https://amzn.to/3Ct8D2h" target="_blank" title="Amazon" alt="Amazon">Amazon*</a> seine Prozesse ändert. Anfangs konnte man über die UI HTML-Code mit Bildern etc. erstellen. Dann musste man das über das Backend machen, dann gab es eine API. Nun hat sich Amazon gedacht, es wäre clever die API zu drosseln, wenn man zu wenige Verkäufe hat was dazu führt, dass die Artikel nicht mehr angezeigt werden und weniger verkauft werden &#8230; Kein Kommentar dazu.</p>



<p class="wp-block-paragraph">Möchte man jedoch einen einfachen Link, ggf. mit einem Foto und einer Beschreibung anzeigen und zu <a href="https://amzn.to/3Ct8D2h" target="_blank" title="Amazon" alt="Amazon">Amazon*</a> verlinken benötigt man mehr als den bereitgestellten HTML-Link. Die Informationen die man selbst benötigt um einen Link zusammen zu bauen sind überschaubar (Link, Titel, Beschreibung, ID), also ist eine echte Abhängigkeit aus meiner Sicht nicht notwendig und über eine kleine Datenbanktabelle recht einfach umsetzbar.</p>



<h2 class="wp-block-heading">ChatGPT: erstelle mir ein WordPress-Modul</h2>



<p class="wp-block-paragraph">Es war Sonntag und ich saß mit dem Notebook am Wohnzimmertisch. Ich dachte mir ich könnte doch einfach mal ChatGPT fragen, ob es nicht Lust hätte mir ein WordPress-Modul zur Verwaltung der Referal Links zu erstellen. Ich eröffnete einen Chat und hatte nach nur 2 Prompts das erste funktionierende Modul. Als erstes fragte ich ChatGPT ob dies eine Möglichkeit kennt die Produkte zu integrieren:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Wie kann ich einen Amazon Artikel auf meiner Seite mit Name, Bild und Beschreibung anzeigen wenn ich einen Partner Account habe aber mein API Access limitiert ist?</p>
</blockquote>



<p class="wp-block-paragraph">Die Antworten zeigten unterschiedliche Möglichkeiten auf wie kostenpflichtige Module welche Amazon Scrapen über den Einsatz von Dienstleistern bis hin zur manuellen Erstellung der Anzeigen. Also fragte ich </p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Ich denke es ist am einfachsten, wenn ich mir hier selbst was bastle<br>Kannst du mir ein WordPress Modul erstellen? Dies soll folgende Funktionen haben</p>



<p class="wp-block-paragraph">Das Modul hat eine Datenbanktabelle in welcher die relevanten Daten gespeichert werden (Amazon-Produkt-ID, URL zum anzuzeigenden Bild, Titel des Produktes, Optionale Beschreibung, Link zum Artikel)</p>



<p class="wp-block-paragraph">Die Daten sollen über eine Maske im Adminbereich des Modules gepflegt werden können<br>Über einen Shortcode sollen die Artikel in einen Beitrag integriert werden &#8211; Beispiel<br><p>Produkt nicht gefunden.</p></p>



<p class="wp-block-paragraph">Wenn es integriert wird soll ein HTML Snippet in die Seite integriert werden bei welchen die entsprechenden Daten des Produktes zur ID angezeigt werden</p>



<p class="wp-block-paragraph">Die Snippets sollten in externen Dateien pflegbar und erweiterbar sein. </p>



<p class="wp-block-paragraph">Das Modul soll &#8218;Simple Amazon Referral&#8216; heissen</p>
</blockquote>



<p class="wp-block-paragraph">Um ehrlich zu sein habe ich nicht sonderlich viel erwartet doch das Ergebnis war direkt einsetzbar. ChatGPT erstellt mir eine erste Version des Modules welches den Vorgaben von WordPress entsprach, die Datenbank aufsetzte und sämtliche Vorgaben erfüllte.</p>



<h2 class="wp-block-heading">ChatGPT setzt auch Anpassungswünsche um</h2>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:66.66%">
<p class="wp-block-paragraph">Nachdem die erste Version des Modules bereits recht gute Ergebnisse erzielte und ein erster PoC erfolgreich war versuchte ich, das Modul weiter zu verbessern. Hierbei blieb ich einfach im gleichen Chat und teilte meine Wünsche mit:</p>



<ul class="wp-block-list">
<li>Erstellung weiterer Anzeige-Templates</li>



<li>Shortcode erweitern um Auswahl des Templates</li>



<li>weitere Shortcode zur Erstellung eines Textlinks</li>



<li>Angabe der Datenbank-ID oder der Produkt-ID im Shortcode</li>
</ul>



<p class="wp-block-paragraph">Am &#8222;Ende&#8220; ist ein Modul entstanden welches ich, ohne eigene Anpassungen, direkt einsetzen könnte. Die Qualität überraschte mich wirklich enorm.</p>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:33.33%">
<figure class="wp-block-image size-full has-lightbox"><img loading="lazy" decoding="async" width="1024" height="1024" src="https://www.schiffler.eu/wp-content/uploads/2025/01/a65047e4-f060-4daa-9452-c2b801cd5506.webp" alt="" class="wp-image-2465" srcset="https://www.schiffler.eu/wp-content/uploads/2025/01/a65047e4-f060-4daa-9452-c2b801cd5506.webp 1024w, https://www.schiffler.eu/wp-content/uploads/2025/01/a65047e4-f060-4daa-9452-c2b801cd5506-300x300.webp 300w, https://www.schiffler.eu/wp-content/uploads/2025/01/a65047e4-f060-4daa-9452-c2b801cd5506-150x150.webp 150w, https://www.schiffler.eu/wp-content/uploads/2025/01/a65047e4-f060-4daa-9452-c2b801cd5506-768x768.webp 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>
</div>



<h2 class="wp-block-heading">Code nach kleinem Review veröffentlicht</h2>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:33.33%">
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="528" src="https://www.schiffler.eu/wp-content/uploads/2025/01/githubProjectSimpleAmazonReferral-1024x528.jpg" alt="Screenshot GitHub 'Simple Amazon Referal'" class="wp-image-2467" srcset="https://www.schiffler.eu/wp-content/uploads/2025/01/githubProjectSimpleAmazonReferral-1024x528.jpg 1024w, https://www.schiffler.eu/wp-content/uploads/2025/01/githubProjectSimpleAmazonReferral-300x155.jpg 300w, https://www.schiffler.eu/wp-content/uploads/2025/01/githubProjectSimpleAmazonReferral-768x396.jpg 768w, https://www.schiffler.eu/wp-content/uploads/2025/01/githubProjectSimpleAmazonReferral.jpg 1217w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:66.66%">
<p class="wp-block-paragraph">Ich gebe zu, dass ich ChatGPT nicht vertraut und den Code nochmal geprüft habe. Auch habe ich mir manuell nochmal die Vorgaben von WordPress zur Entwicklung von Modulen durchgelesen (mein letzte Modul ist doch schon ein paar Jahre her). Allerdings musste ich selbst nichts verbessern was ich nicht über Prompts durch ChatGPT übernehmen lassen konnte. </p>



<p class="wp-block-paragraph">In den <a href="https://de.wordpress.org/plugins/">offiziellen WordPress Modulkatalog</a> habe ich das Modul nun nicht übernommen, dennoch entschied ich mich dazu es <a href="https://github.com/tschiffler/simple-amazon-referral" target="_blank" rel="noreferrer noopener">auf Github</a> abzulegen.</p>
</div>
</div>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"></p>
</blockquote>



<p class="wp-block-paragraph">Das gesamte Modul ist unter GitHub unter dem Namen &#8218;<a href="https://github.com/tschiffler/simple-amazon-referral" target="_blank" rel="noreferrer noopener">Simple Amazon Referral</a>&#8218; bereitgestellt. Mal sehen wie sich das ganze weiter entwickelt &#8230;</p>



<h2 class="wp-block-heading">ChatGPT als Gefahr für die Softwareentwicklung?</h2>



<p class="wp-block-paragraph">Wenn ich mich mit Bekannten unterhalte kommt häufig die Frage auf, ob ChatGPT (oder andere LLMs) nicht eine Gefahr für die Softwareentwicklung darstellen. Ich selbst sehe das nicht so sondern sehe in den LLMs Möglichkeiten zu Optimierung. Schon heute unterstützen mich die Modelle in meiner täglichen Arbeit (inzwischen auch in meinem Berufsleben) und nehmen mir &#8222;leichte Arbeiten&#8220; zum Teil ab. Hier und da werde ich korrigiert oder auf Fehler hingewiesen. Ich persönlich sehe die Large Language Modelle eher als eine neue Technik an die man als guter ITler kennen und beherrschen sollte. </p>



<p class="wp-block-paragraph">Wie seht Ihr das?</p>
<p>Der Beitrag <a href="https://www.schiffler.eu/simple-amazon-referral-wordpress-modul-durch-chatgpt/">Simple Amazon Referral &#8211; WordPress Modul durch ChatGPT</a> erschien zuerst auf <a href="https://www.schiffler.eu">Das ist die Welt von Thomas</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.schiffler.eu/simple-amazon-referral-wordpress-modul-durch-chatgpt/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Bildquellen und Urheberrechte in WordPress verwalten</title>
		<link>https://www.schiffler.eu/bildquellen-und-urheberrechte-in-wordpress-verwalten/</link>
					<comments>https://www.schiffler.eu/bildquellen-und-urheberrechte-in-wordpress-verwalten/#respond</comments>
		
		<dc:creator><![CDATA[Thomas Schiffler]]></dc:creator>
		<pubDate>Sat, 26 Sep 2020 06:54:00 +0000</pubDate>
				<category><![CDATA[IT-Know How]]></category>
		<category><![CDATA[Bildquellen]]></category>
		<category><![CDATA[Know How]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[Urheberrecht]]></category>
		<category><![CDATA[Wordpress]]></category>
		<guid isPermaLink="false">https://www.schiffler.eu/?p=690</guid>

					<description><![CDATA[<p>Eine Internetseite oder ein Blog ohne Bildmaterial ist doch wirklich sehr langweilig. Ich stellte mir die Frage wie ich die &#8230; <a href="https://www.schiffler.eu/bildquellen-und-urheberrechte-in-wordpress-verwalten/" class="more-link">More <span class="screen-reader-text">Bildquellen und Urheberrechte in WordPress verwalten</span> <span class="meta-nav">&#8594;</span></a></p>
<p>Der Beitrag <a href="https://www.schiffler.eu/bildquellen-und-urheberrechte-in-wordpress-verwalten/">Bildquellen und Urheberrechte in WordPress verwalten</a> erschien zuerst auf <a href="https://www.schiffler.eu">Das ist die Welt von Thomas</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Eine Internetseite oder ein Blog ohne Bildmaterial ist doch wirklich sehr langweilig. Ich stellte mir die Frage wie ich die Bildquellen und Urheberrechte in meinem WordPress Blog möglichst einfach und sicher verwalten kann. Bei der Suche nach einem geeigneten Plugin bin ich fündig geworden.</p>



<h2 class="wp-block-heading">Bildmaterial von externen Quellen nutzen</h2>



<p class="wp-block-paragraph">Die wenigsten Webseitenbetreiber sind nebenbei noch Fotografen, möchten aber dennoch die eigenen Artikel ansprechend gestalten. Schnell stellt sich die Frage woher man das geeignete Bildmaterial nehmen kann, ohne sich auf die schiefe Bahn zu begeben. Ich selbst bediene mich, sofern ich Bildmaterial benötige, 2 Plattformen welche lizenzfreie Bilder anbieten:</p>



<ul class="is-style-checkbox wp-block-list"><li><a rel="noreferrer noopener" href="https://pixabay.com/" target="_blank">pixabay</a></li><li><a rel="noreferrer noopener" href="https://unsplash.com/" target="_blank">unsplash</a></li></ul>



<div class="wp-block-advgb-images-slider advgb-images-slider-block"><div class="advgb-images-slider" data-slick="{&quot;rtl&quot;: false}"><div class="advgb-image-slider-item"><img decoding="async" src="https://www.schiffler.eu/wp-content/uploads/2020/06/unsplash.jpg" class="advgb-image-slider-img" alt="Slider image" style="width:350px;height:auto"/><div class="advgb-image-slider-item-info" style="justify-content:center;align-items:center"><a class="advgb-image-slider-overlay" target="_blank" rel="noopener noreferrer" href="https://www.unsplash.com"></a></div></div><div class="advgb-image-slider-item"><img decoding="async" src="https://www.schiffler.eu/wp-content/uploads/2020/06/pixabay.jpg" class="advgb-image-slider-img" alt="Slider image" style="width:350px;height:auto"/><div class="advgb-image-slider-item-info" style="justify-content:center;align-items:center"><a class="advgb-image-slider-overlay" target="_blank" rel="noopener noreferrer" href="https://www.pixabay.com"></a></div></div></div></div>



<p class="wp-block-paragraph">Beide Plattformen stellen lizenzfreies Bildmaterial zur Verfügung. Die Datenbank kann bequem nach Keywords durchsucht und das entsprechende Bildmaterial heruntergeladen werden. Das verwendete Bildmaterial muss (oder sollte zumindest der Fairness halber) entsprechend gekennzeichnet werden. Ich selbst stelle diese Kennzeichnung als ein Bildverzeichnis dar in welchem jedes verwendete Bilder mit einem Link zum Urheber versehen wird. </p>



<h2 class="wp-block-heading">ImageSourceControl- Bildquellen und Urheberrechte verwalten</h2>



<p class="wp-block-paragraph">Das Plugin <a rel="noreferrer noopener" href="https://de.wordpress.org/plugins/image-source-control-isc/" target="_blank">Image Source Control</a> ist im <a rel="noreferrer noopener" href="https://de.wordpress.org/plugins" target="_blank">WordPress Plugin-Verzeichnis</a> zu finden. Die Verwendung des Plugins ist denkbar einfach. Einmal installiert prüft das Plugin (sofern es so konfiguriert wird) jedes in der Mediathek veröffentlichte Bild. Bei jedem Bild kann hinterlegt werden ob es ein eigenes oder ein Bild aus einer externen Quelle ist. Wird ein neues Bild hochgeladen erscheint auf jeder Seite ein Hinweis, dass ein Bild vorliegt, bei welchem noch keine Quelle definiert ist. </p>



<div class="wp-block-advgb-images-slider advgb-images-slider-block advgb-images-slider-lightbox"><div class="advgb-images-slider" data-slick="{&quot;rtl&quot;: false}"><div class="advgb-image-slider-item"><img decoding="async" src="https://www.schiffler.eu/wp-content/uploads/2020/06/bildquellenVerwalten.jpg" class="advgb-image-slider-img" alt="Slider image" style="width:350px;height:auto"/><div class="advgb-image-slider-item-info" style="justify-content:center;align-items:center"><a class="advgb-image-slider-overlay" target="_blank" rel="noopener noreferrer" href="#"></a></div></div><div class="advgb-image-slider-item"><img decoding="async" src="https://www.schiffler.eu/wp-content/uploads/2020/06/fehlendeBildquellen.jpg" class="advgb-image-slider-img" alt="Slider image" style="width:350px;height:auto"/><div class="advgb-image-slider-item-info" style="justify-content:center;align-items:center"><a class="advgb-image-slider-overlay" target="_blank" rel="noopener noreferrer" href="#"></a></div></div></div></div>



<p class="wp-block-paragraph">Natürlich verfügt das Plugin noch über diverse Konfigurationsmöglichkeiten, welche glücklicherweise alle Selbsterklärend sind (zumindest aus meiner Sicht). Die Konfiguration selbst ist im WordPress-Adminbereich unter Einstellungen &gt; Bildquellen zu finden. </p>



<h2 class="wp-block-heading">Quellverzeichnis als eigene Page anzeigen</h2>



<p class="wp-block-paragraph">Ich bin ein Freund davon transparent mit dem Thema der Bildrechte umzugehen. Ich freue mich darüber, dass es Menschen gibt, die sich bereiterklären Ihr Bildmaterial anderen zur Verfügung zu stellen. Ein Link zum Urheber ist da wohl das Mindeste. </p>



<p class="wp-block-paragraph">Aus diesem Grund verfügen all meine Seiten, bei welchen ich Bildmaterial aus externen Quellen verwende, über eine <a href="https://www.schiffler.eu/quellenangaben-zu-bilder-und-grafiken/">Quellverzeichnis</a>. Diese Seite lässt sich mit Hilfe des Plugins vollautomatisch erstellen und sorgt dafür, dass das Verzeichnis immer aktuell ist. </p>



<div class="wp-block-image"><figure class="aligncenter size-medium"><a href="https://www.schiffler.eu/wp-content/uploads/2020/06/quellverzeichnisFuerBildmaterial.jpg"><img loading="lazy" decoding="async" width="300" height="175" src="https://www.schiffler.eu/wp-content/uploads/2020/06/quellverzeichnisFuerBildmaterial-300x175.jpg" alt="Quellverzeichnis verwendeter Bilder - Image Source Control" class="wp-image-738" srcset="https://www.schiffler.eu/wp-content/uploads/2020/06/quellverzeichnisFuerBildmaterial-300x175.jpg 300w, https://www.schiffler.eu/wp-content/uploads/2020/06/quellverzeichnisFuerBildmaterial-1024x596.jpg 1024w, https://www.schiffler.eu/wp-content/uploads/2020/06/quellverzeichnisFuerBildmaterial-768x447.jpg 768w, https://www.schiffler.eu/wp-content/uploads/2020/06/quellverzeichnisFuerBildmaterial.jpg 1246w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><figcaption>Quellverzeichnis verwendeter Bilder &#8211; Image Source Control</figcaption></figure></div>



<p class="wp-block-paragraph">Um ein solches Quellverzeichnis zu erstellen muss lediglich eine neue Seite in WordPress angelegt werden. An der Stelle, an welcher das Verzeichnis erscheinen soll, ist ein kleiner Shortcode einzufügen:</p>



<pre class="wp-block-code"><code> &#91;isc_list_all per_page="25"]</code></pre>



<p class="wp-block-paragraph">Der Parameter &#8218;per_page=&#8220;25&#8243;&#8218; sorgt dafür dass je Seite 25 Images angezeigt werden. Natürlich kann dieser Paramrter frei definiert werden, ich selbst komme mit den 25 ganz gut aus.</p>
<p>Der Beitrag <a href="https://www.schiffler.eu/bildquellen-und-urheberrechte-in-wordpress-verwalten/">Bildquellen und Urheberrechte in WordPress verwalten</a> erschien zuerst auf <a href="https://www.schiffler.eu">Das ist die Welt von Thomas</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.schiffler.eu/bildquellen-und-urheberrechte-in-wordpress-verwalten/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>WordPress Plugins fehlerhaft nach Update auf 5.5</title>
		<link>https://www.schiffler.eu/wordpress-5-5-plugins-fehlerhaft-jquery-migrate/</link>
					<comments>https://www.schiffler.eu/wordpress-5-5-plugins-fehlerhaft-jquery-migrate/#respond</comments>
		
		<dc:creator><![CDATA[Thomas Schiffler]]></dc:creator>
		<pubDate>Fri, 14 Aug 2020 05:13:55 +0000</pubDate>
				<category><![CDATA[IT-Know How]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[quickfix]]></category>
		<category><![CDATA[update]]></category>
		<category><![CDATA[Wordpress]]></category>
		<guid isPermaLink="false">https://www.schiffler.eu/?p=1030</guid>

					<description><![CDATA[<p>Leider bemerkte ich, dass seit dem WordPress 5.5 update Plugins fehlerhaft sind. Aufgefallen ist mir dies erst als ich einen &#8230; <a href="https://www.schiffler.eu/wordpress-5-5-plugins-fehlerhaft-jquery-migrate/" class="more-link">More <span class="screen-reader-text">WordPress Plugins fehlerhaft nach Update auf 5.5</span> <span class="meta-nav">&#8594;</span></a></p>
<p>Der Beitrag <a href="https://www.schiffler.eu/wordpress-5-5-plugins-fehlerhaft-jquery-migrate/">WordPress Plugins fehlerhaft nach Update auf 5.5</a> erschien zuerst auf <a href="https://www.schiffler.eu">Das ist die Welt von Thomas</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Leider bemerkte ich, dass seit dem WordPress 5.5 update Plugins fehlerhaft sind. Aufgefallen ist mir dies erst als ich einen neuen Post vorbereiten wollte und einige Plugins (wie z.B. das <a href="https://wordpress.org/plugins/wordpress-seo/" target="_blank" rel="noreferrer noopener">Yoast SEO Plugin</a>) nicht korrekt geladen wurden. </p>



<figure class="wp-block-image size-large"><a href="https://www.schiffler.eu/wp-content/uploads/2020/08/wpupdate_55_jmigrate_1.png"><img loading="lazy" decoding="async" width="649" height="183" src="https://www.schiffler.eu/wp-content/uploads/2020/08/wpupdate_55_jmigrate_1.png" alt="Wordpress 5.5 update Plugins fehlerhaft" class="wp-image-1033" srcset="https://www.schiffler.eu/wp-content/uploads/2020/08/wpupdate_55_jmigrate_1.png 649w, https://www.schiffler.eu/wp-content/uploads/2020/08/wpupdate_55_jmigrate_1-300x85.png 300w" sizes="auto, (max-width: 649px) 100vw, 649px" /></a><figcaption>Screenshot des Fehlers nach dem Update</figcaption></figure>



<p class="wp-block-paragraph">Zwar wurde die Seite vollständig geladen, diverse Plugins waren jedoch ohne Funktion. Hierbei wurde das Plugin zwar geladen aber diese waren inaktiv. </p>



<p class="wp-block-paragraph">Dank der JavaScript Console konnte die Ursache schnell gefunden werden &#8211; offensichtlich wurde mit dem Update auf WordPress 5.5 auch ein Update in den JQuery-Libraries durchgeführt. Hierdurch kommt es zu einem Fehler bei der jquery migrate Funktion welche von diversen Plugins (unter anderem auch dem Yoast SEO) genutzt wird. Die Console ist voll von Fehlern. </p>



<h2 class="wp-block-heading">WordPress 5.5 update Plugins fehlerhaft &#8211; einfache Problemlösung</h2>



<p class="wp-block-paragraph">Nachdem ich mich ein wenig mit Google in diversen Foren und dem Supportbereich von WordPress herumgeschlagen habe wurde schnell klar, dass dies natürlich kein Einzelfall ist. Glücklicherweise wurde seitens WordPress bereits ein Plugin bereitgestellt welchen diesen Fehler behebt. Weitere Informationen dazu sind <a href="https://core.trac.wordpress.org/ticket/50983" target="_blank" rel="noreferrer noopener">direkt im Supportbereich zu finden</a>.</p>



<h2 class="wp-block-heading">Die Lösung: Enable jQuery Migrate Helper</h2>



<p class="wp-block-paragraph">Die Lösung des Problemes ist ebenfalls im Plugin-Verzeichnis von WordPress zu finden. Das Plugin &#8222;<a href="https://wordpress.org/plugins/enable-jquery-migrate-helper/" target="_blank" rel="noreferrer noopener">Enable jQuery Migrate Helper</a>&#8220; löst das Problem mit einem Workaround. Dieser Workaround soll den Entwicklern der Plugins mehr Zeit verschaffen so dass diese Ihre eigenen Plugins an die neuen Anforderungen anpassen können. </p>



<p class="wp-block-paragraph">Das Plugin ist recht schnell installiert. In die Pluginverwaltung gehen und dort das Plugin &#8222;Enable jQuery Migrate Helper&#8220; suchen. Danach einfach per Buttonclick installieren und aktivieren. Schon ist der Fehler behoben und die Plugins sind wieder lauffähig.</p>



<figure class="wp-block-gallery columns-3 is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex"><ul class="blocks-gallery-grid"><li class="blocks-gallery-item"><figure><img loading="lazy" decoding="async" width="649" height="183" src="https://www.schiffler.eu/wp-content/uploads/2020/08/wpupdate_55_jmigrate_1.png" alt="Wordpress 5.5 update Plugins fehlerhaft" data-id="1033" data-full-url="https://www.schiffler.eu/wp-content/uploads/2020/08/wpupdate_55_jmigrate_1.png" data-link="https://www.schiffler.eu/?attachment_id=1033" class="wp-image-1033" srcset="https://www.schiffler.eu/wp-content/uploads/2020/08/wpupdate_55_jmigrate_1.png 649w, https://www.schiffler.eu/wp-content/uploads/2020/08/wpupdate_55_jmigrate_1-300x85.png 300w" sizes="auto, (max-width: 649px) 100vw, 649px" /><figcaption class="blocks-gallery-item__caption">der Fehler</figcaption></figure></li><li class="blocks-gallery-item"><figure><img loading="lazy" decoding="async" width="1024" height="249" src="https://www.schiffler.eu/wp-content/uploads/2020/08/wpupdate_55_jmigrate_2-1024x249.png" alt="Wordpress 5.5 update Plugins fehlerhaft" data-id="1032" data-full-url="https://www.schiffler.eu/wp-content/uploads/2020/08/wpupdate_55_jmigrate_2.png" data-link="https://www.schiffler.eu/?attachment_id=1032" class="wp-image-1032" srcset="https://www.schiffler.eu/wp-content/uploads/2020/08/wpupdate_55_jmigrate_2-1024x249.png 1024w, https://www.schiffler.eu/wp-content/uploads/2020/08/wpupdate_55_jmigrate_2-300x73.png 300w, https://www.schiffler.eu/wp-content/uploads/2020/08/wpupdate_55_jmigrate_2-768x187.png 768w, https://www.schiffler.eu/wp-content/uploads/2020/08/wpupdate_55_jmigrate_2-1536x374.png 1536w, https://www.schiffler.eu/wp-content/uploads/2020/08/wpupdate_55_jmigrate_2.png 1600w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="blocks-gallery-item__caption">Plugin installieren</figcaption></figure></li><li class="blocks-gallery-item"><figure><img loading="lazy" decoding="async" width="662" height="355" src="https://www.schiffler.eu/wp-content/uploads/2020/08/wpupdate_55_jmigrate_3.png" alt="Wordpress 5.5 update Plugins fehlerhaft" data-id="1031" data-full-url="https://www.schiffler.eu/wp-content/uploads/2020/08/wpupdate_55_jmigrate_3.png" data-link="https://www.schiffler.eu/?attachment_id=1031" class="wp-image-1031" srcset="https://www.schiffler.eu/wp-content/uploads/2020/08/wpupdate_55_jmigrate_3.png 662w, https://www.schiffler.eu/wp-content/uploads/2020/08/wpupdate_55_jmigrate_3-300x161.png 300w" sizes="auto, (max-width: 662px) 100vw, 662px" /><figcaption class="blocks-gallery-item__caption">Fehler behoben</figcaption></figure></li></ul></figure>



<h2 class="wp-block-heading">Quickfix deinstallieren wenn Plugins nachgezogen</h2>



<p class="wp-block-paragraph">Das hier genannte Vorgehen ist lediglich als Quickfix zu betrachten. Das Plugin sollte nur so lange installiert sein bis die Pluginhersteller selbst nachgezogen und ein Update bereitgestellt haben. Selbiger Hinweis ist ab der Installation des Plugins auch im Adminbereich von WordPress zu finden:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>jQuery Migrate Helper<br>Right now you are using the Enable jQuery Migrate Helper plugin to enable support for old JavaScript code that uses deprecated functions in the jQuery JavaScript library. You will see warnings about these functions while using WordPress administration, but they will not be shown on the front-end of your site. To check if there are any warnings generated by your theme please look in the browser console.<br><br>If you get warnings, you should check the theme or plugin that generated them for an update. There will very likely be one you can install. When you have updated your plugins and themes, and there are no more warnings, please deactivate Enable jQuery Migrate Helper.<br>* A script, a file, or some other piece of code is deprecated when its developers are in the process of replacing it with more modern code or removing it entirely.</p><cite>Quelle: Adminbereich von WordPress nach Installation des Plugins</cite></blockquote>



<p class="wp-block-paragraph">Achtet also bitte selbst darauf die Updates eurer Plugins und Themes zu installieren sofern diese zur Verfügung stehen.</p>
<p>Der Beitrag <a href="https://www.schiffler.eu/wordpress-5-5-plugins-fehlerhaft-jquery-migrate/">WordPress Plugins fehlerhaft nach Update auf 5.5</a> erschien zuerst auf <a href="https://www.schiffler.eu">Das ist die Welt von Thomas</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.schiffler.eu/wordpress-5-5-plugins-fehlerhaft-jquery-migrate/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Urlaub effektiv genutzt &#8211; neue Webseite</title>
		<link>https://www.schiffler.eu/lovelywords-freie-traurednerin-mainz-rheinhessen/</link>
					<comments>https://www.schiffler.eu/lovelywords-freie-traurednerin-mainz-rheinhessen/#respond</comments>
		
		<dc:creator><![CDATA[Thomas Schiffler]]></dc:creator>
		<pubDate>Fri, 24 Jul 2020 04:05:00 +0000</pubDate>
				<category><![CDATA[eigene Projekte]]></category>
		<category><![CDATA[Urlaub]]></category>
		<category><![CDATA[Webdesign – aber nicht so, wie du denkst]]></category>
		<category><![CDATA[Website]]></category>
		<category><![CDATA[Wordpress]]></category>
		<guid isPermaLink="false">https://www.schiffler.eu/?p=935</guid>

					<description><![CDATA[<p>Meine Frau Sarah hat den, für Sie, schönsten Nebenjob der Welt denn Sie darf Menschen bei dem Weg in Ihre &#8230; <a href="https://www.schiffler.eu/lovelywords-freie-traurednerin-mainz-rheinhessen/" class="more-link">More <span class="screen-reader-text">Urlaub effektiv genutzt &#8211; neue Webseite</span> <span class="meta-nav">&#8594;</span></a></p>
<p>Der Beitrag <a href="https://www.schiffler.eu/lovelywords-freie-traurednerin-mainz-rheinhessen/">Urlaub effektiv genutzt &#8211; neue Webseite</a> erschien zuerst auf <a href="https://www.schiffler.eu">Das ist die Welt von Thomas</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Meine Frau Sarah hat den, für Sie, schönsten Nebenjob der Welt denn Sie darf Menschen bei dem Weg in Ihre Ehe begleiten. Hierbei ist Sie als freie Traurednerin in Mainz und Umgebung unterwegs. Die Arbeit als freier Trauredner passt wunderbar zu meiner Frau, macht Ihr sehr viel Spaß und bietet Ihr den perfekten Ausgleich zum &#8222;tristen&#8220; Büroalltag. </p>



<p class="wp-block-paragraph">Umso wichtiger war es das Ihre Internetseite endlich auf den neuesten Stand gebracht wurde. In meinem Urlaub hatte ich hierfür uneingeschränkte Zeit und das Ergebnis kann sich, aus unserer Sicht, durchaus sehen lassen.</p>



<figure class="wp-block-image size-large is-style-rounded"><a href="https://www.lovelywords.eu/" target="_blank" rel="LovelyWords Traureden Mainz Wiesbaden Rheinhessen noopener noreferrer"><img loading="lazy" decoding="async" width="1024" height="564" src="https://www.schiffler.eu/wp-content/uploads/2020/07/screenshotLovelyWords2-1024x564.png" alt="Freie Traurednerin Mainz" class="wp-image-938" title="Freie Traurednerin Mainz" srcset="https://www.schiffler.eu/wp-content/uploads/2020/07/screenshotLovelyWords2-1024x564.png 1024w, https://www.schiffler.eu/wp-content/uploads/2020/07/screenshotLovelyWords2-300x165.png 300w, https://www.schiffler.eu/wp-content/uploads/2020/07/screenshotLovelyWords2-768x423.png 768w, https://www.schiffler.eu/wp-content/uploads/2020/07/screenshotLovelyWords2.png 1282w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure>



<p class="wp-block-paragraph">Die neue Webseite wurde, natürlich, mit <a aria-label="undefined (opens in a new tab)" href="https://www.schiffler.eu/thema/wordpress/" target="_blank" rel="noreferrer noopener">WordPress</a> umgesetzt und ist unter <a aria-label="undefined (opens in a new tab)" href="https://www.lovelywords.eu/" target="_blank" rel="noreferrer noopener">LovelyWords.eu</a> erreichbar. </p>



<p class="wp-block-paragraph">Bei der Erstellung der Seite wurde Wert auf die Suchmaschinenoptimierung gelegt. Suchbegriffe wie <strong>Freie Trauung Mainz</strong> oder auch <strong>Freie Traurednerin Mainz</strong> standen hierbei im Focus. Ich bin gespannt wie lange es dauert bis die Seite bei den einzelnen Suchmaschinen indiziert ist und ob die Anstrengungen Ihren Zweck erfüllen. </p>
<p>Der Beitrag <a href="https://www.schiffler.eu/lovelywords-freie-traurednerin-mainz-rheinhessen/">Urlaub effektiv genutzt &#8211; neue Webseite</a> erschien zuerst auf <a href="https://www.schiffler.eu">Das ist die Welt von Thomas</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.schiffler.eu/lovelywords-freie-traurednerin-mainz-rheinhessen/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>dynamische Sidebars in WordPress &#8211; Content Aware Sidebars</title>
		<link>https://www.schiffler.eu/dynamische-sidebars-in-wordpress-content-aware-sidebars/</link>
					<comments>https://www.schiffler.eu/dynamische-sidebars-in-wordpress-content-aware-sidebars/#respond</comments>
		
		<dc:creator><![CDATA[Thomas Schiffler]]></dc:creator>
		<pubDate>Mon, 06 Jul 2020 06:26:00 +0000</pubDate>
				<category><![CDATA[IT-Know How]]></category>
		<category><![CDATA[Know How]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[Sidebar]]></category>
		<category><![CDATA[Widget]]></category>
		<category><![CDATA[Wordpress]]></category>
		<guid isPermaLink="false">https://www.schiffler.eu/?p=544</guid>

					<description><![CDATA[<p>Ein Freund von mir baut sich gerade seinen ersten WordPress Blog auf. Dieser kam mit einer Frage auf mich zu &#8230; <a href="https://www.schiffler.eu/dynamische-sidebars-in-wordpress-content-aware-sidebars/" class="more-link">More <span class="screen-reader-text">dynamische Sidebars in WordPress &#8211; Content Aware Sidebars</span> <span class="meta-nav">&#8594;</span></a></p>
<p>Der Beitrag <a href="https://www.schiffler.eu/dynamische-sidebars-in-wordpress-content-aware-sidebars/">dynamische Sidebars in WordPress &#8211; Content Aware Sidebars</a> erschien zuerst auf <a href="https://www.schiffler.eu">Das ist die Welt von Thomas</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Ein Freund von mir baut sich gerade seinen ersten WordPress Blog auf. Dieser kam mit einer Frage auf mich zu bei welcher ich erst einmal den Sinn verstehen musste denn er fragte mich nach dynamischen Sidebars in WordPress:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>Kann ich eigentlich bei WordPress auch Widgets oder ganze Sidebars je nach Inhalt des Beitrages anpassen oder ersetzen?</p></blockquote>



<p class="wp-block-paragraph">Warum? Das war mein erster Gedanke. Nach einigen Gesprächen ist die Idee aber doch ganz sinnvoll und wird inzwischen auch hier in diesem Blog eingesetzt. </p>



<h2 class="wp-block-heading">dynamische Sidebars &#8211; warum ist das Sinnvoll?</h2>



<p class="wp-block-paragraph">Statische Sidebards neben Blogeinträgen ergeben durchaus Ihren Sinn. Die Platzierung einer Suchfunktion, Übersicht der Kategorien oder Tagcloud sorgt dafür, dass der Besucher entspannt navigieren kann. Was ist aber nun, wenn wir innerhalb dieser Sidebar themenbezogene Inhalte, sagen wir z.B. mal einen aktuellen Aktienkurs des Unternehmens über welches hier gerade geschrieben wird, positionieren möchten?</p>



<p class="wp-block-paragraph">In diesem Fall ergeben dynamische Sidebars durchaus Sinn. Nach ein wenig Recherche und der Prüfung einiger Plugins bin ich auf das Plugin &#8218;<a rel="noreferrer noopener" href="https://de.wordpress.org/plugins/content-aware-sidebars/" target="_blank">Content Aware Sidebars</a>&#8218;. Dieses Plugin liefert so einiges an intelligenten Funktionen mit deren Hilfe auf Basis des Inhaltes Sidebars ausgetauscht oder (in der Premium-Variante) nur ergänzt werden können. </p>



<div class="wp-block-image is-style-rounded"><figure class="aligncenter size-medium"><a href="https://de.wordpress.org/plugins/content-aware-sidebars/" target="_blank" rel="noopener noreferrer"><img loading="lazy" decoding="async" width="300" height="167" src="https://www.schiffler.eu/wp-content/uploads/2020/05/202005_contextAwareSidebar_1-300x167.jpg" alt="" class="wp-image-592" srcset="https://www.schiffler.eu/wp-content/uploads/2020/05/202005_contextAwareSidebar_1-300x167.jpg 300w, https://www.schiffler.eu/wp-content/uploads/2020/05/202005_contextAwareSidebar_1-768x427.jpg 768w, https://www.schiffler.eu/wp-content/uploads/2020/05/202005_contextAwareSidebar_1.jpg 985w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><figcaption>&#8218;Context Aware Sidebars&#8216; aus dem WordPress Plugin Verzeichnis</figcaption></figure></div>



<h2 class="wp-block-heading">Wie ist das Plugin aufgebaut?</h2>



<p class="wp-block-paragraph">Das Plugin gibt es in einer kostenlosen und einer Premium-Variante. Ich selbst setze aktuell noch die kostenlose Variante ein da diese für meine Bedürfnisse ausreichend Funktionen liefert. Zugegeben, ich muss hier und da einen Umweg gehen da ich keine Sidebars ergänzen, sondern nur vollständig ersetzen kann, dennoch können meine Anforderungen erfüllt werden. </p>



<div class="wp-block-image is-style-rounded"><figure class="aligncenter size-medium"><a href="https://www.schiffler.eu/wp-content/uploads/2020/05/202005_contextAwareSidebar_2.jpg"><img loading="lazy" decoding="async" width="300" height="168" src="https://www.schiffler.eu/wp-content/uploads/2020/05/202005_contextAwareSidebar_2-300x168.jpg" alt="dynamische Sidebars - Sidebarverwaltung" class="wp-image-599" srcset="https://www.schiffler.eu/wp-content/uploads/2020/05/202005_contextAwareSidebar_2-300x168.jpg 300w, https://www.schiffler.eu/wp-content/uploads/2020/05/202005_contextAwareSidebar_2.jpg 560w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a></figure></div>



<p class="wp-block-paragraph">Das Plugin selbst arbeitet mehr oder weniger selbsterklärend. Im ersten Schritt findet sich in der Hauptnavigation ein neuer Bereich mit dem Titel &#8222;Context Aware&#8220; wieder. Hierüber lassen sich die neuen Sidebars anlegen und konfigurieren. In meinem Fall (siehe Screenshot) habe ich hier 2 Sidebars hinzugefügt, eine mit dem Titel Werbebeiträge und eine für Beiträge ohne Werbung. </p>



<p class="wp-block-paragraph">Für jede dieser Sidebars wurde im Bereich &#8222;Widgets&#8220; eine neue Sidebar angelegt. Über diesen Bereich kann ich nun, wie gewohnt, der entsprechenden Sidebar die von mir gewünschten Widgets hinzufügen und diese somit so individuell gestalten wie ich möchte. </p>



<div class="wp-block-image is-style-rounded"><figure class="aligncenter size-medium"><img loading="lazy" decoding="async" width="300" height="116" src="https://www.schiffler.eu/wp-content/uploads/2020/05/202005_contextAwareSidebar_5-300x116.jpg" alt="dynamische Sidebars - Widgetverwaltung" class="wp-image-596" srcset="https://www.schiffler.eu/wp-content/uploads/2020/05/202005_contextAwareSidebar_5-300x116.jpg 300w, https://www.schiffler.eu/wp-content/uploads/2020/05/202005_contextAwareSidebar_5-768x297.jpg 768w, https://www.schiffler.eu/wp-content/uploads/2020/05/202005_contextAwareSidebar_5.jpg 978w" sizes="auto, (max-width: 300px) 100vw, 300px" /></figure></div>



<p class="wp-block-paragraph">Um die Sidebars nun dynamisch nutzen zu können müssen im Bereich der Sidebarverwaltung (Menüpunkt &#8218;Context Aware&#8216;) Kriterien angelegt werden und welchen Umständen die Sidebar anzuzeigen ist. Hier stehen eine Vielzahl von Optionen zur Verfügung welche ausgewählt werden können. In meinem Beispiel (siehe folgende Screenshots) zeige ich die Sidebar &#8222;Werbebeiträge&#8220; immer dann an, wenn der entsprechende Artikel das Schlagwort &#8222;werbung&#8220; enthält. </p>



<div class="wp-block-advgb-images-slider advgb-images-slider-block advgb-images-slider-lightbox"><div class="advgb-images-slider" data-slick="{&quot;rtl&quot;: false}"><div class="advgb-image-slider-item"><img decoding="async" src="https://www.schiffler.eu/wp-content/uploads/2020/05/202005_contextAwareSidebar_4.jpg" class="advgb-image-slider-img" alt="Slider image" style="width:350px;height:auto"/><div class="advgb-image-slider-item-info" style="justify-content:center;align-items:center"><a class="advgb-image-slider-overlay" target="_blank" rel="noopener noreferrer" href="#"></a></div></div><div class="advgb-image-slider-item"><img decoding="async" src="https://www.schiffler.eu/wp-content/uploads/2020/05/202005_contextAwareSidebar_3.jpg" class="advgb-image-slider-img" alt="Slider image" style="width:350px;height:auto"/><div class="advgb-image-slider-item-info" style="justify-content:center;align-items:center"><a class="advgb-image-slider-overlay" target="_blank" rel="noopener noreferrer" href="#"></a></div></div><div class="advgb-image-slider-item"><img decoding="async" src="https://www.schiffler.eu/wp-content/uploads/2020/05/202005_contextAwareSidebar_2.jpg" class="advgb-image-slider-img" alt="Slider image" style="width:350px;height:auto"/><div class="advgb-image-slider-item-info" style="justify-content:center;align-items:center"><a class="advgb-image-slider-overlay" target="_blank" rel="noopener noreferrer" href="#"></a></div></div></div></div>



<p class="wp-block-paragraph">Die Konfigurationsmöglichkeiten sind sehr mächtig. So können neben einfachen Stichworten oder Kategorien sogar unterschiedliche Zeiträume angegeben werden in welchen eine Sidebar zu sehen sein soll (oder eben nicht). Aus meiner Sicht sind hier wirklich coole Features versteckt. </p>



<h2 class="wp-block-heading">Wo setze ich dynamische Sidebars ein?</h2>



<p class="wp-block-paragraph">Ich hasse Blogbeiträge, welche nur den Sinn und Zweck von Werbung haben. Dennoch möchte ich hin und wieder einfach einmal über gute Erfahrungen berichten dürfen ohne mir gleich Gedanken darüber zu machen wie ich das ganze Kennzeichnen muss. Aus diesem Grund habe ich mir eine Sidebar gebaut, welche bei Beiträgen erscheint, welche tendenziell Werbung enthalten. Hierzu füge ich den Beiträgen den Tag &#8222;Werbung&#8220; hinzu und schon erscheint eine abgewandelte Sidebar mit dem entsprechenden Hinweis. </p>



<div class="wp-block-image is-style-rounded"><figure class="aligncenter size-medium"><img loading="lazy" decoding="async" width="280" height="300" src="https://www.schiffler.eu/wp-content/uploads/2020/05/202005_contextAwareSidebar_6-280x300.jpg" alt="dynamische Sidebars - Beispiel-Sidebar" class="wp-image-600" srcset="https://www.schiffler.eu/wp-content/uploads/2020/05/202005_contextAwareSidebar_6-280x300.jpg 280w, https://www.schiffler.eu/wp-content/uploads/2020/05/202005_contextAwareSidebar_6.jpg 516w" sizes="auto, (max-width: 280px) 100vw, 280px" /><figcaption>Beispiel der Sidebar für Artikel mit &#8222;Werbung&#8220;</figcaption></figure></div>



<p class="wp-block-paragraph">Ich selbst empfinde diese Lösung als sehr einfach und bin froh, das Plugin gefunden zu haben. Mal sehen, vielleicht finde ich ja noch weitere Einsatzgebiete <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>Der Beitrag <a href="https://www.schiffler.eu/dynamische-sidebars-in-wordpress-content-aware-sidebars/">dynamische Sidebars in WordPress &#8211; Content Aware Sidebars</a> erschien zuerst auf <a href="https://www.schiffler.eu">Das ist die Welt von Thomas</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.schiffler.eu/dynamische-sidebars-in-wordpress-content-aware-sidebars/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>

<!--
Performance optimized by W3 Total Cache. Learn more: https://www.boldgrid.com/w3-total-cache/?utm_source=w3tc&utm_medium=footer_comment&utm_campaign=free_plugin

Object Caching 44/48 objects using APC
Page Caching using Disk: Enhanced 
Lazy Loading (feed)
Minified using APC
Database Caching 17/27 queries in 0.002 seconds using APC

Served from: www.schiffler.eu @ 2026-10-22 20:19:19 by W3 Total Cache
-->