Wie erstelle ich Landing Pages ohne Plugins

In einem neuen Projekt wurden mehrere WordPress Plugins verwendet um „Landing Pages“ zu erstellen. Einige dieser Plugins wurden aus dem Plugin-Verzeichnis entfernt, erhalten also somit keine (Sicherheits-)Updates mehr. In einem Telefonat wurde sehr schnell klar, dass es eine unterschiedliche Vorstellung davon gab, was eine Landing Page überhaupt ist.

Was ist eine Landing Page

Es gibt nicht die eine perfekte Definition für eine Landing Page. Für mich kann es im einfachsten Fall eine einzelne statische Seite auf einer Website sein, die alle Informationen präsentiert, um das Hauptziel zu erreichen. Die Seite wird über einen Permalink erreicht, der entweder über die passenden Suchbegriffe in einer Suchmaschine gefunden wird, oder der in sozialen Netzwerken verbreitet wird.

Landing Pages können auch sehr viel komplexer werden, abhängig von den Zielen, die sie erreichen wollen (Dinge, verkaufen, neue Registrierungen erhalten, etc.) und hierzu können verschiedene Techniken eingesetzt werden, um diesen Erfolg zu messen.

Eine einfache Landing Page

Viele würde argumentieren, dass eine Landing Page keine, oder nur eine sehr eingeschränkte Navigation hat, und auf der Seite eher über sogenannte „Call to Action Buttons“ (z.B. zu Shop, Bestellung, Registrierung, etc.) navigiert wird. Auf komplexeren Seiten mit einer langen Navigation, einer Sidebar und einem großen Footer, möchte man diese Elemente eventuell entfernen. Aber hierzu ist nicht immer ein Plugin notwendig, denn WordPress bringt eine sehr viel einfacherer Methode mit.

Erstellen eines „Landing Page“ Templates

Wenn ihr eine Seite erstellt, dann könnte ihr ein „Template“ im „Seite“ Tab im Block-Editor auswählen. Diese Templates werden von eurem Theme zur Verfügung gestellt (falls dieses welche hat), ihr könnt aber auch in eurem Child-Theme selbst welche anlegen. Mehr Informationen zum Anlegen von Seite-Templates findet ihr im Theme Handbook, aber oft reicht es aus, wenn ihr die page.php, singular.php oder index.php Datei in euer Child-Theme kopiert, dieser einen neuen Namen gebt (hier wird oft „page-“ als Präfix davor geschrieben) und dann am Anfang der Datei einen Kommentar mit dem Namen einfügt:

<?php
/**
* Template Name: Landing Page
*/

Genau darunter findet man in der Regel einen Aufruf für get_header() was dazu dient die header.php Datei aus dem Theme zu laden. An dieser Stelle können wir ebenfalls ansetzen, um das Seiten-Template ein wenig anzupassen und einen anderen Header zu laden. Hierzu übergebt ihr an die Funktion einen String:

get_header( 'landing-page' );

Wenn ihr die Funktion in dieser Weise aufruft, dann wird WordPress versuchen eine Datei header-landing-page.php anstelle der Standarddatei zu laden. Hierzu kopiert ihr wieder die header.php Datei aus und benennt diese entsprechend um. Nun könnt ihr euch in dieser Datei austoben. Ihr könnt die Navigation komplett entfernen, eine andere Navigations-Position nutzen oder selbst Dinge wie das Logo oder anderes in diesem Template ändern.

Erstellen von Inhalten für die Landing Page

Nachdem wir mit diesem Schritt fertig sind und unseren neuen (und vielleicht reduzierten) Header erstellt haben, können wir uns um die Inhalte der Seite kümmern. Aber das ist wirklich einfach, denn der Block-Editor liefert eigentlich schon die wichtigsten Elemente mit, die man für eine Landing Page braucht, inklusive einfach zu verwendender Buttons.

Die Zukunft von Landing Pages

Während dieser Ansatz noch immer eigenen Coder erfordert, ist eine neue Art der Umsetzung von Landing Pages schon in Sicht: Full-Site-Editing! Sobald es in WordPress (und Themes) verfügbar ist, müsst ihr keine Seiten-Templates mehr in einem Child-Theme erstellen. Ihr könnt dann einfach das gesamte Layout der Seite anpassen. Das Hinzufügen/Entfernen von Navigations-Menüs wird dann so einfach wie das Bearbeiten der Inhalte der Seite. Dann werden es spezielle Landing Page Plugins wirklich schwer haben es zu rechtfertigen, dass man noch ein zusätzliches Plugin benötigt.

