Core-Optionen auf eigener Settings-Seite verändern

Bei einem Projekt musste ich kürzlich auf einer Settings-Seite im Backend neben eigenen Optionen auch die Core-Option für den Inhalt der Startseite und für die Blogseite einbauen. Das war allerdings nicht so einfach, wie ich erst gedacht hatte, weil die Settings-API genau prüft, welche Optionen von einer Einstellungs-Seite abgeschickt werden dürfen und nur diese abspeichert.

"Core-Optionen auf eigener Settings-Seite verändern" Weiterlesen

Mehr Übersichtlichkeit im Code mit weniger `else` und Schachtelung

Ich habe mich kürzlich vermehrt damit beschäftigt, besseren Code zu schreiben, weil das ein Aspekt ist, bei dem ich noch einiges lernen möchte. Ein einfach zu merkender und – wie ich finde – schnell einleuchtender Weg zu weniger komplexem Code ist die Vermeidung von else und die Reduzierung von Verschachtelungen im Code.

"Mehr Übersichtlichkeit im Code mit weniger `else` und Schachtelung" Weiterlesen

Fallstudie: About-Seiten von everysize mit Gutenberg

Ich kümmere mich schon seit einiger Zeit für everysize um Wartung und Anpassungen an ihrem Blog, das mit WordPress und einem modifizierten Drittanbieter-Theme läuft. Jetzt sollten die About-Us-Seiten wie Team, Über Uns, Partner und Jobs auch über WordPress gepflegt werden, um die Bearbeitung im Vergleich zur vorherigen Situation zu vereinfachen.

Dafür wurde von einer Agentur ein Layout für die unterschiedlichen Seiten erstellt und meine Aufgabe war die Umsetzung der Layouts in WordPress.

"Fallstudie: About-Seiten von everysize mit Gutenberg" Weiterlesen

WordPress-REST-API für nicht eingeloggte User deaktivieren

Bei einem Projekt mit einer vor öffentlichen Zugriffen geschützten Website sollte auch die REST-API nur für eingeloggte User aktiv sein, um zu verhindern, dass darüber Inhalte abgefragt werden können.

Nachdem ich zunächst geprüft habe, ob sich irgendwie die Permission-Callbacks verändern lassen, bin ich auf den rest_authentication_errors-Filter gestoßen, mit dem die Aufgabe relativ einfach zu lösen ist.

"WordPress-REST-API für nicht eingeloggte User deaktivieren" Weiterlesen

Bestimmte Blöcke in InnerBlocks-Kom­po­nente verbieten

Bei der Entwicklung von Gutenberg-Blöcken ist die InnerBlocks-Komponente ein (zumindest bei mir) oft eingesetztes Mittel. Diese Komponente ermöglicht es, innerhalb eines Blocks weitere Blöcke einzufügen – bei den Core-Blöcken ist sie beispielsweise beim Spalten- und Cover-Block im Einsatz.

Dieser Komponente kann über das Attribut allowedBlocks ein Array von Blocknamen übergeben werden, um festzulegen, welche Blöcke eingefügt werden dürfen. Das ist zum Beispiel bei Wrapper-Blöcken hilfreich, wie dem Spalten-Block, der als direkten Kindblock nur den Block Spalte erlaubt.

Etwas komplizierter wird es, wenn nur bestimmte Blöcke nicht erlaubt sein sollen, denn etwas wie disallowedBlocks gibt es nicht.

"Bestimmte Blöcke in InnerBlocks-Kom­po­nente verbieten" Weiterlesen

Wechsel von Windows auf Ubuntu als Haupt-Betriebssystem

Bisher hatte ich als Betriebssystem immer Windows und war damit meist auch sehr zufrieden. Mit dem Windows Subsystem for Linux waren meist auch die ganzen CLI-Tools, die es im Bereich Webentwicklung gibt, ohne große Probleme einsetzbar.

Allerdings gab es immer mal Kleinigkeiten, die dann doch nicht funktioniert haben, und in letzter Zeit ist mein Laptop immer mal wieder an seine Leistungsgrenze gekommen (was eventuell aber auch damit zusammenhing, dass ich eine Preview-Version von Windows verwendet habe).

Mit einem Wechsel auf Ubuntu habe ich schon ein paar Mal geliebäugelt, und vor ein paar Wochen war es dann soweit: ich habe Ubuntu als zweites Betriebssystem neben Windows installiert und nutze es seitdem fast ausschließlich, und abgesehen von ein paar Problemen am Anfang bin ich damit jetzt sehr zufrieden.

"Wechsel von Windows auf Ubuntu als Haupt-Betriebssystem" Weiterlesen

CSS-Selektoren in PHP eine Klasse voranstellen

Bei einem Slider-Gutenberg-Block habe ich die Möglichkeit eingebaut, über ein Textfeld CSS einzugeben, das sich nur auf diesen einen Block auswirkt. Natürlich soll der User dabei nicht darauf achten müssen, die Selektoren so zu schreiben, dass sie wirklich nur für diesen Block gelten – das soll im Hintergrund vor der Frontend-Ausgabe geschehen.

Um das umzusetzen, habe ich mich nach einer PHP-Lösung zum Parsen von CSS umgeschaut und mit PHP CSS Parser ein passendes Tool gefunden.

"CSS-Selektoren in PHP eine Klasse voranstellen" Weiterlesen

Visuelle Regressionstests mit JLineup

Mit visuellen Regressionstests kann überprüft werden, ob es visuelle Unterschiede zwischen zwei Versionen einer Website gibt. Ein sinnvolles Szenario für so einen Test wäre beispielsweise, den Stand einer Website auf einem Testserver vor und nach dem Deployment einer Änderung zu überprüfen, und die Änderung nur auf den Live-Server zu schieben, wenn es keine visuellen Unterschiede gibt.

Es gibt verschiedene Lösungen zur Durchführung dieser Tests, hier stelle ich euch JLineup vor.

"Visuelle Regressionstests mit JLineup" Weiterlesen

Hintergrund­prozesse in WordPress erstellen

Wenn ein PHP-Skript ausgeführt wird, lädt die Seite normalerweise so lang, bis die Aufgabe ausgeführt ist (oder es einen Fehler gibt). In vielen Fällen ist das auch kein Problem, da das Skript nicht lange braucht. Wenn es aber eine oder mehrere aufwendige Aufgaben erledigen muss und damit eventuell mehrere Minuten oder sogar Stunden beschäftigt ist, wäre es praktisch das im Hintergrund ablaufen zu lassen. Hier zeige ich, wie das in WordPress umgesetzt werden kann.

"Hintergrund­prozesse in WordPress erstellen" Weiterlesen

Anwendungs­passwörter in WordPress 5.6

Bisher war im WordPress-Core keine Funktion vorhanden, mit der sich externe Dienste einfach bei der Nutzung der REST-API einer WordPress-Website authentifizieren konnten. Mit WordPress 5.6 und der Integration des Application-Passwords-Plugins in den Core hat sich das geändert und es steht ein User-Flow zur Verfügung, um Dritt-Services bei einer WordPress-Website für spätere Anfragen zu autorisieren.

"Anwendungs­passwörter in WordPress 5.6" Weiterlesen