Dies ist der dritte und letzte Artikel einer Reihe über „Remote Control WordPress“. Das ist mein Spitzname für diese Strategie, Netzwerkeinstellungen auf einer „Kontroll“-Installation zu verwalten und diese Werte dann in alle Ihre Kundeninstallationen zu übernehmen. Der Vorteil ist, dass sich Mitarbeiter nicht mit dem Umschalten derselben Einstellungen bei denselben Netzwerk-Plugins über viele Multisite-Installationen hinweg abmühen müssen.
Artikelserie
Teil 1: Die WP REST API zur Fernsteuerung von WordPress
Teil 2: OAuth-Spaß mit OAuth1
Teil 3: Remote Control WordPress im Großen Stil (Sie sind hier!)
Im ersten Artikel habe ich gezeigt, wie Netzwerkeinstellungen über die WP API abrufbar gemacht werden. Im zweiten Artikel habe ich gezeigt, wie diese Einstellungen abgefragt werden, auch wenn sie einen OAuth-Header benötigen (was sie immer sollten). In diesem Artikel werde ich alle Teile zusammenfügen und Ihnen genau zeigen, wie ich dies in der Produktion einsetze.
Was Sie zum Mitmachen brauchen
Wenn Sie mit der Serie vertraut sind, wissen Sie, dass wir zwei WordPress Multisite-Installationen benötigen, um dies zu bewerkstelligen.
- Zuerst benötigen wir die Kontrolle, wo wir die Einstellungen verwalten. Ich benutze meine persönliche Website als Kontrolle in diesen Demos.
- Zweitens benötigen wir eine Client-Installation, um Einstellungen von der Kontrolle abzufragen. Ich verwende dafür meinen lokalen MAMP.
Genau wie im letzten Artikel sollte die Kontrollinstallation das WP REST API V2 Plugin und auch mein CSS-Tricks WP API Control Plugin Netzwerkweit aktiviert haben. Diese werden in den früheren Artikeln zerlegt, obwohl es sich lohnt, das Kontroll-Plugin noch einmal herunterzuladen, da ich kürzlich eine PHP-Warnung behoben habe.
Neues Territorium sozusagen: Sowohl die Kontroll- als auch die Client-Installation sollten mein CSS-Tricks WP API Client Plugin Netzwerkweit aktiviert und ausgefüllt haben. Dieser Prozess wurde für die Client-Installation im zweiten Artikel beschrieben. Kopieren Sie einfach Ihre ausgefüllte Version dieses Plugins jetzt auch in die Kontrolle; es gibt keinen Grund, die OAuth-Mühsal für die Kontrolle erneut durchzuführen.
Ebenfalls neues Territorium sozusagen: Nachdem Sie die Schritte im zweiten Artikel ausgeführt haben, können Sie das OAuth1 Plugin von der Kontrolle deinstallieren.
Völlig neues Territorium: Sowohl die Kontrolle als auch der Client benötigen ein Feature-Plugin, um zu demonstrieren, wie der CSS-Tricks WP API Client sinnvoll genutzt werden kann. Ich habe ein solches Feature-Plugin für Sie vorbereitet, es heißt CSS-Tricks Can He Loginz?.
Alles da? Gut. Wir werden jetzt… *abstrakt*!
Die Abstraktionsschicht
Die Dinge in dieser Artikelserie sind etwas komplex geworden. Im zweiten Artikel haben wir viel Arbeit geleistet, um Netzwerkeinstellungen von der Kontroll-Blog abzufragen. Wir haben dies über einen Demo-Shortcode getan, der einfach die Ergebnisse des API-Aufrufs protokolliert hat. In Wirklichkeit betreibe ich viele „Feature“-Plugins, um Dinge wie Google Analytics, Admin-Benachrichtigungen, White-Labeling und so weiter zu erledigen. Wenn wir die Einstellungen für all diese Feature-Plugins über Fernsteuerung verwalten wollen, wäre es wirklich ärgerlich, wenn wir all diese API-Arbeit in jedes einzelne kopieren und einfügen würden. Daher benötigen wir ein Plugin, das uns ein Framework für den Abruf von Netzwerkoptionen von der Kontrollinstallation bietet, und all unsere Feature-Plugins können dieses Framework nutzen. Wir brauchen eine Abstraktionsschicht!
Wikipedia sagt,
In der Softwaretechnik und Informatik ist Abstraktion eine Technik zur Bewältigung der Komplexität von Computersystemen.
Genau das mache ich in meinem CSS-Tricks WP API Client Plugin. Durchsuchen Sie einfach die Liste der Dateien und Sie bekommen eine Vorstellung davon, wohin ich damit gehe.
- `control_panel.php` rendert eine Netzwerkeinstellungs-Benutzeroberfläche in
wp-admin/network/, die unser Feature-Plugin instanziieren wird. Es gibt eine Reihe von Nuancen, die für diesen Artikel entscheidend sind und die ich unten detailliert beschreiben werde. - `remote.php` ruft die Kontrollinstallation auf, um eine gegebene Netzwerkeinstellung abzufragen. Es verschmilzt die entfernten Einstellungen mit den lokalen Einstellungen, um die vollständige Liste der Einstellungen an ein Feature-Plugin zu übergeben.
- `crud.php` ruft Netzwerkeinstellungen ab und setzt sie. Wenn Sie die fehlende Kern-API für die Netzwerkverwaltung stört, öffnen Sie diese Datei und freue Sie sich darüber. Sie spielt in diesem Artikel nur eine untergeordnete Rolle.
- `oauth.php` authentifiziert sich bei der Kontrollinstallation. Es wird hier verwendet, aber nicht diskutiert. Wir haben es im letzten Artikel zerlegt.
- `demo.php` bietet einen Hello-World-Shortcode für diesen gesamten Prozess, den wir im vorherigen Artikel gemacht haben. Wir diskutieren ihn hier weder noch verwenden wir ihn.
Allein dieses Plugin tut absolut nichts, was perfekt ist. Feature-Plugins werden es nutzen, um Netzwerkeinstellungen zu erstellen, zu überprüfen, zu aktualisieren oder zu löschen, einschließlich Einstellungen, die auf der Kontrollinstallation verwaltet werden.
Um ganz klar zu sein, das CSS-Tricks WP API Client Plugin wäre auch cool, selbst wenn wir all diese Remote-Control-Sachen nicht machen würden: Ein Teil seines Wertes ist, dass es uns ein konsistentes Framework für Netzwerkeinstellungsseiten in unserer gesamten Codebasis bietet, was an sich schon großartig ist.
Ich werde später tief in die relevanten Teile des CSS-Tricks WP API Client Plugins eintauchen. Vorerst möchte ich unser Feature-Plugin vorstellen, das die Abstraktionsschicht nutzen wird.
Das ist es