Überprüfe deine Domain-Sicherheit mit Mozilla Observatory

In den letzten beiden Beiträgen habe ich euch zwei Tools vorgestellt, die ich oft nutze. Heute möchte ich mit einem dritten Tool weitermachen, das ist bisher im Beitrag Bessere Sicherheit für WordPress mit sicheren Server-Headern nur kurz erwähnt habe: das Mozilla Observatory Tool.

HTTP Observatory

Wenn ihr das Tool zum ersten mal für eine Domain ausführt, dann erhaltet ihr zuerst eine Übersicht zur HTTP-Sicherheit. Über diesen Teil habe ich auch schon in meinem vorherigen Beitrag geschrieben. Die Scan Summary könnt hierbei wie folgt aussehen:

Weiterlesen →

Generiere deine eigene nginx Konfiguration

In meinem letzten Blogbeitrag habe ich euch ein Tool vorgestellt, mit dem du „Die perfekte SSL-Konfiguration für deinen Server“ erstellen konntest. Diese Woche möchte ich über ein anderes Tool sprechen, das ich häufiger verwende, um eine gute nginx Konfiguration zu bekommen. Das Tool war früher unter der Domain nginxconfig.io zu finden (welche noch immer umleitet) und ist nun als DigitalOcean Community Tools – NGINXConfig zu finden.

Die Basics

Das Tool präsentiert sich mit ein paar Grundeinstellungen. Es ist auf PHP eingestellt und nutzt example.com als Domain. Das ist vermutlich die erste Einstellung die ihr ändern wollt. Über „Add site“ könnt ihr gleich für mehrer Seiten gleichzeitig Konfigurationen erstellen lassen, die dann im Ergebnis zu mehreren „Per-website“ Konfigurationsdateien führen.

Die Basiseinstellung mit den Konfigurationsoptionen für die Technologie und den Hostnamen

In den Voreinstellungen (Presets) könnt ihr unter verschiedenen Technologien die passende aussuchen. Wenn ihr hinter dem nginx eine WordPress-Installation betreiben wollt, dann findet ihr hierfür eine passende Voreinstellung. Diese generiert dann beispielsweise die passenden Rewrite-Rules sowie einige Sicherheitsregeln.

Voreinstellungen (Presets)

In diesem Abschnitt könnt ihr den Hostname eintragen und die Sub-Domain die ihr verwenden (oder nicht verwenden) möchtet, sowie den Serverpfad. Ihr könnt auch angeben, ob ihr Let’s Encrypt verwendet, um eure Zertifikate zu erhalten (oder eigene Einstellungen setzen). Weiterhin könnt ihr den PHP Server/Socket (sowie einen backup) angeben und noch ein paar andere fortgeschrittene Optionen.

Globale Einstellungen (Global config)

In den Gruppe der HTTPS-Einstellungen findest ihr die SSL-Profile wieder, über die ich in meinem letzten Beitrag geschrieben habe. Hier solltet ihr die Voreinstellung bei „Mozilla Intermediate“ belassen. Wenn ihr das Tool verwendet, um eine Konfiguration für eine WordPress-Website zu erstellen, dann schaut euch auf jeden Fall den Abschnitt „Security | Content-Security-Policy“ an. Da WordPress CSS und JS inline in die Seite einbindet muss dies erlaubt werden. Falls die Einstellung hier zu streng eingestellt ist, wird eure Website ansonsten nicht richtig funktionieren. Wenn ihr in den Presets WordPress ausgewählt habt, dann schlägt euch das Tool in einer Meldung auch eine solche Einstellung vor.

Eine weitere Gruppe von Einstellungen, die ihr euch ansehen solltet findet ihr im „Performance“ Tab. Die „Expiration“ ist hier jeweils nur auf eine Woche eingestellt. Da WordPress aber ein sehr gutes Cache-Invalidation-Handling hat (indem es die Versionsnummer von Plugin, Theme oder WordPress anhängt), könnt ihr hier vermutlich eine größere Dauer einstellen. Wenn ihr aber mehrere unterschiedliche Systeme hinter dem nginx betreibt, solltet ihr hier etwas vorsichtiger sein.

Eure Einstellungen speichern

