Kategorie: Allgemein

Wie verhindert man, dass ein WordPress-Theme vom benutzer aktualisiert wird?

Es kann durchaus vorkommen, dass man ordentlich gearbeitet hat, ein Child-Theme angelegt hat, und trotzdem zerschießen Updates des Parents-Themes immer wieder das Layout.

Wenn der Entwickler des Parent-Themes dann auf Hinweise, dass er gepfuscht hat, unwillig reagiert, bleibt manchmal nur die Möglichkeit, die Updates für das Parent-Theme zu deaktivieren.

Bis PHP 7.X ging das in der functions.php des Child-Themes mit dem Codeschnipsel

Seit PHP 8 steht aber create_function() nicht mehr zur Verfügung.

Hier hilft dann

Borlabs Cookies zeigt „Ihre Website verwendet keine SSL-Zertifizierung.“ an, obwohl SSL aktiviert ist

Wenn Borlabs Cookies „Ihre Website verwendet keine SSL-Zertifizierung.“ anzeigt, obwohl SSL aktiviert ist, kann das einen relativen einfachen Grund haben, der – ebenso wie das Problem der WPML typischen Konstante “ICL_LANGUAGE_CODE” – trotzdem mehr als ärgerlich ist.

Borlabs Cookies wertet interessanterweise offensichtlich die Konstante WP_CONTENT_URL aus, um zu bestimmen, ob SSL aktiv ist bzw. die Seite über https ausgeliefert wird. Das Setzen von
define( 'WP_CONTENT_URL', '/wp-content');
ist jedoch alles andere als unüblich; insbesondere wenn eine Seite unter einer Entwicklungsdomain gebaut wird und später umzieht. Mal davon abgesehen, dass die Media-Pfade daduch deutlich kürzer werden.
Es reicht also, die Definition in der wp-config.php auszukommentieren.

Es ist natürlich so, dass eine URL, in diesem Fall die WP_CONTENT_URL, aus Protokoll, Host und Pfad bestehen sollte. Gelebt wird es bzgl. WP_CONTENT_URL jedoch meist anders.

Sollte das Content-Verzeichnis tatsächlich nicht in /wp-content/ liegen, ist WP_CONTENT_URL ggfs. mit Protokoll und Domain zu definieren.

Borlabs Cookie meldet den Fehler „Ihre Sprachkonfiguration ist defekt.“

Sofern man WPML für die Mehrsprachigkeit auf einer WordPress-Instanz im Einsatz hatte und WPML deinstalliert, kann es durchaus sein, dass man im eigenen Code die für WPML typische Konstante „ICL_LANGUAGE_CODE“ abfragt und auch selbst setzt, falls sie nicht vorhanden ist, um den eigenen Code unabhängig von WPML lauffähig zu halten.

Sofern man „ICL_LANGUAGE_CODE“ im eigenen Code gesetzt hat und WPML nicht mehr im Einsatz ist, stehen die Chancen sehr gut, dass Borlabs Cookie den Dienst – teilweise – verweigert.

Der Grund dafür ist, dass Borlabs Cookie bei Vorhandensein der Konstante „ICL_LANGUAGE_CODE“ davon ausgeht, dass WPML installiert ist.

Bei Einsatz bspw. in der functions.php des (Child-)Themes erscheint dann vermutlich im Backend die Fehlermedlung „Ihre Sprachkonfiguration ist defekt. Deaktivieren Sie alle Plugins außer Borlabs Cookie, bis diese Meldung verschwindet. Wenn Sie das Plugin gefunden haben, das diesen Fehler verursacht, überprüfen Sie, ob ein Update verfügbar ist, und installieren Sie es.“.
Darüber hinaus lassen sich vermutlich keine Cookie im Backend anlegen. Stattdessen gibt es die Fehlermeldung „Die ausgewählte Cookie Gruppe existiert nicht.“.

Die Lösung ist realtiv einfach. Statt „ICL_LANGUAGE_CODE“ setzt man eine eigene Sprachkonstante und gleicht diese nur bei Vorhandensein mit „ICL_LANGUAGE_CODE“ ab.

Sofern man „ICL_LANGUAGE_CODE“ in den Template-Files einsetzt, gibt es vermutlich keine Fehlermeldung. Allerdings kann es passieren, dass weder die Cookie-Gruppen in der Cookie Box angezeigt werden, noch dass die optischen Anpassungen der Cookie Box greifen.

Javascript-Debugging unter WordPress mit console.log beim Staging / bei Verwendung einer Testumgebung

Die Javascript-Funktion console.log() ist beim Debugging quasi unumgänglich. Allerdings möchte man in Produktivumgebungen keine Debug-Meldungen sehen.

Man kann natürlich beim Staging aus der Entwicklungs- oder Test-Umgebung jedes mal alle Aufrufe von console.log() auskommentieren oder löschen. Sofern eine Website allerdings einer ständigen Eeiterentwicklung unterliegt, ist das eher mühsam. Außerdem ist jeder manuelle Schritt beim Staging eine potentielle Fehlerquelle.

Eleganter ist es, dabei auf den Debug-Status von WordPress zurückzugreifen.

In Entwicklungs- oder Test-Umgebungen werden sich ziemlich sicher in der wp-config.php die Zeilen

