settings.php
Settings registration via the WordPress Settings API.
Table of Contents
Constants
- CREATIONELL_CAPTCHA_SANITIZE_FORM = 'form'
- Sanitiser context: the settings form (`options.php`).
- CREATIONELL_CAPTCHA_SANITIZE_PROGRAMMATIC = 'programmatic'
- Sanitiser context: programmatischer Schreibvorgang (Import, Werksreset, „Standardwerte laden", WP-CLI).
- CREATIONELL_CAPTCHA_SANITIZE_RESET = 'reset'
- Sanitiser context: Werksreset (`creationell_captcha_reset_settings()`).
Functions
- creationell_captcha_admin_tabs() : array<string, string>
- Ordered list of the admin settings tabs.
- creationell_captcha_admin_sections() : array<string, array<string, string>>
- Settings sections and the tab each one belongs to.
- creationell_captcha_settings_fields() : array<string, array<string, mixed>>
- Field specification for the captcha settings.
- creationell_captcha_register_settings() : void
- Registers the plugin setting, the per-tab sections and the fields.
- creationell_captcha_sanitize_context() : string|null
- Liest — und setzt optional — den angehefteten Sanitizer-Kontext.
- creationell_captcha_with_sanitize_context() : mixed
- Führt $callback aus, während der Sanitizer-Kontext auf $context festgelegt ist.
- creationell_captcha_sanitize_settings_option() : array<string, mixed>
- Einstiegspunkt des `sanitize_option_creationell_captcha_settings`-Filters.
- creationell_captcha_truncate_setting_text() : string
- Kürzt einen Einstellungswert auf höchstens $max_chars Zeichen und garantiert gültiges UTF-8.
- creationell_captcha_truncate_chars() : string
- Kürzt gültiges UTF-8 ohne mbstring auf $max_chars ZEICHEN.
- creationell_captcha_truncate_chars_by_bytes() : string
- Dritte und letzte Kürzungsstufe: zählt UTF-8-Startbytes.
- creationell_captcha_sanitize_settings() : array<string, mixed>
- Sanitises the settings array before it is stored.
- creationell_captcha_sync_event_log_table() : void
- Legt die Ereignis-Log-Tabelle an, sobald das Detail-Log eingeschaltet GESPEICHERT wurde.
- creationell_captcha_store_settings() : void
- Der eine Schreibweg des Plugins auf `creationell_captcha_settings`.
- creationell_captcha_render_engine_section() : void
- Renders the description shown at the top of the Proof-of-Work-Engine section.
- creationell_captcha_render_widget_appearance_section() : void
- Renders the description shown at the top of the widget-appearance section.
- creationell_captcha_render_code_challenge_section() : void
- Renders the description shown at the top of the code-challenge section.
- creationell_captcha_render_core_forms_section() : void
- Renders the description shown at the top of the core-forms section.
- creationell_captcha_render_interceptor_section() : void
- Renders the description shown at the top of the interceptor section.
- creationell_captcha_render_form_plugins_section() : void
- Renders the description shown at the top of the form-plugins section.
- creationell_captcha_render_proxy_section() : void
- Renders the description shown at the top of the proxy section.
- creationell_captcha_render_bypass_section() : void
- Renders the description shown at the top of the bypass section.
- creationell_captcha_render_firewall_section() : void
- Renders the description shown at the top of the firewall section.
- creationell_captcha_render_ratelimit_section() : void
- Renders the description shown at the top of the rate-limiting section.
- creationell_captcha_render_underattack_section() : void
- Renders the description shown at the top of the under-attack section.
- creationell_captcha_render_underattack_appearance_section() : void
- Renders the description shown at the top of the under-attack appearance section.
- creationell_captcha_render_analytics_section() : void
- Renders the description shown at the top of the analytics section.
- creationell_captcha_render_email_section() : void
- Renders the description shown at the top of the email-protection section.
- creationell_captcha_render_field() : void
- Renders a single settings field.
- creationell_captcha_field_label() : string
- Liefert das Label eines Einstellungsfeldes (Fallback: der Schlüssel selbst).
- creationell_captcha_field_spec() : array<string, array<string, mixed>>
- Request-lokal gehaltene Feldspezifikation für die beiden Label-Helfer.
- creationell_captcha_field_option_label() : string
- Liefert das Options-Label eines `select`-Feldes (Fallback: der Rohwert).
Constants
CREATIONELL_CAPTCHA_SANITIZE_FORM
Sanitiser context: the settings form (`options.php`).
public
mixed
CREATIONELL_CAPTCHA_SANITIZE_FORM
= 'form'
Ein disabled-Input sendet beim Absenden keinen Wert — deshalb (und NUR
deshalb) schreibt der Sanitizer in diesem Kontext gegatete Felder aus dem
gespeicherten Zustand zurück.
CREATIONELL_CAPTCHA_SANITIZE_PROGRAMMATIC
Sanitiser context: programmatischer Schreibvorgang (Import, Werksreset, „Standardwerte laden", WP-CLI).
public
mixed
CREATIONELL_CAPTCHA_SANITIZE_PROGRAMMATIC
= 'programmatic'
Hier ist der übergebene Wert eine vollständige, bewusste Angabe; eine Rückschreibung aus dem Altzustand würde sie still überstimmen (AF-1/AF-3).
CREATIONELL_CAPTCHA_SANITIZE_RESET
Sanitiser context: Werksreset (`creationell_captcha_reset_settings()`).
public
mixed
CREATIONELL_CAPTCHA_SANITIZE_RESET
= 'reset'
Wie PROGRAMMATIC — plus die eine Zusage, die den Werksreset von jedem anderen Schreibvorgang unterscheidet: KEIN gespeicherter Schlüssel wird übernommen, auch keiner ausserhalb der aktuellen Feldspezifikation.
Warum das ein eigener Wert sein muss (Nachlese N6, Befund 5): Die
Übernahme-Schleife am Ende von creationell_captcha_sanitize_settings()
hält gespeicherte Schlüssel fest, die creationell_captcha_settings_fields()
gerade nicht liefert — die Schalter der Formular-Plugins hängen an
class_exists(), sind bei deaktiviertem Plugin also nicht in der
Spezifikation. Für jeden regulären Schreibvorgang ist das richtig
(sonst löschte ein Speichern der Einstellungsseite den Schalter eines
gerade deaktivierten Plugins). Für den dokumentierten „vollen Werksreset"
ist es falsch: wp creacaptcha settings reset --yes meldete
„Auf Werkseinstellungen zurückgesetzt", während ein protect_wpforms => false
aus der Zeit vor der Deaktivierung — oder ein beliebiger Fremdschlüssel aus
wp option patch/DB-Restore — die Option unverändert überlebte.
Der Wert ersetzt PROGRAMMATIC ausschliesslich beim Reset. Import, „Standardwerte laden", WP-CLI-Schreibvorgänge und die Listen-Befehle bleiben auf PROGRAMMATIC: sie übergeben zwar ebenfalls einen vollständigen Wertesatz, sind aber kein Werksreset und dürfen den Schalter eines gerade inaktiven Formular-Plugins nicht wegräumen.
Tags
Functions
creationell_captcha_admin_tabs()
Ordered list of the admin settings tabs.
creationell_captcha_admin_tabs() : array<string, string>
The array key is the tab id; it doubles as the suffix of the Settings-API
page slug (creationell-captcha-tab-<id>) that do_settings_sections() uses.
Return values
array<string, string> —Tab id => visible label.
creationell_captcha_admin_sections()
Settings sections and the tab each one belongs to.
creationell_captcha_admin_sections() : array<string, array<string, string>>
Section order within a tab follows this array's order.
Return values
array<string, array<string, string>> —Section id => { tab, title, callback }.
creationell_captcha_settings_fields()
Field specification for the captcha settings.
creationell_captcha_settings_fields() : array<string, array<string, mixed>>
Every field carries a section key naming the section (and thereby the tab)
it renders in; the section ids match creationell_captcha_admin_sections().
Return values
array<string, array<string, mixed>>creationell_captcha_register_settings()
Registers the plugin setting, the per-tab sections and the fields.
creationell_captcha_register_settings() : void
creationell_captcha_sanitize_context()
Liest — und setzt optional — den angehefteten Sanitizer-Kontext.
creationell_captcha_sanitize_context([string|false|null $set = false ]) : string|null
Der Kontext wird bewusst EXPLIZIT gesetzt und nicht aus is_admin(),
admin_init oder ähnlichen Umgebungsindizien erraten: genau dieses Raten ist
die Wurzel der Kartenwidersprüche W1/W2 der Befunddatei (ein Menüpunkt, zwei
Semantiken, je nachdem ob admin_init gefeuert hat).
Parameters
- $set : string|false|null = false
-
FALSE liest nur; ein String oder NULL setzt.
Return values
string|null —Aktuell angehefteter Kontext oder NULL.
creationell_captcha_with_sanitize_context()
Führt $callback aus, während der Sanitizer-Kontext auf $context festgelegt ist.
creationell_captcha_with_sanitize_context(string $context, callable $callback) : mixed
Nötig, weil register_setting() den Sanitizer zusätzlich als
sanitize_option_creationell_captcha_settings-Filter anhängt: jeder
update_option()-Aufruf im Admin-Kontext läuft durch ihn hindurch, auch
Import und Reset über admin-post.php. Ohne diese Klammer bekämen genau
jene Pfade Formular-Semantik.
Parameters
- $context : string
-
Einer der CREATIONELL_CAPTCHA_SANITIZE_*-Werte.
- $callback : callable
-
Auszuführender Schreibvorgang.
Return values
mixed —Rückgabewert von $callback.
creationell_captcha_sanitize_settings_option()
Einstiegspunkt des `sanitize_option_creationell_captcha_settings`-Filters.
creationell_captcha_sanitize_settings_option(mixed $input) : array<string, mixed>
Parameters
- $input : mixed
-
Rohwert aus dem Schreibvorgang.
Return values
array<string, mixed>creationell_captcha_truncate_setting_text()
Kürzt einen Einstellungswert auf höchstens $max_chars Zeichen und garantiert gültiges UTF-8.
creationell_captcha_truncate_setting_text(string $value, int $max_chars) : string
Bewusst zeichen- statt byteorientiert: substr() schnitt bisher mitten in
eine Mehrbyte-Sequenz (AF-7). Ungültiges UTF-8 wird entfernt, bevor der Wert
in den serialisierten Options-Blob wandert — nicht danach in der DB repariert.
Parameters
- $value : string
-
Bereits vorsanitisierter Wert.
- $max_chars : int
-
Obergrenze in Zeichen (nicht Bytes).
Return values
stringcreationell_captcha_truncate_chars()
Kürzt gültiges UTF-8 ohne mbstring auf $max_chars ZEICHEN.
creationell_captcha_truncate_chars(string $value, int $max_chars) : string
Drei Stufen, weil jede einzelne ausfallen kann — und der Ausfall darf den Wert nicht kosten:
preg_match( '/^.{0,N}/us' )— der schnelle Weg.slässt „.“ auch Zeilenumbrüche treffen (relevant fürtextblock).iconv_substr()— greift, wenn Stufe 1 an einem PCRE-Limit scheitert (Backtrack-Limit, JIT-Stack). iconv ist keine PCRE-Bibliothek und deshalb von diesen Limits nicht betroffen.- Ein Byte-Lauf über die UTF-8-Startbytes — braucht überhaupt keine Erweiterung und keine PCRE.
WARUM ES DIESE FUNKTION GIBT (Nachlese N6, Befund 7; Fehlerklasse 4)
Nach Stufe 1 stand hier bis zur Nachlese return '';. Das war als
„lieber ein leeres Feld, das der Betreiber sieht" begründet — nur sieht er
es nicht: an dieser Stelle wird keine add_settings_error() erzeugt, das
leere Feld ist also genau so still wie die kaputte Sequenz, gegen die die
Begründung argumentierte. Und der Sanitizer läuft bei JEDEM Schreibvorgang,
auch bei einem, der dieses Feld gar nicht anfasst (Werksreset,
„Standardwerte laden", settings set eines anderen Schlüssels, jedes
Speichern der Einstellungsseite): ein gespeicherter CSS- oder
Übersetzungsblock wäre damit still und vollständig weg gewesen. Der
Vorgängerstand vor W2-7 lieferte an dieser Stelle wenigstens den Anfang des
Wertes (substr(), byteweise und deshalb möglicherweise mitten in einer
Mehrbyte-Sequenz). Beide Stufen unten liefern denselben Anfang, nur an einer
ZEICHEN-Grenze — der Datenverlust entfällt, ohne den AF-7-Fehler
zurückzuholen.
Vorbedingung: $value ist gültiges UTF-8. Der Aufrufer stellt das her; Stufe 3 verlässt sich darauf, weil sie Startbytes zählt und Fortsetzungsbytes (0x80–0xBF) in gültigem UTF-8 nie an einer Zeichengrenze stehen.
Parameters
- $value : string
-
Gültiges UTF-8.
- $max_chars : int
-
Obergrenze in Zeichen.
Tags
Return values
stringcreationell_captcha_truncate_chars_by_bytes()
Dritte und letzte Kürzungsstufe: zählt UTF-8-Startbytes.
creationell_captcha_truncate_chars_by_bytes(string $value, int $max_chars) : string
Braucht weder mbstring noch iconv noch PCRE — deshalb steht sie am Ende der
Kette in creationell_captcha_truncate_chars(). Eigene Funktion, weil sie
sonst auf jedem Rechner mit iconv unerreichbar und damit ungetestet wäre.
Startbytes: 0xxxxxxx = 1 Byte, 110xxxxx = 2, 1110xxxx = 3,
11110xxx = 4. Fortsetzungsbytes (10xxxxxx, 0x80–0xBF) stehen in gültigem
UTF-8 nie an einer Zeichengrenze; ungültige Eingaben schliesst der Aufrufer
aus (creationell_captcha_truncate_setting_text() prüft und repariert vorher).
Parameters
- $value : string
-
Gültiges UTF-8.
- $max_chars : int
-
Obergrenze in Zeichen.
Tags
Return values
stringcreationell_captcha_sanitize_settings()
Sanitises the settings array before it is stored.
creationell_captcha_sanitize_settings(mixed $input[, string $context = CREATIONELL_CAPTCHA_SANITIZE_PROGRAMMATIC ]) : array<string, mixed>
Parameters
- $input : mixed
-
Raw input from the settings form.
- $context : string = CREATIONELL_CAPTCHA_SANITIZE_PROGRAMMATIC
-
Schreibkontext, einer der CREATIONELL_CAPTCHA_SANITIZE_*-Werte. Default ist „programmatisch": alle direkten Aufrufer (Import, WP-CLI) übergeben einen vollständigen Wertesatz. Ausgewertet werden ausschließlich die zwei bekannten programmatischen Werte …_PROGRAMMATIC und …_RESET; jeder andere Wert — auch ein unerwarteter, etwa der Optionsname aus einer Legacy-
sanitize_option- Registrierung — erhält die verlustfreie Formular-Semantik. …_RESET unterscheidet sich von …_PROGRAMMATIC an genau einer Stelle: er übernimmt auch keine gespeicherten Schlüssel ausserhalb der aktuellen Feldspezifikation (voller Werksreset).
Return values
array<string, mixed>creationell_captcha_sync_event_log_table()
Legt die Ereignis-Log-Tabelle an, sobald das Detail-Log eingeschaltet GESPEICHERT wurde.
creationell_captcha_sync_event_log_table() : void
E3b — warum das hier hängt und nicht mehr im Sanitizer: Der Sanitizer ist
über register_setting() zugleich der sanitize_option-Filter der Option
und eine öffentliche, dokumentierte Funktion. Ein ensure_table() in ihm
bedeutete DDL für jeden Aufrufer, der nur prüfen, vergleichen oder eine
Vorschau bauen will — wp creacaptcha doctor verzichtet deshalb bereits
ausdrücklich auf den Sanitizer-Vergleich (Check 9). Die Tabellenanlage
gehört an das Ergebnis des Schreibvorgangs; das ist dieselbe Bauform, die
creationell_captcha_sync_cloudflare_cron() für den Cron-Slot benutzt.
Reichweite gegenüber vorher:
- wp-admin (Formular, Import, Werksreset, „Standardwerte laden"): unverändert — die Tabelle entsteht weiterhin beim Speichern.
- WP-CLI und jeder andere Kontext ohne
admin_init: NEU abgedeckt. Dort hing dersanitize_option-Filter gar nicht;wp option update creationell_captcha_settingskonnte das Log einschalten, ohne dass je eine Tabelle entstand (die Selbstheilungs-Lücke aus DS-4). - Ein Speichern, das den Optionswert unverändert lässt: WordPress schreibt
dann nichts und feuert keinen der beiden Hooks. Diese Lücke deckt seit der
Nachlese N6
creationell_captcha_store_settings()ab — jeder Plugin-eigene Schreibweg auf die Option ruft die Synchronisierung danach selbst noch einmal auf. Nicht abgedeckt bleibt ein Schreibvorgang an diesen Wegen vorbei (wp option update, DB-Restore) ohne Wertänderung; dafür bleibtwp creacaptcha repairder Weg, auf den Doctor-Check 3 und der Log-Hinweis in Analytics::log_row() verweisen.
DS-2-Grenze: Auslöser ist ein bereits erfolgter Schreibvorgang auf die
Plugin-Option. Anders als beim admin_init-Aufhänger der Migration in
upgrade.php gibt es hier keinen anonym erreichbaren Pfad — wer die Option
schreiben kann, hat die Site ohnehin in der Hand.
creationell_captcha_store_settings()
Der eine Schreibweg des Plugins auf `creationell_captcha_settings`.
creationell_captcha_store_settings(array<string, mixed> $clean) : void
Warum es ihn gibt (Nachlese N6, Befund 4): update_option() feuert
update_option_{$option} NUR, wenn sich der gespeicherte Wert wirklich
ändert (wp-includes/option.php vergleicht alt/neu und bricht sonst ohne
DB-Schreibvorgang und ohne Hook ab). Seit E3b hängt die Anlage der
Ereignis-Tabelle ausschliesslich an diesen Hooks — ein Schreibvorgang ohne
Wertänderung ist damit ein Erfolg ohne Wirkung:
wp creacaptcha settings set analytics_event_log 1 # steht schon auf 1
wp creacaptcha blocklist add 203.0.113.9 # steht schon drin
meldeten Erfolg, während eine von Hand gelöschte Tabelle (DB-Restore,
Migration) weg blieb und jedes Ereignis still verworfen wurde. Strang N2
hatte das für Command::enable() einzeln kompensiert; der zweite und dritte
CLI-Weg auf denselben Schlüssel hatten die Kompensation nicht. Statt sie an
jeder Stelle zu wiederholen, steht sie jetzt EINMAL hier, und alle
Plugin-eigenen Schreibwege gehen hindurch.
Nachgerufen wird nur, wenn update_option() FALSE liefert — also genau
dann, wenn der Hook nicht gefeuert hat. ensure_table() ist zwar
idempotent, aber nicht kostenlos (dbDelta liest das Schema), und ein
zweiter Durchlauf bei jedem echten Speichervorgang wäre reine Wiederholung.
Der FALSE-Zweig deckt beide Ursachen ab: unveränderter Wert und
fehlgeschlagener Schreibvorgang.
Parameters
- $clean : array<string, mixed>
-
Bereits sanitisierter Wertesatz.
Tags
creationell_captcha_render_engine_section()
Renders the description shown at the top of the Proof-of-Work-Engine section.
creationell_captcha_render_engine_section() : void
creationell_captcha_render_widget_appearance_section()
Renders the description shown at the top of the widget-appearance section.
creationell_captcha_render_widget_appearance_section() : void
creationell_captcha_render_code_challenge_section()
Renders the description shown at the top of the code-challenge section.
creationell_captcha_render_code_challenge_section() : void
Includes a warning notice when the PHP-GD extension is missing — without it, image rendering cannot work and the trigger logic stays disabled.
creationell_captcha_render_core_forms_section()
Renders the description shown at the top of the core-forms section.
creationell_captcha_render_core_forms_section() : void
creationell_captcha_render_interceptor_section()
Renders the description shown at the top of the interceptor section.
creationell_captcha_render_interceptor_section() : void
creationell_captcha_render_form_plugins_section()
Renders the description shown at the top of the form-plugins section.
creationell_captcha_render_form_plugins_section() : void
When no supported form plugin is active the section has no fields, so the description doubles as a hint.
creationell_captcha_render_proxy_section()
Renders the description shown at the top of the proxy section.
creationell_captcha_render_proxy_section() : void
creationell_captcha_render_bypass_section()
Renders the description shown at the top of the bypass section.
creationell_captcha_render_bypass_section() : void
creationell_captcha_render_firewall_section()
Renders the description shown at the top of the firewall section.
creationell_captcha_render_firewall_section() : void
creationell_captcha_render_ratelimit_section()
Renders the description shown at the top of the rate-limiting section.
creationell_captcha_render_ratelimit_section() : void
creationell_captcha_render_underattack_section()
Renders the description shown at the top of the under-attack section.
creationell_captcha_render_underattack_section() : void
creationell_captcha_render_underattack_appearance_section()
Renders the description shown at the top of the under-attack appearance section.
creationell_captcha_render_underattack_appearance_section() : void
creationell_captcha_render_analytics_section()
Renders the description shown at the top of the analytics section.
creationell_captcha_render_analytics_section() : void
creationell_captcha_render_email_section()
Renders the description shown at the top of the email-protection section.
creationell_captcha_render_email_section() : void
creationell_captcha_render_field()
Renders a single settings field.
creationell_captcha_render_field(array<string, mixed> $args) : void
Parameters
- $args : array<string, mixed>
-
Field arguments (key + field spec).
creationell_captcha_field_label()
Liefert das Label eines Einstellungsfeldes (Fallback: der Schlüssel selbst).
creationell_captcha_field_label(string $key) : string
Parameters
- $key : string
-
Feldschlüssel.
Return values
stringcreationell_captcha_field_spec()
Request-lokal gehaltene Feldspezifikation für die beiden Label-Helfer.
creationell_captcha_field_spec() : array<string, array<string, mixed>>
W2-8: Beide hielten je einen wortgleichen static $spec-Block und damit zwei
unabhängige Kopien der ~75-Felder-Spezifikation im Speicher. Eine gemeinsame
Zugriffsfunktion genügt — und sie macht zugleich sichtbar, dass beide
denselben Stand meinen.
Return values
array<string, array<string, mixed>>creationell_captcha_field_option_label()
Liefert das Options-Label eines `select`-Feldes (Fallback: der Rohwert).
creationell_captcha_field_option_label(string $key, string $value) : string
Parameters
- $key : string
-
Feldschlüssel.
- $value : string
-
Optionswert.