Jedes Mal, wenn ich eine Einstellung anpasst, dann ändert sich die URL im Browser. Diese URL findet ihr auch im Abschnitt „Tools“ im Feld „Share configuration“. Ich kann euch nur empfehlen diese URL zu speichern oder ein Lesezeichen zu machen. Ihr findet die URL aber auch in der nginx.conf Datei im resultierenden Paket.

Eure Konfiguration anwenden

Nachdem ihr alle Anpassungen an der Konfiguration gemacht habt könnt die den weitern Anweisungen in der „Setup“ Sektion folgen. Dabei werdet ihr vermutlich damit anfangen das Paket runterzuladen, um es anschließend auf euren Server zu laden und dort zu entpacken. Falls ihr noch keine lauffähige Let’s Encrypt Installation habt, dann findet ihr auch hierzu ein paar Befehle, die euch dabei helfen.

Eure Konfiguration testen

Wie ich auch schon in meinem letzten Beitrag geschrieben hatte, solltet ihr niemals einfach eine Konfiguration per Copy/Paste blind übernehmen, sondern immer zuvor prüfen, bevor ihr sie auf einen laufenden Server anwendet. In der wordpress.conf Datei wird zum Beispiel der Zugriff auf der Datei xmlrpc.php blockiert. Das kann eine angemessene Einstellung sein, um Brute-Force-Attacken auf XML-RPC zu blockieren. Wenn ihr aber die offiziellen WordPress Apps verwendet, dann darf diese Datei nicht blockiert werden. Nachdem ihr also die Einstellungen angewendet habt solltet ihr die wichtigsten Seiten sowohl im Frontend, als auch im Backend testen.

Helft mit, das Tool zu verbessern

Da dies ein Community-Tool ist, kann man im GitHub-Repository des Projekts Fehler melden oder Verbesserungen vorschlagen. Ich habe das auch schon zweimal gemacht. Einen Fehler fand ich nach der letzten Aktualisierung meiner Konfiguration. Dabei wurde durch eine Sicherheitsregel der Zugriff auf die wp-comments-post.php Datei blockiert. Damit war es dann nicht mehr möglich auf meinem Blog zu kommentieren. Wenn ihr also etwas findet, dann helft dabei mit, das Tool für alle noch besser zu machen.

Fazit

Einen nginx-Server aufzusetzen ist wirklich schwer, gerade dann, wenn es nicht zu eurer täglichen Arbeit gehört. Ich ändere die Konfiguration für meinen Server wirklich nur sehr selten und muss dabei oft einfache Dinge immer wieder nachschlagen (ich warte sehr viel häufiger Apache Webserver bei der Arbeit). Tools wie dieses helfen mit bei der Arbeit wirklich sehr und ich konnte damit gute Voreinstellungen und Best-Practices finden. Eine andere gute Ressource für solche Best-Practices sind die Konfigurationen der HTML5 Boilerplate. Hier findet ihr nicht nur Beispielkonfigurationen für nginx, sondern auch für viele andere Server. Aber dieser sind eher für erfahrene Admins gedacht, da sie kein Konfigurationstool anbieten.

Die perfekte SSL-Konfiguration für deinen Server

Es ist 2021 und wir verwenden alle SSL für unsere Website, richtig? Leider gibt es da draußen noch immer viele Seiten, die kein SSL verwenden. Und auch solche, die es tun, verwenden manchmal unsichere Einstellungen. Heute möchte ich ein paar Tipps für Tolls geben, mit denen ihr die SSL-Einstellungen verbessern könnt – nicht nur die eures Webservers.

Den aktuellen Zustand analysieren

Bevor ihr anfangt, die Einstellungen zu optimieren, solltest ihr euch erst einmal ein Bild davon machen, was ihr optimieren wollt/müsst. Das Tool meiner Wahl ist hierfür der SSL Server Test (Qualys SSL Labs), in den ihr einfach euren Hostname einfügt und den Test laufen lasst. Das Ergebnis könnte dann wie folgt aussehen:

SSL Labs Testergebins

Wenn euer Ergebnis ungefähr so aussieht, dann könnt ihr jetzt eigentlich schon aufhören weiterzulesen, denn es ist fast das beste, was ihr erreichen könnt. Um auch bei der „Cipher Strength“ 100 Punkte zu bekommen müsst ihr seit tief in die Einstellungen diverser Komponenten eingreifen und manche davon vielleicht im Anschluss neu kompilieren. Ich könnt auch nur dann 100 Punkte in allen vier Kategorien erhalten, wenn ihr nur noch TLS 1.3 anbietet, was aber einige (nicht komplett veraltete) Client nicht unterstützen.

