 Okay, dann fangen wir an. Ja, dann zuerst mal herzlich willkommen zu meinem Vortrag oder zu meiner Session, wie man letztendlich WordPress-Installationen mithilfe von Composer aufsetzen kann. Zuerst mal ganz kurz was über mich. Ich habe vor langer, langer Zeit in Saarbrücken mal Informatik studiert. Das heißt, ich bin von Hause aus Informatiker im Internet unterwegs seit dem Jahr 2000 bei meinem aktuellen Arbeitgeber. Bei Marketing Factory bin ich jetzt seit fast zehn Jahren, bin dort vor allen Dingen im Bereich Typ 3 Programmierung, weil wir eben eine Agentur sind, die hauptsächlich eben Typ 3-Projekte macht. Nebenbei betreiben wir auch eigene WordPress-Blocks und da bin ich letztendlich also für den Bereich Typ 3 und eben auch WordPress letztendlich zuständig, nebenbei noch ein bisschen für die Datenanalyse und Technische SEO, wobei ich das auch auf Kollegen verteilt habe. Grundsätzlich, hier einmal kurz den Fahrplan, was ich mit euch durchgehen wollte. Nämlich einmal, warum wir das Ganze gemacht haben, also was unsere Motivation war. Wie wir eben bei dieser, bei Compoter JSON, wie wir da vorgegangen sind, wenn wir eben einen Scheidthemen hinzufügen wollen, wie wir das eben machen, wie das Ganze mit den Sprachen aussieht und so noch als kleinen Bonus, wenn ich letztendlich nicht in meiner Versionierung eben die Credentials mit drin haben will, wie man dann eben dann mit den Umgebungsvariablen arbeiten kann. Okay, kommen wir zu der Motivation. Ich meine, das ist jetzt schon ein bisschen ein bisschen entstanden. Ich habe letztes Jahr, also hier war, habe ich überlegt, okay, das war auch letztendlich eine Cours-Session gewesen mit Daniel und dem, wie heißt der Oberländer aus? Ja, Konstantin, sorry, ja, ich bin gerade auf den Namen nicht mehr gekommen. Es ging halt letztendlich darum, dass WordPress-Updates zum Teil oder Security-Updates relativ überraschend kommen und dann stehst du halt letztendlich da, wenn du jetzt eine deutsche WordPress-Seite hast, dann musst du warten, bis das Sprachpaket da ist und bei jedem Update kommen eben auch unerwünschte Films mit dazu, es kommen Plugins, wie Hello Dolly mit dazu und die jedes Mal wieder aus der Versionierung rauszuwerfen, das macht keinen Spaß. Das willst du einfach nicht, du willst eigentlich im Idealfall einen Prozess haben, den du soweit wie möglich automatisieren kannst. Du weißt, okay, oder es ist ein neues Update rausgekommen. Ich will auf den Knopf drücken, das System macht das entsprechend und ich habe keine unerwünschten Nebeneffekte, was jetzt die Installation betrifft, was zusätzlich installiert wird. Okay, da wir das eben aus dem Typ 3-Bereich schon relativ lange machen, haben wir uns letztendlich überlegt, okay, können wir das Ganze nicht irgendwie mit Komposer machen. Es gibt einen Ansatz von Betrok. Die haben sich eben Gedanken darüber gemacht, wie man das eben, wie man da eine Projektstruktur eben aufsetzen kann. Die Einleitung ist sehr, sehr gut, es empfehlenswert. Wir haben uns nicht 100% dran gehalten, haben ein bisschen was dran abgeändert. Zeige ich auch gleich noch. Wie gesagt, links habe ich euch mit in die Folie mit reingepackt. Lesen Sie Wert, das ist auf jeden Fall. Grundsätzlich ist es so, dass ihr letztendlich in der Komposer Datei den Ablageort, eures Plug-in Ordners festlegt, den Ablageort, der eigentlichen WordPress-Installation und zusätzlich habt ihr eben die Möglichkeit, den Ablageort von den Standard-Themes und gegebenenfalls auch ins Chide-Themes zu hinterlegen. Grundsätzlich, was Komposer betrifft, arbeitet WordPress nicht mit dem allgemein verfügbaren Packages, sondern hat sein eigenes WP-Packages.org, in dem eben diese Packages auch gepflegt werden. Das heißt, in unserer Komposer Datei geben wir das letztendlich als Repository zusätzlich mit an und haben da eben dann die Möglichkeit, nachher die Plug-ins entsprechend zu ziehen. Für den Core gibt es auf GitHub ein relativ gutes Paket von John P. Bloch, der eben jedes Mal, wenn eine neue WordPress-Version rauskommt, das Ganze so automatisiert hat, dass er eben dann auch das entsprechend als Paket zur Verfügung stellt. Wünschenswert wäre es natürlich, dass der Core, der WordPress Core irgendwann mal so weit hin kommt, dass er wirklich komplett Pakete hat und dass du eben die Möglichkeit hast, direkt das Ganze vom Core zu ziehen und man nicht eben diesen Umweg über fremde Repositories zu machen. Zusätzlich zu den Sachen, die wir jetzt hier haben, müssen noch vier einzelnen Dateien angelegt werden. Die habe ich euch jeweils auch schon in der Starter Repository mit reingelegt. Das ist einmal die Config-Application, zeige ich euch gleich. Eine HTX-Datei, wenn ihr irgendeine Speaking-URL haben wollt. Und die normale Index-PAP bzw. WP-Config. Für die Übersetzungen, sofern ihr nicht die englische, die normale englischen Core verwendet, gibt es letztendlich die Möglichkeit, einen Repository zu nutzen, dass eben die Core-Übersetzungen und von den Themes, bei denen das Ganze gepflegt ist. Was es dort nicht gibt, komme ich auch gleich nachher noch zu, sind Übersetzungen von einzelnen Plugins, weil einfach die Anzahl der Plugins zu groß ist und der Entwickler gesagt hat, okay, für jede einzelne Sprache und für jedes Plugin da jetzt das Repository zur Verfügung zu stellen, das ist zu viel, zu groß, das mache ich einfach nicht. Und für Plugins gibt es halt, wie gesagt, über W-Packages, gibt es eben die Möglichkeit, die Plugins entsprechend zu ziehen. Wenn ich ein Shift-Theme verwende, dann liegt das jetzt bei uns nachher im Verzeichnis Themes und dann eben im Shift-Theme Name. Dem Shift-Theme gebe ich dann eine eigene Composer-Jayson. Der Ablageort wird entsprechend in unserer Composer-Jayson, bzw. das Shift-Theme wird entsprechend in der Haupt-Composer-Jayson von unserem Projekt hinterlegt. Das heißt also den Namen, den ich habe mit der entsprechenden Version. Ich habe im Shift-Theme dann eben auch mein Perron-Theme angeben, das heißt also als Abhängigkeit dort definieren. Als Beispiel, wenn ich jetzt ein Shift-Theme für 2014 habe, dann wird letztendlich als Abhängigkeit in meinem Shift-Theme definiert, okay, ich benötige 2014. Und, wenn ich jetzt zum Beispiel auch die deutsche Übersetzung, oder als deutsche Webseite das ganze betreibe, dann werde ich auch dort als Abhängigkeit 2014 DE entsprechend noch definieren. Dadurch habe ich es sichergestellt, also ich könnte natürlich auch hingehen und könnte das entsprechende Theme in der Projekt-Composer-Jayson hinterlegen. Aber wenn ich jetzt zwischen einzelnen Themes wechseln würde oder mein Theme eben rauswerfe, dann wäre eben die Abhängigkeit, wenn ich das in meiner Projekt-Composer-Jayson gemacht hätte, zum Haupt-Theme weiterhin da. Und das will natürlich das ganze so modular wie möglich machen, wo du es auch wirklich benötigst. Zusätzlich habe ich natürlich in meinem Shift-Theme dann noch die Möglichkeit, eben meine CSS und GS-Dateien entsprechend mit Webpack oder was so etwas zu bauen. Ja, zu den Sprachen habe ich gerade eben schon gesagt, es gibt eben für die Sprachrepositories, sind halt einige Sachen direkt schon über WP-Languages, über Github-IO, also im Repository verfügbar. Und dort gibt es eben die Language bzw. Theme-Language, bei dem Plugins gibt das Ganze nicht. Das heißt, den Workaround, den ich dort wählen kann, wäre eben die eine Möglichkeit, mich dann ins Backend von WordPress entsprechend einzulogen und selber auf den Knopf zu drücken. Will ich nicht wirklich, die andere Möglichkeit wäre eben, dass ich mit WP-Clee arbeite. Und dort gibt es eben einen Befehl, indem ich eben für alle Plugins das Language-Update mache. Man könnte natürlich, also WP-Clee würde mir auch die Möglichkeit liefern, dass ich das Language-Update für das Theme und für den Core entsprechend so mache, aber dadurch, dass ich diese Sachen eben schon über Composer erledigen kann, bin ich jetzt nicht da in dem Moment darauf eingegangen. Aber wenn ich natürlich das Update mache, könnte ich natürlich ein Composer-Post-Hook entsprechend dann das Update auch über Composer laufen lassen. Ja, kommen wir zu den Umgebungsvariablen. Ich habe jetzt in unserem Repository eine .enf-Example-Datei abgelegt und über einen Post-Update-Command für Composer wird eben diese .enf-Example-Datei in eine .enf-Datei, also Environment-Datei, wird dann entsprechend erzeugt. Und dort habe ich die Möglichkeit, eben meine Datenbank Credentials zu hinterlegen und die ist halt nicht wirklich in der Versionierung mit drin. Das heißt, so dort definiere ich dann, die heißt mein Environment überhaupt. Also wenn ich irgendwelche Abhängigkeiten habe, ich kann dort eben ganz normal definieren, welche Datenbank Credentials ich habe und ja, all das, was ich letztendlich brauche, was auf den System eben unterschiedlich sein könnte. Gucken wir auch gleich rein. Ja, um das Ganze entsprechend auslesen zu können, gibt es drei Pakete, die wir da für entsprechend benötigen. So, ja, so weit sind wir noch nicht ganz. Ich gehe einmal kurz hier raus. So, das war eben schön groß gewesen. Jetzt fangen wir grundsätzlich an. Also, groß genug. Also, wir haben einmal, das, was ich gerade eben gesagt habe, wir haben in der Composer Jason, haben wir die Möglichkeit, eben einmal zu definieren, wo unsere Themes liegen. Das heißt also, ich habe jetzt hier festgelegt, okay, das war die falsche Stelle, bei den Repositories definiere ich, wo er sich die entsprechenden Pakete ziehen kann. Mein lokaler Ordner, die brauche ich nachher für die Themes, dass ich, wenn ich nämlich ein Schalt them angelegt habe und da entsprechend den Namen hinterlegt habe, dass er eben weiß, okay, das ist jetzt kein Theme, was ich mir von GitHub oder von Packages oder sonst irgendwo herziehen soll. Da kann ich eben einen lokalen Fahrt entsprechend definieren. Die anderen beiden Sachen sind eben zwei Composer Repositories, nämlich einmal das, was wir für die Plugins benötigen, und einmal das, was wir eben für die Sprachen benötigen. Ich verspringe das, da komme ich gleich zu. Hier definiere ich, wo letztendlich die einzelnen Sachen hininstalliert werden sollen. Das erste hier können wir, das, was ich jetzt hier an dieser Stelle habe, können wir ignorieren, weil das setze ich aktuell nicht wirklich ein. Das heißt, ich könnte es doch theoretisch rausspeisen. Ich habe es aber drin gelassen, weil es halt im Original, in der Original Composer eben als Beispiel noch mit drin steht. Wer mir einmal unsere WordPress Plugins, da habe ich dann definiert, dass das Ganze in Web App Plugins und der entsprechende Name von dem Plugin installiert wird. Bei den Themes sieht es halt so aus, dass es in Web App Themes entsprechend definiert wird. Ihr habt hier eben die Möglichkeit, die Typen der Einbindung, also darüber die Definition zu machen. Das heißt also, wir haben hier einmal den Typ WordPress Plugin und der geht dann eben, wie gesagt, in das Plugin Verzeichnis rein. Den brauchen wir für die Sprachen, weil wir nämlich, dass er entsprechend weiß, dass das eben diese Sprachen beziehungsweise hier bei den Themes, wo er die Sachen eben nachher reinspeichern soll. So, kommen wir zu den Abhängigkeiten. Ich habe einmal definiert, dass ich hier mindestens PHP 7.1 haben will. Den Composer-Installer brauchen wir, dass wir das System entsprechend installieren können. Da habe ich jetzt festgelegt, dass ich WordPress Version 4.9 haben will, so wie ich es entsprechend hier definiert habe. Wenn noch eine neue 4.9 herauskommen würde und ich würde ein Composer Update machen, würde sich entsprechend auch diese Version ziehen. Wir haben den deutschen Core. Ich habe jetzt als Beispiel mal noch WordPress.io hier mit drin gelassen. Hier holt er sich im Moment jetzt die höchste Version, die eben möglich ist nach den Requirements, die ich hier definiert habe. Ich könnte natürlich jetzt hier auch auf eine feste Version gehen oder auf eine, die an der Major Version das Ganze festmachen. So, grundsätzlich gehen wir mal einmal hier hin. Ops, ey, so. Grundsätzlich noch habe ich meine Entwicklungssystemen nicht hochgefahren, das größer machen, sichtbar genug zu sehen. Okay, also wie gesagt, ich habe jetzt, bei mir hier lokal arbeite ich mit einem Docker. Das heißt, ich habe mir, vielleicht noch einmal kurz zeigen, sorry. Wir haben uns hier ein eigenes Makefile gebaut, indem wir, wenn ich jetzt hier ein Makestart mache, die eben dann das, das den Docker-Compose abmacht. Und wenn ich jetzt in meine Docker-Compose, die jammel rein gehe, haben wir letztendlich unser eigenes Image für das Web gebaut mit den einzelnen Verknüpfungen zur Datenbank und zu Mail. Hase ich in der Zeit, nee, okay, gut. Und auch entsprechend die Datenbank und eben noch das, das, das Mail-Modul. Das heißt, also das relativ schlanker Docker, den wir hier haben. So, machen wir mal unser Makestart. Dann wird unsere Datenbank Mail und Web. Und jetzt kann ich, nachdem ich vorher, das sind die einzigen beiden, ich habe mir einmal das Repository gezogen, wie gesagt, Makefile und Docker-Compose, habe ich jetzt eben händisch angelegt, weil das eben die Unabhängige ist, je nachdem, wie ihr eure Installation eben lokal fahrt. Das heißt, ich fange jetzt hier mit einem Composer Update an, spotte zunächst mal die Abhängigkeiten auf und dann geht er hin und installiert entsprechend den Core. Also grundsätzlich gehen wir einmal durch. Wir haben hier die WordPress-Version 498. Wir haben hier einmal den Core mit der 498. Wir haben hier unser Plugin WordPress mit der 8.4. Das ist eigentlich das, was so jetzt die Rahmenbedingungen sind. Wenn wir uns das jetzt hier einmal in der, das ist etwas klein. Okay, aber trotzdem. Kann man das hinten erkennen? Okay, gut. Also was wir jetzt haben, ist hier einen Webordner. Diesem Webordner gibt es einmal eben App. Das sind die Inhalte, die wir entsprechend von den Sprachen haben. Das heißt also, wir haben jetzt hier zum Beispiel die deutschen Sprachdateien für den Core und wir haben hier einmal für das Plugin, nämlich WordPress-Zero installiert. Unter WP liegt letztendlich der Core und das heißt also, der Core mit all dem, was wir eben zum Teil nicht haben wollen, nämlich wir haben hier noch unser Hello Dolly, aber wir haben hier auch noch unser ungeliebtes Plugin. So, WP an sich, also der Core ist in dem Moment dann an dieser Stelle da und wir mapen halt jetzt das ganze System, was in WP liegt, entsprechend in App rein. Das heißt, wenn ich jetzt im Frontend bin, also ich habe jetzt meine, ich habe eine leere Datenbank angelegt, dass wir hier keine Fehlermeldungen bekommen, komme ich jetzt hier an diese Stelle, dass ich hier noch einen Plugin machen kann. Okay, ich hätte jetzt gerne eine neue WordPress-Instanz. So, WordPress-Camp 2018. Ich hätte jetzt gerne hier mein Passport. Da kann mir jetzt einfach das Passort hier. Jetzt hoffe ich, dass nicht der Vorführeffekt kommt. Das heißt, ich habe jetzt hier in meinem Plug-In-Verzeichnis auch wirklich nur WordPress Zero. Bei den Teams, bei den Teams habe ich bislang noch kein Team installiert. Das heißt also, da kann es im Moment noch nicht funktionieren. Das heißt also, dass wir jetzt noch benötigen, ist eben ein Scheit-Theme, dass wir überhaupt irgendetwas im Frontend sehen, weil, wenn ich das jetzt aufrufe, ich habe noch nie ein WordPress ohne Team aufgerufen, aber ja, dann ist, wenn ich nichts eingebe, noch gut zu wissen, das heißt, er wartet jetzt hier ein 27 Team. Okay, das heißt, wir brauchen jetzt noch ein Teams-Verzeichen, ein Theme. Und ja, gehen wir einfach mal, ich kopiere mir jetzt einfach mal mein eigenes Theme, weil ich habe jetzt keine Lust, das komplett so zu schreiben. Man ist noch einfach, ich kopiere es mir aus meinem eigenen Blog, aber der ist noch beschäftigt, weil er mal in der Ziehung ist. Man ist einfach so, geht schnell ab. So, ich habe jetzt hier die Composer Jason von unserem Scheit-Theme. Dem habe ich jetzt einmal hier oben einen Namen gegeben, nämlich MFC 2014. Und ich habe hier unten die Abhängigkeiten definiert. Das heißt, ich habe einmal gesagt, okay, wir wollen letztlich vom Parent-Theme 2014 erben, egal in welcher Version, und wir wollen die deutsche Übersetzung für 2014 haben. So, damit habe ich jetzt sichergestellt, dass ich letztlich, also, dass mein Scheit-Theme eben vom 2014 abhängig ist, also, die Abhängigkeit entsprechend definiert ist. Das, was jetzt noch fehlt, das ist jetzt unter Themes da. Ich muss es jetzt noch in die Projekt Composer Jason entsprechend einbauen. Das heißt, das, was ich jetzt machen kann, ist hierhin zu gehen. Ich will das jetzt nicht übernehmen, zu sagen, okay, wir haben ein Composer Require. Ich hätte jetzt auch jetzt direkt den Composer Jason vom Projekt eintragen können. Wir haben ein Composer Require auf MFC 2014 MFC. So, jetzt geht der Composer letztendlich hin und schaut, okay, habe ich irgendwo, kann ich das Ganze auflösen? Dann weiß er, okay, ja, er kann es auflösen, weil nämlich in unserem Verzeichnis Themes gibt es eben ein Paket mit, das MFC 2014 heißt und das, was er letztendlich jetzt gemacht hat, ist hier einen zusätzlichen Eintrag mit MFC 2014 MFC eben einzutragen, was als Theme eben zur Verfügung steht mit den ganzen Abhängigkeiten. Und wenn ich jetzt nochmal, ich habe das aber schnell abgelaufen, Designs, Themes. So, 2017, was hier nicht vorhanden ist, ist aber trotzdem standardmäßig hier ja als Theme-Fügung. Jetzt kann ich das hier entsprechend aktivieren. Dann verschwindet auch unser Theme, wie begeistert. So, und ich habe jetzt, passt natürlich jetzt hier nicht so ganz, aber ich habe jetzt entsprechend mein Theme. Gibt es Anmerkungen? Zum einen ist der Ordner, in dem das Theme liegt, Public Accessible über den URL. Also könnte ich eine Datei, die im Theme liegt, direkt ansprechen, weil es ja nicht im Webordner liegt. Nein, kannst du nicht, weil letztendlich ist nur das im Frontend verfügbar, all das, was unter Web liegt. Okay, das heißt, wenn ein Theme zum Beispiel eine Option-Seite hat, die eine eigene PRP-Datei aufgerufen wird, würde das nicht funktionieren. Vermutlich. Noch mal, wenn ich... Sie haben eigene Theme-Options und es ist eine eigene PRP-Datei, die direkt aufgerufen werden muss. Die könnte ich dann nicht aufgerufen. Also, er geht hier entsprechend hin und mapt das, was ich hier oben habe, mapt er ja hier rein. Also, es existiert letztendlich ein Sim-Link, dass eben all das, was in App drin ist, dass das entsprechend eben im Frontend verfügbar ist. Okay, dann geht's. Und die andere Frage ist, du hast in deinem Composer einen Befehl, der die Solsey das mal generiert. Macht er das wirklich bei jedem Compose-Update? Das kannst du so einstellen. Ja, aktuell, das ist das, was die Anmerkung ist. Ich bin im Moment hingegangen, ich bin im Moment hingegangen, ich bin im Moment hingegangen, ich bin im Moment hingegangen und habe es der einfache Datei. Gehe ich auch jedes Mal hin und überschreibe meine Enfdatei. Sollte ich ja auch vielleicht nicht unbedingt machen. Weil es kann ja sein, du hast ja eine Beispielkonfiguration in deinem Enfexample drin und hast dann lokal bei dir schon Anpassungen gemacht. Jedes mal, wenn ich jetzt ein Composer-Update mache, würde ich mir meine Anpassungen damit überschreiben. auch nicht. Ja, das Solstranet wird halt dazu führen, dass jeder User aus dem System fliegt, was zum Beispiel bei einem Workshop ganz blöd wäre, wenn dann auf einmal der Warnkopf wieder leer ist. Ja, richtig. Also, letztendlich. Also, es ist nur für die Entwicklung, dass das einfach schneller läuft. Wie gesagt, ist es an dieser Stelle nicht ausgereift, Gottes Willen? Es war halt einfach so, ich habe in meiner .enf-Example-Datei, steht letztendlich das drin, was ich für lokal benötige und deshalb hat es mich im Moment noch nicht gestört. Mir ging es vor allen Dingen auch darum, wenn wir jetzt zusätzlich oder zusätzliche Variablen festlegen, müssen wir das hier irgendwie dafür sorgen, dass die auch dann zum Nutzer weiter gereicht werden, weil wenn ich jetzt in meiner .enf-Example, weiß ich nicht, eine Environment-Variable letztendlich definiere, weil wir sie eben an einer Stelle nutzen und der Nutzer hat sich vorher, von einer vorherigen Version, eben seine End-Statei muss es ja irgendwie aktualisiert werden. Das heißt, er benötigt diese Variable. Das heißt, also du musstest eigentlich die beiden Dateien miteinander merken. Das heißt also, das, was in der Example drin ist, muss sozusagen in der .enf-Datei dann entsprechend hinzugefügt werden, aber es dürfte nicht, das, was vorhanden ist, dürfte nicht überschrieben werden. Das ist noch eine Sache, die natürlich ... Also ich hätte sonst noch ein paar Anmerkungen, weil ich auch genau mit Composer meine WordPress-Instance komplett auf die Steuer. Der Vorteil ist auf jeden Fall noch, dass man ja das Child-Seam, also als die Repository zum Beispiel von einer Git Repository direkt hinzufügen kann und so dann halt immer, dass aktuell das Child-Seam von seiner Git Repository deployen kann. Also das ist, weil du das jetzt in Ordnikes hier direkt reingepackt hast, genau und das Ganze halt auch die ganze Konfiguration natürlich in der Git Repository zu packen und dann über einen Server einfach mal davon die aktuellste Version zu ziehen und zu deployen. Es gibt noch, es gibt noch so eine, so eine schöne weitere Sache, hat jetzt nicht direkt mit WordPress zu tun. Wir haben theoretisch jetzt in dem, in unserer Child-Seam, wenn wir da unser CSS mit NPM bauen, gibt es bei NPM eben die Möglichkeit, ein sogenanntes NPM Audit zu machen. Damit kannst du eben schauen, ob die Bibliotheken, die du einsetzt, ob es dafür Sicherheitslücken gibt. Das heißt also ich kann eben auch beim, beim Deployment Test kann ich oder beziehungsweise bei jedem Commit, den ich mache, kann ich eben über die Git Lab CI entsprechend ein Test laufen lassen, die eben an NPM Audit macht und eben überprüft, ob die Requirements, die ich in meiner Packetjazen definiert habe, ob die noch wirklich sicher sind. Das heißt, wenn du jetzt auf eine feste Version gehst in deiner Packetjazen und sagst ich, als Beispiel, machen wir uns mal kurz die Packetjazen an. Als Beispiel, wenn ich jetzt hier mein, mein CSS lind oder mein Not, Not sass auf eine feste Version gestellt hätte, nicht auf Latest, dann könnte es natürlich sein, dass es, dass es in dem entsprechenden Modul oder in einem Modul, was eben als Abhängigkeit in diesen Modulen definiert ist, dass es da eine Sicherheitslücke gibt. Und da würde ich dann eben darüber auch entsprechend benachrichtigt werden, wenn man jetzt das Ganze noch ein bisschen, bisschen weiter verarbeitet und eben auch die ganzen Javascript Sachen über Webpack zum Beispiel sich bauen lässt, hat man damit natürlich dann auch sichergestellt, dass man A immer die, das ist auch eine gewisse Aktualisierung mit drin ist, dass du eben auch neue, neue Module auch möglichst schnell nutzen kannst, weil du eben die Abhängigkeit definieren kannst und du gehst nicht auf eine feste Version, du sagst nicht, ich benutze jetzt jQuery in der Version 1.10.3, sondern hast du die Möglichkeit, das Ganze dynamisch zu laden. Setzt natürlich ein bisschen darauf voraus, dass du dir anguckst, ah, welche Plugins du einsetzt, was diese Plugins eben für Javascript einsetzen, was die letztlich für, für CSS einsetzen, dass du dafür sorgst, dass das CSS, bzw. das Javascript, was die Plugins eben einsetzen, dass du das einmal de-referenzierst und selber dir sozusagen dann die entsprechenden Sachen selbst baust und auch für die Ladereinfolge eben sorgst. Also wir haben, wir sind zum Beispiel, sind wir in unserer, mal einmal hier zeigen, wir sind zum Beispiel hingegangen und haben jetzt fürs, fürs CSS, für die, für die Plugins, die wir nutzen, haben wir eben dafür gesorgt, dass die nicht mehr, dass nicht mehr das eigene CSS von denen geladen wird, sondern dass wir eben eine konkatenierte Version haben und noch ein einziger CSS-Datei, dass wir es eben schaffen, dass du da eben auch irgendwo von der, vom, vom, vom Laden her auch weniger haben. Jetzt um so eine Frage. Ja. Wie gehst du mit so Premium Plugins um, die nicht in der, also in der offiziellen Plug-in Repository zu verfügbar sind und deswegen nicht war die Package... Gute Frage, ich setze das nicht ein. Okay, das ist halt auch so ein bisschen... Nein, also die Frage, also klar, die Frage ist natürlich, ist natürlich berechtigt. Es gibt, gibt ja zwei Möglichkeiten, wenn ich einen Zugriff auf ein Premium Plug-in habe, dann gibt es ja im Idealfall auch irgendwo ein Repository oder wird es zukünftig hoffentlich ein Repository geben, auf das ich dann eben auch Zugriff bekomme, weil ich denke, es wird sich alles etwas weiter professionalisieren, sodass eben dann auch da entsprechende Sachen verfügbar sind oder dass du eben die Möglichkeit hast, das entsprechend zu bekommen. Lass mich auch gerne eines besseren Belehrendur... Nein, also wir haben einfach nur an der Workflow, wir haben halt, ich meine die meisten Premium Plug-ins, kriegt man nur über den Download-Bereich vom Anbieter und die sind auch jedes Mal anders oder wenn sie von Team Pros kommen, dann nochmal komplizierter. Wir haben das einfach bei uns so gemacht, dass wir das alles in unseren eigenen GitLab importieren und auch taggen. Ich habe mir dann einfach Skript geschrieben, ich exportiere einfach nur die ganzen Dateien aus dem Zip, dann habe ich ein kleines Skript, was in jeden Unterordner reingeht, guckt, ist die aktuelle Version in der PAP-Datei und in der Sales-CSS gleich dem letzten Tag, den ich in GitLab habe, ansonsten committed der alles, tagt das bei mir in GitLab und dann kann es halt von meinem GitLab-Server aus dann deployen. Also das ist halt ein einmalige Aufwand, muss er gucken, okay, wenn ein Update da ist, dann lad ich mir das als Zip-Date herunter, entpackt es, committed es in unseren GitLab und dann kann es von da aus machen. Das heißt, ich kann dann halt nicht über das Backend sagen, jetzt akkrisieren, über den Schüssel, den du hinterlegst, aber ich habe es dann halt sauber in GitLab und kann das dann halt darüber einfach deployen. Du könntest natürlich auch hingehen und könnte das Ganze automatisieren, also das Ziehen der Zip-Datei und würde es dann über den Fallhäsch zum Beispiel sagen, okay, es hat sich geändert. Ansonsten, wie gesagt, ich werde zu dem Thema noch einen Beitrag demnächst schreiben. Das ist etwas klein und wie gesagt, die Folien sind, also die Folien kriegt ihr dann, sind ja nicht besonders viele und ich habe halt wie gesagt ein eigenes Repository mit dem, das ich WP Composer Starter eben nennt, was ihr eben verwenden könnt und ja, das sind halt die grundsätzlichen Sachen soweit drinnen. Das ist auch ein bisschen die Anfangshöde weg ist und ja, ansonsten viel Spaß.