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 →

Erstellen von SVG-Sprites in Kombination mit wordpress/scripts

In einem meiner Adventskalender 2016 Beiträgen habe ich darüber geschrieben, wie man ein SVG-Sprite mit SVG-Symbolen mit Hilfe eines Gulp-Scripts erstellen kann. Nachdem Gutenberg ein essentieller Bestandteil von WordPress geworden ist, habe ich das Paket wordpress/scripts zuletzt sehr häufig verwendet. Nun musste ich vor Kurzem wieder in einem Projekt einen solchen SVG-Sprite erstellen, aber mit gefiel es nicht, hierfür noch zusätzlich Gulp verwenden zu müssen, und so habe ich mich auf die Suche nach einer Alternativen gemacht, die stattdessen wordpress/scripts verwendet.

SVG Spritemap Webpack Plugin

Nach einer kurzen Suche bin ich auf svg-spritemap-webpack-plugin gestoßen, was wirklich sehr vielversprechend aussah. Es verwendet webpack (was in wordpress/scripts enthalten ist) und es wird wie folgt verwendet:

Weiterlesen →

Download-Button für Audio und Video Blöcke ausblenden

Letzte Woche wurde ich im Hilfe bei einem Website-Projekt gebeten. Auf der Seite gab es einige Einbindungen von Audio-Dateien in die Seite. Dieses tolle Feature von WordPress ermöglicht es seht einfach Mediendateien in die Seite einzubetten. Aber manche mögen es nicht, dass man die Dateien in einigen Browsern dann so einfach runterladen kann.

Der „Herunterladen“-Button in Chrome

Im Chrome browser ist es noch einfacher als in anderen Browsern. Dort wird standardmäßig bei jedem Audio und Video Tag ein „Herunterladen“-Button in den Optionen (den drei Punkten neben den Steuerelementen) angeboten. In diesem speziellen Projekt gab es nun den Wunsch diesen Button zu entfernen, um es zumindest etwas schwerer zu machen, die Dateien herunterzuladen und niemanden dazu zu „ermutigen“.

Ausblenden des Buttons mit dem „controlList“ Attribut

Chrome ist der einzige Browser (der mir bekannt ist), der einen solchen Button hat, aber glücklicherweise gibt es auch einen einfach Weg, ihn zu deaktivieren: das controlList Attribut. Das Attribute kann unterschiedliche/mehrere Werte haben, und einer davon ist nodownload, der den Button ausblendet.

Nun könnte man auf die Idee kommen, dieses Attribut einfach über den „Als HTML bearbeiten“ Modus hinzuzufügen, aber sobald man dann über „Visuell bearbeiten“ wieder zurück wechselt ist der Block defekt und man kann nur auswählen den Block zu reparieren (was das Attribut wieder entfernt), oder aber den Block in HTML zu konvertieren.

Einen Feature-Request für Gutenberg erstellen

Da dieses Problem sicher nicht neu ist habe ich mich auf die Suche nach existierenden Tickets gemacht und zwei gefunden. Im ersten wurde darum gebeten einen Schalter einzubauen, der den Button ausblendet. Dieses Ticket verwies auf ein zweites Ticket, in dem generell darüber diskutiert wurde, den Button zu deaktivieren, ebenfalls mit einem Schalter.

In diesem zweiten Ticket wurden gute Argumente aufgeführt, wie ein solcher Schalter nicht gut wäre. Da nur der Chrome Browser diesen Button anzeigt würde auch nur hier der Schalter „funktioniere“. Er würde aber auch hier nicht wirklich funktionieren. Denn auch das Attribut verhindert nicht den Download.

Wenn Audio oder Video-Dateien aus der Mediathek über einen Audio oder Video HTML Tag eingebunden werden, dann können sie auch runtergeladen werden. Sie werden im Grunde auch automatisch „runtergeladen“, sobald sie abgespielt werden.

Den Button still mit einem Plugin entfernen

Wenn ihr den Download also nicht wirklich verhindern könnte, aber wenigsten den Button entfernen möchtet, dann könnt ihr einen Filter verwenden, der beim Rendern des Block das Attribut hinzufügt. Das würde in der einfachsten Form wie folgt aussehen:

function hide_download_buttons_on_embeds_render_block( $block_content, $block ) {
	if ( 'core/audio' === $block['blockName'] ) {
		$block_content = str_replace(
			'<audio ',
			'<audio controlsList="nodownload" ',
			$block_content
		);
	}
	if ( 'core/video' === $block['blockName'] ) {
		$block_content = str_replace(
			'<video ',
			'<video controlsList="nodownload" ',
			$block_content
		);
	}

	return $block_content;
}
add_filter( 'render_block', 'hide_download_buttons_on_embeds_render_block', 10, 2 );