Unser Feature-Plugin, CSS-Tricks Can He Loginz, macht eine Sache und das gut: Es fügt dem wp-login-Seite ein Foto des amerikanischen Sängers und Songwriters Kenny Loggins hinzu. Das Can He Loginz Plugin benötigt, dass das API Client Plugin ebenfalls aktiv ist.

Es verwaltet zwei Netzwerkoptionen, von denen eine auf dem Kontrollblog verwaltet wird und die andere auf jeder Client-Installation, um beide Szenarien zu demonstrieren. Das ist ein wichtiger Punkt: Ein bestimmtes Plugin kann viele Einstellungen haben, von denen einige auf allen Ihren Client-Installationen gleich sind, einige sich aber unterscheiden. Unser Feature-Plugin hat eine von jeder.

Das Beispiel ist offensichtlich lächerlich (wenn Sie nicht wissen, wer Kenny Loggins ist, machen Sie sich keine Sorgen. Wissen Sie einfach, dass seine Musik zu diesem Zeitpunkt ziemlich ironisch gut ist und dass die Plugin-Einstellungen sich auf einige seiner Songtexte beziehen), aber die Leichtigkeit, mit der dieses Feature-Plugin mit dem CSS-Tricks WP API Client integriert, ist wirklich cool. Schauen Sie sich diesen Code an, der unser Feature-Plugin bei der Abstraktionsschicht registriert. Fertig. Das Can He Loginz Plugin hat jetzt eine Einstellungsseite im Netzwerk-Admin mit Fernsteuerungsfunktion.
Ich möchte das betonen: *Angesichts der Einrichtungsschritte, die wir bisher in der Serie akzeptiert und ausgeführt haben, ist die Erreichung von Remote Control WordPress für ein Feature-Plugin im Grunde eine Einzeiler*.
Die Einstellungen, so albern sie auch sein mögen, sind in einem Array hier definiert. Dort könnten wir einfach Einstellungen hinzufügen, entfernen oder neu definieren.
Um nun zu sehen, was das Can He Loginz Plugin tatsächlich mit diesen Einstellungen macht, öffnen Sie einen neuen Browser und betrachten Sie die Login-Seite.

