WordPress Theme: Menüs registrieren und ausgeben

In WordPress lassen sich sehr einfach eigene Menüs in einem WordPress Theme registrieren und an beliebiger Stelle im Theme (z.B. in Header oder Footer) ausgeben. Die Funktionen register_nav_menus() und wp_nav_menu() sind die bequeme Basis dafür.

WordPress Menü registrieren

Mit folgendem Snippet in der functions.php können neue Menüs (footer-menu und header-menu) in einem WordPress Theme registriert werden. In dem PHP Array array(Menu 1, Menu 2, …, Menu n) kann dies sehr schnell um sehr viele Menüs ergänzt werden.

WordPress Menü ausgeben

Die Ausgabe der Menüs erfolgt über die Funktion wp_nav_menu() an der Position, wo es ausgegeben werden soll, z.B. in den Template-Dateien footer.php oder header.php.

Quellen und Links

WordPress auf HTTPS (SSL-Verschlüsselung) umstellen

Sicher ist sicher. Daher rät sich eine Umstellung aller WordPress Webseiten auf die SSL-Verschlüsselung (möglichst TLS 1.2) über das verschlüsselte Protokoll HTTPS. Durch dieses Verfahren werden Daten verschlüsselt und sicher (durch Datenintegrität und Authentifizierung) übertragen. Ein nicht zu unterschätzender Fakt: Auch Suchmaschinen bevorzugen diese Verschlüsselung bei ihrem Ranking.

Vorbereitung

Vor der Umstellung benötigt man ein digitales SSL Zertifikat. Ist dieses Zertifikat auf dem Server eingebunden und hinterlegt (diese Thema ist einen extra Beitrag wert), kann die Webseite auf HTTPS (HyperText Transfer Protocol Secure) umgestellt werden.

Ein Tipp für ein freies und offenes Zertifikat ist Let’s Encrypt, was sich derzeit in der Beta-Phase befindet und dennoch bereits über eine Million Zertifikate afür über 2,4 Millionen Domains ausgestellt hat.

Let’s Encrypt is a free, automated, and open certificate authority brought to you by the Internet Security Research Group (ISRG).

WordPress auf HTTPS umstellen

Folgende Schritte (die noch verfeinert und ausgebaut werden können) sollten bei der Umstellung von WordPress auf HTTPS befolgt werden.

1) URLs und interne Links umstellen

Zum Umstellen aller URLs und internen Links, die auf HTTPs zugreifen sollen, können die Datenbank-Einträge angepasst werden. Dies ist auch manuell in den einzelnen Beiträgen, Widgets und Menüs sowie in den Einstellungen (im Backend unter Einstellungen > Allgemein: WordPress- und Website-Adresse) möglich.

Über die MySQL-Datenbank kann folgender SQL-Code verwendet werden. Vorsicht! Vorab ein Backup erstellen.

Hinweis: Bei Multisite-Installationen müssen zusätzlich alle Unterseiten mit angepasst werden.

Bei internen Bilddateien, z.B. im Theme, Shortcodes oder Widgets, empfiehlt sich die Umstellung der Pfade ohne Protokoll (also ohne http:// oder https://) anzugeben, was dann folgende Struktur aufweist:

2) HTTPs erzwingen und weiterleiten

Nach der Umstellung auf HTTPS ist das anschließende Erzwingen dieses Protokolls sehr wichtig, da ansonsten die Webseite ebenfalls noch über das unverschlüsselte Protokoll HTTP erreicht werden kann. Gleichfalls würde bei den Suchmaschinen ein doppelter Inhalte (zwei URLs mit selben Inhalte) erzeugt werden.

3) URLs und Links prüfen

Wichtig ist das Prüfen aller Links und neuen URLs! Werden alle Seiten korrekt und verschlüsselt übertragen und ist das kleine grüne Schloss in der Browser-Adresszeile zu sehen? Wenn nicht, sind meist nicht alle Dateien auf HTTPS umgestellt.

Abschließend sollten die Suchmaschinen einen Hinweis auf die Umstellung auf die neuen URLs erhalten. Dies kann bspw. über die sitemap.xml oder die Webmastertools passieren.

Google empfiehlt zusätzlich:

Verwenden Sie einen Webserver, der HTTP Strict Transport Security, kurz HSTS, unterstützt, und vergewissern Sie sich, dass diese Option aktiviert ist. HSTS weist den Browser an, Seiten automatisch über HTTPS anzufordern, auch wenn der Nutzer http in die Adressleiste des Browsers eingibt. Gleichzeitig wird Google aufgefordert, sichere URLs in den Suchergebnissen anzuzeigen. Durch diese Maßnahmen wird das Risiko minimiert, dass Nutzer unsichere Inhalte erhalten.

Tipp: Webhoster all-inkl.com unterstützt Let’s Encrypt-Zertifikate

Alle Tarife mit SSL-Erweiterung unterstützen ab sofort die Einbindung von kostenlosen „Let’s Encrypt“-Zertifikaten. Hierfür gibt es im Punkt „Domain bzw. Subdomain bearbeiten“ unter „SSL Schutz: bearbeiten“ einen weiteren Menüpunkt „Let’s Encrypt“. Dort lässt sich mit einem einzigen Klick das Zertifikat für die jeweilige Sub-/Domain beziehen, welches vom System etwa 30 Tage vor dem Ablaufen automatisch erneuert wird. Bitte beachten Sie, dass sich das „Let’s encrypt“-Projekt derzeit noch in der offenen Testphase befindet.
08.04.2016 08:00 – Unterstützung von Let’s Encrypt-Zertifikaten

Quellen und Links

WordPress Login wp-login.php schützen und verstecken

Um sich mit WordPress vor hartnäckigen Brute Force Attacks zu schützen, ist es eine effektive Lösung das WordPress-Login und dem direkten Zugang unter wp-login.php zu verstecken.

Problem:

Standardmäßig findet sich das WordPress Login bei jeder normalen Installation unter domain.tld/wp-login.php. Dies ist für einen Angreifer natürlich ein gefundenes Eingangstor und sie müssen sich lediglich um den Benutzernamen (kann relativ einfach gefunden werden) und das Passwort (mit viel Rechenleistungen ist auch dies knackbar) kümmern. Etwas sportlich formuliert, steht dann das Backend offen.

Lösung:

Um jetzt das Eingangstor zu verlegen, könnt ihr das kostenfreie WordPress Plugin WPS Hide Login verwenden. Dieses unterbindet den direkten Zugriff auf den /wp-admin/ und die Login-Datei wp-login.php und leitet auf eine gewünschte Alterativadresse um. Dazu könnt ihr im Backend unter Einstellungen > Allgemein einen neuen Pfad angeben, z.B. domain.tld/mein-backend-zugang/.

Fertig und vor allem sehr schnell erledigt!

Sehr praktisch: Das Plugin WPS Hide Login ist auch Multiuser-tauglich und somit auch für größere WordPress-Netzwerke zu verwenden.

Wichtig:

  1. Ihr solltet euch unbedingt den neuen Pfad merken, ansonsten findet ihr selbst den Weg ins Backend nicht mehr. Alternativ könnt ihr natürlich in der Datenbank nachschauen.
  2. Bei einer ersten Installation solltet ihr ggf. den Cache ausreichen leeren (z.B. beim W3 Total Cache), um auch den neuen Pfad zum WordPress Login zu erreichen.
  3. Nicht zu unterschätzen: Neben diesem Plugin solltet ihr weitere Sicherheitsmaßnahmen (allen voran sichere Passwörter!) verwenden.

Quellen und Links

WordPress: Zufallszahl mit wp_rand()

Manchmal muss der Zufall helfen. Im WordPress Core hilft die Funktion wp_rand() für eine zufällige, ganze Zahl. Diese einfache und dennoch manchmal nützliche Funktion generierte aus einem minimalen und maximalen Wert (einem beschränkten Intervall) eine Zufallszahl.

Beispiel: Ausgabe einer Zufallszahl zwischen 1 und 99

Dieses Code-Snippet gibt bei jedem Aufruf eine Zahl zwischen 1 und 99 aus. Minimal- und Maximalwert können dabei beliebig verändert werden. Der Standardwert fürs Minimum ist 0, fürs Maximum 4294967295. Der Rückgabewert ist eine ganze Zahl (integer).