Optimieren der SSL-Einstellungen

Eine Überprüfungen im Test zielen auf das SSL-Zertifikat ab, aber die allermeisten davon auf die Webserver-Einstellungen und hier könnte ihr in der Regel die größte Verbesserung erreichen.

Ein SSL-Zertifikat mit großen Schlüssellänge erhalten

Für das SSL-Zertifikat solltet ihr euch eines besorgen, das eine Schlüssellänge von 4096 hat. Falls ihr Lets’s Encrypt verwendet, dann könnt ihr hierzu einfach --rsa-key-size 4096 an den certbot Aufruf anhängen. Ähnliche Optionen gibt es auch auch für viele andere Let’s Encrypt Clients.

Generieren der SSL-Einstellungen für euern Server

Viele von euch werden den Apache und den nginx Webserver kennen. Aber es gibt noch viele mehr (viele davon ebenfalls Open Source), die ihr verwenden könnt. Aber vergesst nicht den Mailserver, den Load-Balancer, den Datenbankserver usw. bei der SSL-Konfiguration. Alle verwenden hierbei unterschiedliche Konfigurationsdateien und selbst die Liste der verwendeten Chiffren hat oft eine andere Syntax. Glücklicherweise gibt es ein sehr praktisches Tool dass euch dabei helfen kann, den moz://a SSL Configuration Generator. Hier könnt ihr auswählen, für welche „Server Software“ ihr eine Konfiguration benötigt und welche „Mozilla Configuration“ ihr verwenden möchtet. Hier werdet ihr vermutlich mit “ Intermediate“ am besten bedient sein:

Mozilla SSL Configuration Generator

Ihr könnt optional auch noch die Versionsnummern des Servers und von OpenSSL einstellen. Das kann sinnvoll sein, wennn euer Hoster noch immer den Apache 2.2 Webserver oder andere veraltete Software verwendet. Im Abschnitt “ Miscellaneous“ findet ihr die „HTTP Strict Transport Security“ (HSTS) Einstellung. Mit dieser solltet ihr vorsichtig umgehen, denn im schlimmsten Fall sind dann andere Subdomains nicht mehr aufrufbar, wenn diese kein SSL-Verwenden (was sie natürlich alle tun sollten).

Auch wenn euch also dieses Tool auf einfache Weise eine passende Konfiguration liefert, solltet ihr diese nicht einfach blind per Copy/Paste komplett in eure Konfiguration übernehmen. Am besten prüft ihr während der Übernahme der Konfiguration zwischendurch den neuen Stand mit dem SSL Labs Test, bis ihr schrittweise die Konfiguration gefunden habt, die das für euch beste Verhältnis von hoher Sicherheit und bester Gerätekompatibilität abbildet.

Fazit

Die Umstellung einer WordPress-Installation ist seit WordPress 5.7 noch einfacher geworden, aber das Einstellgen einer sicheren Server-Konfiguration ist nicht eher schwer. Mit den richtigen Tools kann auch auch das sehr einfach umgesetzt werden.

Die erste Seite vom Gravity Forms Fortschrittsbalken ausschließen

Wenn wir komplexere Formulare erstellen, dann verwenden wir hierfür oft das Plugin Gravity Forms. In einem Projekt wollten wir ein Formular umsetzen, das mehrere Schritte hatte, jeder davon mit einer einfachen Radio-Auswahl. Auf den Seiten sollte sichtbar sein, welcher Schritt gerade bearbeitet wird und wie weit der Gesamtfortschritt im Formular ist. Das kann ziemlich einfach mit dem „Seite“ Feld umgesetzt werden, die einzelnen Felder werden dann auf diese Seiten eingefügt. Wenn man ein solches Formular dann in einer Seite oder einen Beitrag einfügt, sieht das Ergebnis etwa wie folgt aus:

Das Formular mit der „Schritt 1 von 3“ Fortschrittsanzeige

In dem Screenshot könnt ihr auch schon das Problem sehen. Die erste Seite enthält keine Formularfelder, sondern nur ein „HTML“ Feld mit einem Einleitungstext. Aber das es eben auch eine Seite des Formulars ist, zählt der Fortschrittsbalken diese Seite mit.

Bei Seite zwei starten