Wie versprochen, zeigt es unser Foto an und verwendet unsere Optionen in ein paar Textblöcken.
Wow…
Nicht wahr?
Der Kern der Sache liegt in meiner Funktion namens merge(), aus meiner Klasse, die die Kontrollinstallation aufruft. Zuerst holt sie Ihre Client-Einstellungen – die, die Sie auf jedem Blog anpassen möchten. In unserem Beispiel ist das die „Schuhe“-Checkbox. Dann durchläuft sie alle entfernten Einstellungen auf der Kontrollinstallation, wie die „Gefahrenzone“-Einstellung aus unserem Beispiel, und fügt sie ebenfalls dem Ergebnis hinzu. Das Ergebnis ist so ähnlich, als hätten Sie get_site_option() auf Ihrem Client und der Kontrolle aufgerufen und die Ergebnisse zusammengeführt – tatsächlich ist das genau das, was hinter den Kulissen über die WP API geschieht.
Um dies zu veranschaulichen, beachten Sie einen geringfügigen Unterschied zwischen der Anzeige der Einstellungs-UI auf der Kontrolle und dem Client.

In beiden Bildschirmen ist die erste Einstellung eine Fernsteuerungseinstellung, daher ist sie, wenn sie von einer Client-Installation aus betrachtet wird, deaktiviert. Dieselbe Einstellung ist auf der Kontrolle aktiviert. Umgekehrt, da die zweite Einstellung einen unterschiedlichen Wert für jede Client-Installation erwartet, ist sie auf dem Client aktiviert und auf der Kontrolle deaktiviert. Diese Logik findet hier statt, in meiner Klasse, die die UI des Kontrollfelds zeichnet.
Auch erwähnenswert ist das Caching. Der Client cacht das Ergebnis von der Kontrolle und hat die Möglichkeit, diesen Cache zu leeren, indem die Einstellungen aus der Client-UI erneut gespeichert werden.
Was ist hier das Eier-Korb-Verhältnis?
In den Kommentaren zum ersten Artikel der Reihe äußerte MF Simchock Bedenken, dass, wenn die Kontrollinstallation ausfällt, alle Client-Installationen ihre Einstellungen nicht abrufen können. Das stimmt zwar, aber es gibt ein paar Dinge, die wir tun können, um dies zu mildern. Ein paar davon liegen außerhalb des Rahmens dieser Serie.
- Tun Sie alles, was Sie tun müssen, um zu verhindern, dass Web-Traffic zur Kontrollinstallation geleitet wird. Sie dient einem Zweck: Netzwerkoptionen für die Client-Installationen festzulegen und bereitzustellen. Konfigurieren Sie diesen Server entsprechend. Ich bin hier nicht mehr im Bilde, aber ich frage mich, ob es eine praktische Möglichkeit gäbe, nach IP zu whitelisten, wo Sie eine Liste Ihrer Client-Installations-Server-IPs führen und prüfen würden, ob alle Anfragen von dieser Liste stammen.
- Wenn Ihre Kontrollinstallation auf demselben Server wie Ihre Client-Installationen liegt, ist es wahrscheinlich, dass ein Ausfall der Kontrolle auch einen Ausfall Ihrer Client-Installationen bedeutet. So etwas wie CloudFlares Always Online könnte in diesem Szenario helfen.
Was wir innerhalb unseres Codes tun können, ist, Ergebnisse, die seltsam erscheinen, niemals zu cachen. Schauen Sie sich diesen Code an, der die HTTP-Antwort von der Kontrolle überprüft und das Ergebnis nicht cacht, wenn es 40x oder 50x ist.
Was ist mit WP-CLI?
Im ersten Artikel schlug Kommentator „cidas“ vor, dass wir Remote Control WordPress einfacher über WP-CLI erreichen könnten. Er hat nicht unrecht. Wir könnten absolut ein CLI-Skript schreiben, um Einstellungen entweder zwischen Clients und Kontrolle zu pushen oder zu pullen. Das ist nichts, wozu ich qualifiziert bin, und ich habe nicht vor, es in der Produktion zu verfolgen. Ein paar Gründe:
- Es liegt zufällig weiter außerhalb meines Könnensbereichs als die API/Plugin-Arena.
- Wenn wir Kommandozeilenkenntnisse als Einstellungsvoraussetzung für unsere Einstellungs-Manager verlangen, wird dies erhebliche Auswirkungen auf unser Geschäftsmodell haben. Es könnte eine gute Auswirkung sein, es könnte eine schlechte Auswirkung sein. Im Moment bin ich damit zufrieden, keine Auswirkung zu haben!
- Ich denke, eine CLI-Lösung würde sich eher für die Kontrolle eignen, die Daten an Client-Installationen pusht, als für Clients, die von der Kontrolle pullen. Das macht mir Angst, weil ein fehlerhaftes Skript Live-Client-Daten beschädigen könnte.
Nächste Schritte
Das Beste, was diesem Vorhaben passieren könnte, wäre, wenn die WP API vollständig in den Kern integriert würde, zusammen mit dem OAuth1-Plugin. Beobachten Sie diese Projekte auf Updates, wenn Sie sich dem Lifestyle der Fernsteuerung verschreiben.
Ansonsten neige ich nicht dazu, dies noch ausgefallener oder komplizierter zu machen, als es sein muss: Ich denke, es ist bereit. Mein nächster Schritt ist, es weiterhin auf größeren, stärker frequentierten, wichtigeren Projekten zu implementieren und weiterhin alle Ecken und Kanten zu glätten.
Sicherlich könnten Sie es mit Unit-Tests ausgiebig testen, was ich in diesem Artikel nicht vertiefe. Sie könnten auch Unterstützung für mehr Feldtypen (Farbauswahl, Datums-/Zeitauswahl, was auch immer) integrieren. Und ich schätze, Sie könnten es schöner machen. Ich habe genau null CSS für die Einstellungsseite, was ich tatsächlich für eine gute Sache halte.
Ich hatte irgendwie erwartet, dass dieser dritte Artikel der längste und komplizierteste der Reihe sein würde, aber es gibt wirklich nicht viel dazu. Immerhin kann unser Feature-Plugin mit nur einer kleinen Handvoll Code an diesem Fernsteuerungs-Lifestyle teilnehmen, was allesamt eine Angelegenheit von geringer Komplexität ist, bei der eine Deklaration eines Slugs und von Einstellungen ist. Es fühlt sich wie eine extrem seltsame und übermäßig komplizierte Methode an, um eine Netzwerkeinstellung zu erhalten, aber ich denke, es ist weitaus besser, als dieselbe Einstellung viele Male auf vielen Installationen zu verwalten. Ich bin bereit, mit diesem Paradigma mit voller Geschwindigkeit voranzugehen und möchte es noch besser machen. Wenn Sie es ausprobieren, würde ich gerne hören, wo die Schmerzpunkte liegen.
Artikelserie
Teil 1: Die WP REST API zur Fernsteuerung von WordPress
Teil 2: OAuth-Spaß mit OAuth1
Teil 3: Remote Control WordPress im Großen Stil (Sie sind hier!)
Es ist großartig!
Liebe diese Art von Artikeln, danke!