Wer mehr dazu wissen möchte, liest im WordPress Codex nach.

PHP Warning: Illegal String Offset Error

Nach der Umstellung von PHP 5.4 und höher immer mal wieder eine Fehlerursache: PHP Warning: Illegal string offset.

Beispiel:

PHP Fehlerausgabe: Warning: Illegal string offset in [‚index‘] in www/root/file.php:28.

Lösung:

Erst das Array prüfen und dann den Index abfragen. Fertig!

Weitere Lösungen, auch speziell für WordPress, sind unter Fix PHP Illegal String Offset Error zu finden.

 

WordPress: E-Mail, wenn eine Beitrag aktualisiert wurde

Wer ihr mit mehreren Mitarbeitern an einem Blog schreibt oder arbeitet, möchte ihr auch auf dem neuesten Stand der Beiträge bleiben. Folgendes Snippet schickt eine E-Mail an den Administrator, wenn ein Beitrag aktualisiert wurde.

Manchmal hilfreich, wenn zu viele Änderungen anstehen, kann es auch zu einer Meldungsflut kommen. Wer es braucht, kann diesen Code verwenden, austesten oder auch erweitern. Das Snippet kann in der z.B. in der functions.php eines WordPress Themes verwendet werden.

Wer weitere Hilfe beim Einbinden oder Ausprobieren benötigt, kann sich gerne melden. Eure Erfahrungen sind ebenfalls gefragt.

WordPress: 503 Error nach Upload großer Bilddateien

Eine sehr versteckte Sicherheitseinstellung führt bei Strato-Hosting-Paketen zu einem HTTP-Fehler nach dem Hochladen von großen Dateien, z.B. Bilder. Dabei nützt es auch nicht alle möglichen PHP-Werte bei Strato über .htaccess oder die php.ini zu erhöhen.

Folgender Fehler wird nach dem Upload über die Mediathek, sowohl über den Browserupload und die praktische Mehrfachauswahl, erzeugt.

503 Service Temporarily Unavailable

The server is temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later.
Fehlermeldung durch ServerSide Security

ServerSide Security bei Strato

Hintergrund ist die ServerSide Security, die sich in der Strato-Paketverwaltung im Sicherheitsbereich konfiguieren lässt. Dort muss der Filter gegen Gästebuch-Spam auf nicht aktiv gestellt werden.

Strato: ServerSide Security
Strato: ServerSide Security

Ist diese Einstellung deaktiviert, lassen sich alle Dateien wie gewünscht über die WordPress-Mediathek auf den Server hochladen.

WordPress: Suchergebnisse filtern, Posts oder Pages ausschließen

Bei der Standardsuche in WordPress werden automatisch alle Beiträge (Posts) und Seiten (Pages) durchsucht und bei einem Treffer ausgegeben. Um diese internen Suchergebnisse vorab zu filtern und nur eine von beiden Beitragstypen zu durchsuchen, könnt ihr folgenden Filter in die functions.php eurer WordPress Themes einsetzen.

Durch dieses Snippet werden nur Posts bei der Suche berücksichtigt.

WordPress Core Funktion existiert im WordPress Theme

Nach dem Update von WordPress 4.2 fanden wir den Fall vor, dass eine Funktion im WordPress Code neu hinzukam, die auch im verwendeten Theme schon definiert war.

Fatal error: Cannot redeclare get_avatar_url() (previously declared in /home/blog/wordpress/wp-includes/link-template.php:3414) in /home/blog/wordpress/wp-content/themes/…/functions.php on line 123

Um diese Problem auszuschließen, bietet sich bei neuen Funktionen im Theme die Prüfung an, ob diese bereits existiert.

Der folgende Code-Schnippsel zeigt dies exemplarisch.

Wie würdet ihr dieses Problem lösen?

Template Directory URI for Child Theme

Eine wichtige Funktion in einem WordPress Child Theme ist die URI-Ausgabe des aktuellen Theme-Verzeichnisses, um Bilder, Scripte und Styles aus einem Child Theme einzubinden.

Folgendes Snippet gibt euch den korrekten Pfad zurück:

Beispiel: HTML-Ausgabe eines Bildes aus einem Child Theme

Quellen