finden.
Während in Live- oder Produktivumgebungen hoffentlich die Zeilen

vorhanden sind.

Man ergänzt jetzt diesen Abschnitt einfach um eine weitere Konstante:

Die Konstante WP_DEBUG_JS lässt sich beim Enqueuing des Javascripts im (Child-)Theme oder Plugin über die Lokalisierung mit übergeben:

In der Javascript-Datei muss dann nur noch console.log() in einer eigenen Funktion gekapselt werden

und einmalig „console.log( … )“ durch „stablew_eblog( … )“ ersetzt werden.


Exkurs: Relative URLs für Medien für einfacheres Migrieren von der Test- in die Live-Umgebung

Wenn man schon an der wp-config.php dran ist, kann man auch gleich noch dafür Sorge tragen, dass Medien mit relativen URLs verarbeitet werden:

Mozilla Firefox hat Verbindungsprobleme und lastet die CPU aus

In Version 95 und evtl. auch früheren Versionen verbindet sich Mozilla in einigen Konstellationen nicht mehr mit Webservern.

Das Problem ist wohl ein Fehler im HTTP/-Protokollstapel, der vermutlich zeitnah behoben wird. Bis dahin hilft es, HTTP/3 zu deaktivieren:

In der Adresszeile

eingeben.
Die evtl. auftretende Warnmeldung bestätigen und in der eingeblendeten Suchzeile

eingeben und [RETURN] drücken.
Im Suchergebnis (es sollte nur eine Zeile geben) dann auf den Button rechts mit dem Pfeil nach links und rechts klicken, so dass beim Wert in der mitte „false“ steht.

Nunmehr sollte Firefox wieder wie gewohnt funktionieren.

Wie kann ich aus einem WordPress-Plugin heraus auf eine andere Datenbank zugreifen

Gelegentlich möchte man auf eine andere Datenbank zugreifen als auf die, auf der WordPress läuft.

Glücklicherweise kann man sehr leicht eine neue Instanz von wpdb anlegen:

Wie kann man bei DomainFactory auf die Datenbank in einem anderen Auftrag per PHP zugreifen?

Bei vielen Hostern kann man auf alle Datenbanken des Hosters, so man die Zugangsdaten hat, zugreifen. Bei einigen Hostern kann man sogar externen Zugriff auf die Datenbanken gestatten.
Bei DomainFactory geht das leider nicht ohne Weiteres. Auch wenn eine Konfigurierbarkeit der Zugriffsmöglichkeiten wünschenswert wäre, muss man doch auf die etwas unhandliche Variante des SSH-Tunnels zurückgreifen.

Sofern man auf der Konsole per SSH arbeitet, ist das nicht weiter schwierig. Auf Server A einfach

eingeben, dass passende Kennwort für den SSH-Benutzer auf Server B eingeben und fertig.

Wenn man jetzt auch gleich noch den Datenbankzugriff auf eine MySql5-DB auf Server B haben möchte, sieht das dann so aus:

Anschließend lässt sich über den Host 127.0.0.1 auf Port 3307 auf die Datenbanken auf Server B zugreifen.

Wenn man nun das Ganze in PHP abbilden möchte, lernt man schnell, dass man zwar mit shell_exec() die SSH-Verbindung anstoßen kann, aber eben nicht das Kennwort übergeben kann.

Die Lösung ist eigentlich ganz einfach. Man generiert entsprechende Schlüssel und anschließend funktioniert der Zugriff ohne Eingabe eines Kennwortes.

Folgendes ist zu tun.

Auf Server A (von dem aus auf Server B zugegriffen werden soll) auf der Konsole:

eingeben und alle Abfragen mit [RETURN] bestätigen.
Es werden dann im Verzeichnis .ssh zwei Dateien abgelegt. Der private Schlüssel id_rsa und der öffentliche Schlüssel id_rsa.pub.

Die Datei id_rsa.pub muss anschließend auf den Server B in das Verzeichnis .ssh kopiert werden und anschließend in authorized_keys umbenannt werden. Sollte die Datei authorized_keys schon bestehen, so ist die id_rsa.pub mit der authorized_keys zu konkatenieren.
Anschließend muss das Verzeichnis .ssh noch auf die Rechte 0700 und die Datei authorized_keys auf die Rechte 0600 gesetzt werden.

Ein Test auf der Konsole von Server A mit

sollte nunmehr eine SSH-Vergbindung mit Server B ohne Rückfrage nach einem Passwort aufbauen.

Sofern das alles funktioniert, kann man nunmehr per PHP den SSH-Tunnel aufbauen und sich dann mit der Datenbank verbinden:

Das „2>&1“ kann man weglassen. Es sorgt lediglich dafür, dass in Verbindung mit der Option -v die Ausgaben der Konsole tatsächlich zurückgegeben werden.
Bei der mysqli-Verbindung muss zwingend 127.0.0.1 statt localhost angegeben werden, da ansonsten versucht wird, eine Socket-Verbindung statt einer Verbindung über Port 3307 aufzubauen, was natürlich nicht funktioniert.

PHP-Codeschnipsel, die man immer mal wieder braucht

Datumsumwandlung ziwschen MySQL- und deutschem Format

MySQL nach deutsch

Deutsch nach MySQL