Um das zu korrigieren, müssen wir zwei Dinge tun. Als erstes wollen wir die Fortschrittsanzeige auf der ersten Seite entfernen. Aber dann würde es mit „Schritt 2 von 3“ statt „Schritt 1 von 2“ anfangen. Wir müssen also auch die Anzahl der Schritte auf allen folgenden Seiten anpassen.

Weiterlesen →

Den Titel eines Beitrags oder einer Seite in den Inhalt einfügen

WordPress 5.8 wird in etwas über zwei Wochen veröffentlicht. Das vermutlich größte neue Feature ist die Einführung von Full-Site-Eiditing (FSE). Das ermöglicht es euch, die gesamte Website mit dem Block-Editor zu bearbeiten. Allerdings funktioniert das nur, wenn ihr auch ein Theme verwendet, das für FSE vorbereitet wurde. Es gibt aber ein paar neue Blöcke, die ich auch mit eurem aktuellen Theme verwendetn könnt. In einem neuen Projekt, an dem ich kürzlich gearbeitet habe, konnte ich einen dieser neuen Blöcke einsetzen (mit dem Gutenberg Plugin).

Der „Beitragstitel“ („Post Title“) Block

Einer dieser neuen Blöcke erlaubt es euch, den Beitragstitel in den Inhalt einzufügen. Obwohl er „Beitragstitel“ heißt, funktioniert er auch mit Seiten und allen anderen Inhaltstypen.

Nehmen wir also an, ihr möchtet den Beitragstitel in einem Spalten-Block, neben einem Medien-Block einfügen, dann fügt ihn einfach an der passenden Stelle ein:

Weiterlesen →

Das Dutzend ist voll!

Es ist mal wieder soweit. Ein Jahr geht zu Ende und mein Blog hat Geburtstag. Nur ein Jahr? Das Zeitgefühl in den vergangenen 12 Monaten ist ja sicher nicht nur bei mir durcheinander gekommen. Auch wenn sich vieles geändert hat war das regelmäßige Bloggen einer der wenigen Konstanten im zurückliegenden Jahr.

Weiterhin aktiv im #projekt26

Auch dieses Jahr hat Torsten mit dem #projekt26 weitergemacht und selbstverständlich bin ich auch wieder mit den Hashtags #project26 und #projekt26 in englischer und deutscher Sprache wieder dabei. Einen Adventskalender gab es im letzten Jahr nicht, aber dafür konnte ich alle zwei Wochen einen neuen Beitrag in beiden Sprachen veröffentlichen.

Aufräumen im Blog

Bisher habe ich noch nicht darüber geschrieben, aber über die Weihnachtsfeiertage habe ich meinen gesamten Blog neu aufgesetzt. Den Prozess möchte ich noch beschreiben und euch einen Überblick geben, was sich unter der Haube getan hat. Der Blog ist aber unter anderem seit Jahresanfang sehr viel datenschutzfreundlicher geworden, da ich alle externen Analyse-Tools raufgeworfen habe. Aber dennoch möchte ich euch natürlich auch nicht die Zahlen vorenthalten.

Top3 im letzten Jahr

  1. Formatierten Quellcode mit Syntaxhervorhebung in Word einfügen
  2. Direkte Downloads mit dem „download“ Attribute
  3. Fehler beim Senden in Contact Form 7 debuggen

Der ehemalige Platz 3 (der im Juni 2018 sogar noch Platz 2 belegt hatte) ist aus der Top-Liste rauf gerutscht. Stattdessen hat es ein Beitrag auf Platz zwei geschafft, der ein nettes HTML5 Feature beschreibt. Der Beitrag ist schon aus dem März 2017, aber anscheinend ist das Thema erst jetzt für viele interessanter geworden. Oder aber er wird nun besser gefunden.

Es gab insgesamt 27 neue Kommentare, 8 davon von mir selbst. Also auch dieses Mal waren es sehr viel weniger als erhofft. Von den 52 im Jahr sind wir, seid ihr, noch etwas entfernt 😉

Weitere Arbeiten am Blog

Die Neuerungen am Blog sind über die Weihnachtsfeiertage noch nicht ganz fertig geworden. Daher dürft ich euch über noch ein paar Neuigkeiten freuen. Und sobald diese abgeschlossen sind, werde ich natürlich ausführlich davon berichten. Eventuell sogar in mehreren Beiträgen.

Fazit

