‘delete_option ()’ löscht nur den Wert, nicht das Schlüssel / Wert-Paar

Kürzlich hat ein Plugin, das ich entwickle, angefangen, einen Fehler zu verursachen, wann immer ich die Plugin-Optionen löschte (sie wurden auf Standard zurückgesetzt).

Ich verwende das Einstellungs-API innerhalb des betreffenden Plugins und auf einer anderen Seite überprüfe ich die Einstellungen, die diesen Optionen zugewiesen sind –

$login_settings = get_option('fgw_login', array()); 

Nach der Aktivierung und nachdem ich die Einstellungen gespeichert habe, war dies in Ordnung, wobei das Standard- array() $login_settings zugewiesen wurde, falls erforderlich.

Ich habe jedoch immer einen Fehler erhalten, wenn ich versucht habe, die Plugin-Optionen auf ihre Standardeinstellungen zurückzusetzen. Grundsätzlich wollte ich das Schlüssel / Wert-Paar aus der wp_options database löschen.

 /** * Sanitize the option on save */ public function on_save_settings($input){ /** Check to see if the options should be restored to default */ if(isset($_POST['delete'])) : delete_option('fgw_login'); return; endif; if(!isset($_POST['submit'])) return; // Ensure the user is supposed to be here {more stuff here, but not relevant} } 

Es schien jedoch, dass delete_option('fgw_login'); löschte nicht tatsächlich das Schlüssel / Wert-Paar für die Option, sondern nur den Wert und ließ den Schlüssel an Ort und Stelle.

Das war ein Problem, weil ich die $login_settings für einen bestimmten Array-Schlüsselwert überprüft habe, aber da $login_settings als leere Zeichenfolge gesetzt wurde, bekam ich einen Fehler.

Ich hätte einfach einen Check hinzufügen können, um zu sehen, ob $login_settings ein Array war, aber ich war neugierig, also habe ich etwas gegraben. Wenn Sie interessiert sind, finden Sie in meiner Antwort unten …

Solutions Collecting From Web of "‘delete_option ()’ löscht nur den Wert, nicht das Schlüssel / Wert-Paar"

Das Problem hier wurde verursacht, weil ich einen Sanitize Callback verwendet hatte, der in register_settings() (die function on_save_chages() unten) deklariert wurde.

Dieser Callback wird die database letztendlich mit dem zurückgegebenen Wert aktualisieren, wobei der Schlüssel fgw_login wenn er nicht existiert.

Um sicherzustellen, dass ich bei Bedarf immer mein leeres Standard-Array hatte, habe ich die folgende einfache Änderung vorgenommen und ein leeres Array zurückgegeben, wenn die Optionen im Gegensatz zu nichts zurückgesetzt wurden –

 /** * Sanitize the option on save */ public function on_save_settings($input){ /** Check to see if the options should be restored to default */ if(isset($_POST['delete'])) : delete_option('fgw_login'); return array(); /** < -- THIS IS ALL I HAD TO DO */ endif; if(!isset($_POST['submit'])) return; // Ensure the user is supposed to be here {more stuff here, but not relevant} } 

Während das Problem meinen Code enthüllte, weil ich nicht die richtigen Überprüfungen durchführte, bin ich froh, dass ich die Möglichkeit hatte, tiefer in die Einstellungs-API einzutauchen und jeden Benutzer davon zu überzeugen, dasselbe zu tun 🙂