Ihr müsst eventuell etwas mehr Code schreiben, falls der HTML Tag in eurer WordPress-Installation bereits das Attribut mit anderen Werten hat.

Fazit

Obwohl es nicht möglich ist den Download von Audio und Video-Dateien aus der Mediathek in dieser Weise zu verhindern, könnte es für euch vielleicht dennoch interessant sein.

Wenn ihr hingegeben explizit wollt, dass Downloads möglich sind – beispielsweise für eine Episode eures Podcasts – dann solltet ihr stattdessen aktiv einen Download-Button über den „Datei“ Block hinzufügen. Damit habt ihr nicht nur einen Button, der konsistent in allen Browsern gleich aussieht, es macht den Download auch einfacher, intuitiver und barrierefreier möglich.

Wie immer findet ihr den Code zu diesem Blogbeitrag als GIST, wo ihr es auch als ZIP-Datei runterladen und dann als Plugin installieren könnt.

Barrierefreiheit ist kein Feature

Der jährliche Global Accessibility Awareness Day ist erst in ein paar Wochen – dieses Jahr feiern wir ihn am 20. Mai 2021 – aber einige neuerliche Diskussionen haben mich dazu gebracht heute zu diesem Thema zu schreiben.

Es ist nicht nur eine Zahl, es sind Menschen!

In einer Diskussion ging es vor Kurzem um die Luca App zur Corona-Kontaktnachverfolgung und mal wieder darum wie wichtig es ist, dass eine solche App barrierefrei sein muss. Ich kann euch gar nicht sagen, wie oft ich Aussagen wie diese schon lesen musste:

Weiterlesen →

WordPress Datenbank reparieren

Anfang der Woche konnte eine Website nicht mehr aufgerufen werden. Der Fehler wies darauf hin, dass die Verbindung zur Datenbank nicht möglich war. Dieser Fehler tritt eigentlich auf, wenn die Zugangsdaten falsch sind. Aber diese wurden nicht verändert und auch in der Konfiguration waren sie noch immer korrekt. Nach der Aktivierung des WPD_EBUG Modus konnte ich dann den Fehler finden. Die Datenbank war korrupt/defekt.

Reparieren der Datenbank mit der WP-CLI

Mein erster Ansatz war die Verwendung der WP-CLI. Hier gibt es eine Option, mit der man die Tabellen einer Datenbank optimieren kann. Hierdurch können auch manchmal Fehler behoben werden:

wp db optimize

Dieses Kommando wird vor allem dann verwendet, wenn sehr viele Zeilen gelöscht wurden, sich dir Größe der Tabelle aber nicht verringert. Es korrigiert aber nicht immer Fehler in Tabellen. Glücklicherweise gibt es ein anderes Kommando für diese Aufgabe:

Weiterlesen →

Kommentare von privaten Beiträgen im Kommentare Widget anzeigen

Im September 2017 hatte ich einen Blogbeitrag dazu geschrieben, wie man Schlagwörter von privaten Beiträgen in der Tag-Cloud anzeigen lassen kann. Vor drei Wochen wurde in einem Kommentar gefragt ob etwas ähnliches auch für Kommentare aus privaten Beiträgen im Kommentare-Widget möglich sei. In diesem Beitrag möchte ich euch zu dieser Fragestellung eine kleine Lösung präsentieren.

Argumente für die Kommentare-Query filtern

Standardmäßig zeigt das Kommentare-Widget nur die letzten fünf Kommentare von öffentlichen Beiträgen an. Die Argumente der Query sehen wie folgt aus:

Weiterlesen →

Detailliert Download-Statistiken für Plugins abrufen

Vor kurzem habe ich die Download-Zahlen für ein Plugin im offiziellen WordPress.org Plugin-Directory nachgeschlagen. Unter „Erweiterte Ansicht“ eines jeden Plugins findet man eine Grafik mit den „Downloads pro Tag“ und den Zahlen aus den letzten 267 Tagen. Sehen wir uns diesen Graphen für das beliebte Antispam Bee Plugin an:

Downloads pro Tag für Antispam Bee

Wenn ihr mit der Maus über den Graphen fahrt, dann findet ihr zu jedem Tag die entsprechenden Downloads von diesem Tag. Ich wollte aber die Summe der Downloads aus den letzten paar Wochen nach der letzten Veröffentlichung wissen (die Spitze im Graphen) und diese manuell niederzuschreiben und zusammenzurechnen wäre dann doch ein wenig zu viel Arbeit gewesen. Wie komme ich also leichter an diese Zahlen heran?

Weiterlesen →