Speicherung von eigenen Einstellungen.
Wer eigene Plugins für WordPress schreibt und diese an verschiedene Kunden verteilt, der hat sich vermutlich schon einmal Gedanken gemacht, wie und vor allem wo man bestimmte Daten speichert.
Nicht jedes Plugin ist so ohne Weiteres für mehrere verschiedene Kunden geeignet, ohne dass man es anpassen müsste. Daher erstellen wir in weiterer Folge eine eigene Einstellungsseite für ein selbst entwickeltes Plugin im WP-Backend.
Die Einstellungsseite
Zu aller erst erstellen wir einen Menüeintrag für unsere zukünftige Einstellungsseite.
Dafür verwenden wir den Hook „admin_menu“ und die Funktion `add_options_page()`.
`add_action( ‚admin_menu‘, ‚My_Plugin::my_admin_menu_entries‘ );`
`add_options_page( ‚Plugin Einstellungen, ‚Plugin Einstellungen‘, ‚manage_options‘, ‚my-plugin-settings‘, ‚My_Plugin::inhalt_der_einstellungsseite‘ );`
Dadurch erhalten wir folgendes:
Einstellungsseite mit Inhalt füllen
Als nächstes erstellen wir das Aussehen dieser Seite und erstellen die ersten Einstellungen.
Hierzu definieren wir zuerst ein Formular.
Mit den folgenden 3 Funktionen können wir einfach und unkompliziert unsere Inputs in unser Formular einbauen. Die Funktion `settings_fields()` erstellt dabei alles notwendige für eine Nonce-Überprüfung, `do_settings_sections()` erstellt unsere Inputs und `submit_button()` erstellt einen Speicher-Button.
Als nächstes müssen wir klarstellen, wo und wie die Felder aussehen und wie sie gespeichert werden. Die erste Funktion (register_setting()) ist dafür zuständig, dass die Daten gespeichert werden können. Zusätzlich können wir eine Funktion mitgeben, die die Optionen einer Überprüfung unterziehen. Dadurch wird jede Einstellung durch unsere Funktion einstellungs_ueberpruefung() geführt, um potentiell gefährliche Werte raus zu filtern.
Die zweite Funktion (add_settings_section()) definiert weitere Bereiche der Einstellungsseite wie den Titel oder eine zusätzliche Beschreibung der Einstellungsseite.
Für die dritte Funktion (add_settings_field()) erstellen wir uns zuvor ein Array mit den Daten, für die wir eine Einstellung definieren wollen. Innerhalb dieser Funktion rufen wir eine weitere Funktion auf, die uns für jede Einstellung die notwendigen Inputs erstellt und diese, beim Aufruf der Seite vorausfüllt.
Einstellungen überprüfen
Zum Schluss sehen wir uns noch an, wie wir unsere Einstellungsseite vor böswillig eingetragenen Werten schützen können.
Dies dürfte besonders interessant sein, da wir immer wieder die Beobachtung machen, dass wenige Plugins eine Validierung der Einstellungen vorzunehmen scheinen.
Was etwas komisch anmutete, da uns auch hierfür WordPress eine Funktion zur Verfügung stellt, die uns einiges abnimmt. Einzig das definieren der „guten“ Daten ist uns überlassen.
In diesem Beispiel verwende ich eine weitere WordPress-Funktion Namens „sanitize_text_field()“. Dabei wird die Eingabe des Benutzers durch sehr weit gefasste Regeln gefiltert. Die Funktion lässt so gut wie alle möglichen Zeichen zu. Sie prüft in erster Linie auf Zeichen des UTF-8 Zeichensatzes und wandelt Spitzklammern in ihre entsprechenden HTML-Entitäten um. Dadurch ist es bereits nicht mehr möglich, durch unsere Optionen JS Befehle in die Website zu schummeln.
Wer es etwas restriktiver halten möchte, kann statt dieser Funktion auch ein „preg_match()“ verwenden und mit regulären Ausdrücken nur bestimmte Zeichen zulassen.
Die Funktion „add_settings_error()“ schließlich erstellt uns eine Fehlermeldung, die auch gleich einen Hinweis ausgibt, in welchem Einstellungsfeld sich eine fehlerhafte Eingabe befindet.
Conclusio
Mit dieser kleinen Anleitung lässt sich nun eine Einstellungsseite erstellen, die sich hervorragend in WordPress einfügt und auch gleich die Optionen mit einer netten Warnung versieht, sollten die eingegebenen Werte nicht passen.
Somit kann ich ganz einfach dynamische Werte im Look and Feel von WordPress speichern und in meinem Plugin verwenden.
Links
- https://developer.wordpress.org/reference/hooks/admin_menu/
- https://developer.wordpress.org/reference/functions/add_options_page/
- https://developer.wordpress.org/reference/functions/settings_fields/
- https://developer.wordpress.org/reference/functions/do_settings_sections/
- https://developer.wordpress.org/reference/functions/submit_button/
- https://developer.wordpress.org/reference/functions/sanitize_text_field/
- https://developer.wordpress.org/reference/functions/add_settings_error/