Das Bloggen macht mir auch nach zwölf Jahren noch weiterhin Spaß und ich werde dran bleiben. In einem Jahr kommt dieses kleine Projekt dann ins Teenager-Alter und wer weiß, welche Veränderungen sich damit einstellen werden.

Ach ja, es ist ja gerade wieder Fußball EM. Auch wenn ich ja nicht der größte Fußball Fan bin, schaue ich doch zumindest ein paar Spiele, auch wenn ich noch kein Spiel unserer Mannschaft live gesehen habe 🙈

Aber wie schon in anderen Jahren gibt es damit passend dazu wieder ein Video zum Schluss:

Es ist zwar kein aktuelles Video und vielleicht finden es auch manche unpassend, weil es ein „politisches Statement“ ist, aber für mich ist es ein Zeichen der Solidarität im diesem Pride-Month ❤

Ursache für hohe LOAD bei gleichzeitiger geringer CPU-Last finden

Diese Woche gab es auf einem Server das Phänomen, dass die LOAD bei über 2500% (ca. 150 bei 6 CPUs), aber die CPU Auslastung lag nur bei etwa 5%, was also darauf hindeutete, dass due CPU-Last nicht nicht der Grund für die hohe LOAD sein konnte:

top - 15:53:42 up 7 days, 10:01,  2 users,  load average: 159,47, 149,89, 160,80
Tasks: 540 total,   1 running, 468 sleeping,   0 stopped,   0 zombie
%Cpu(s):  2,0 us,  2,0 sy,  0,0 ni,  0,0 id, 95,6 wa,  0,0 hi,  0,4 si,  0,0 st
KiB Mem : 12296516 total,   607940 free,  9710388 used,  1978188 buff/cache
KiB Swap: 12578812 total,  7439140 free,  5139672 used.  1752884 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 5564 user@xyz  20   0   99712  36384   5308 D   4,6  0,3   0:00.22 spamassassin
 1539 root      20   0 2394080  55984   7412 S   2,0  0,5   1365:51 fail2ban-server
 4561 root      20   0   33784   6168   3700 S   1,3  0,1   0:02.39 htop
    8 root      20   0       0      0      0 I   0,7  0,0  11:17.44 rcu_sched
...

Festplattenzugriffe als mögliche Ursache

Neben einer hohen CPU-Auslastung kann auch eine hohe IO-Last, als viele lesende oder schreibende Zugriffe auf die Festplatte zu einer hohen LOAD führen.

Weiterlesen →

Zwei typische Probleme nach dem Wechsel auf eine Multisite beheben

Ich habe schon einige Beiträge zum Thema Multisite geschrieben. Aber zwei Probleme, die dabei auftreten können, habe ich bisher noch nicht behandelt.

Vergessen, die www-Subdomain umzuleiten

Wenn ihr eine WordPress-Installation in eine Multisite konvertiert, dann könnt ihr entweder Subdomains oder Subfolder verwenden. Wenn ich euch für Subdomains entscheidet, dann wird jeder Seite auf eine Subdomain gematcht. Und falls eure Installation nicht die www-Subdomain für die Hauptseite verwendet, dann bedeutet dies, dass auch die www-Subdomain als separate Seite angesehen wird und ihr bekommt dann vermutlich die folgende Fehlermeldung:

Weiterlesen →

Wieso ihr Theme-Code nicht in Plugins packen solltet

I warte regelmäßig etwa 40 WordPress Websites. Beim Aktualisieren von Plugins und Themes kann es manchmal zu Problemen kommen, das Aktualisieren des Core ist in der Regel kein Problem. Nicht so diese Woche bei einer Seite, die ich zu ersten Mal gewartet habe.

Nach dem Core-Update erhielt ich den „Es gab einen kritischen Fehler auf deiner Website“ Dialog und das Backend war defekt. Glücklicherweise hatte ich kurz zuvor ein Backup angelegt. Da die Seite aber nicht auf unseren Servern gehostet war und ich per FTP einige Dateien nicht sehen konnte, musste ich die Web-FTP Funktion des Hosters nutzen, um mir das Backup runterladen zu können. Mit einer lokalen Kopie der Seite konnte ich dann mit dem Debuggen beginnen.

Anpassen von Theme-Icons

Schauen wir uns erst einmal den Code an, der zu dem Problem geführt hat. Nach dem Aktivieren des Debug-Modus konnte ich folgende Fehlermeldung finden:

Weiterlesen →