WordPress: update_option, leere Optionen nicht aktualisieren?

Wie sollte ich leere Daten nicht in WordPress einbinden?

 

Solutions Collecting From Web of "WordPress: update_option, leere Optionen nicht aktualisieren?"

Noch wichtiger ist, dass Sie * nicht vertrauenswürdige, unsanisierte $ _POST-Daten * nicht in WordPress einbinden dürfen.

Aber ich denke, das Problem besteht darin, dass Sie die Option mit den gesamten $ _POST-Daten anstelle des entsprechenden Array-Schlüssels aktualisieren:

 update_option('eirepanel_inline_ads_options', $_POST); 

Sollte wahrscheinlich etwas wie sein:

 update_option('eirepanel_inline_ads_options', $_POST['eirepanel_inline_ads_options_name']); 

Sind Ihre Plugin-Optionen diskret (ein DB-Eintrag pro Option) oder ein Options-Array?

BEARBEITEN

Da Sie ein Options-Array verwenden, wäre der richtige Ansatz:

  1. Definieren Sie ein Array für die $_POST Daten ( $input = array() )
  2. Definieren Sie ein Array, um die aktuellen Einstellungen vom DB zu erhalten ( $valid_input = array() )
  3. Sanitize die $_POST Daten
  4. Aktualisieren Sie das $valid_data Array mit dem bereinigten $input
  5. $valid_data die aktualisierten $valid_data zurück an den DB

z.B

 $input = ( isset( $_POST ) ? $_POST : false ); $valid_input = get_option( 'eirepanel_inline_ads_options' ); foreach ( $input as $key ) { // sanitize data here } $valid_input = array_merge( $valid_input, $input ); update_option( 'eirepanel_inline_ads_options', $valid_input ); 

Nur schnell und schmutzig, aber sollte dir eine Idee geben.

Außerdem wäre die Verwendung der Einstellungs-API hier besonders hilfreich.

Im Anschluss an Ihre Antwort auf die Vorschläge von @ Chip rate ich Ihnen, Ihre Eingaben so zu benennen;

    

Dann in deinem Code;

 $options = shortcode_atts( array( 'option_key_name' => 'default value', 'option_key_another' => 'foobar' ), ( array ) $_POST['eire'] ); 

$options enthalten jetzt nur die expliziten Schlüssel, die an shortcode_atts() , wobei die Daten von $_POST die $_POST überschreiben.

 Array ( option_key_name => hello world, option_key_another' => foobar ) 

Sie werden sehen, dass ich Input-Array-Namen verwende , um Ihre $_POST Daten mit einem Namespace zu $_POST (im Gegensatz zu Namespacing für jeden Optionseingangsnamen, der dann vor dem Speichern $_POST und entfernt werden muss).

Hinweis: Dies löscht nur Schlüssel, die wir nicht möchten . Wahrscheinlich möchten Sie die einzelnen Werte abhängig vom Datentyp noch weiter bereinigen. Wenn sie alle gleich sind, könnten Sie dem Array einen callback zuordnen und damit fertig werden.

Zum Beispiel sind das alles reine Textfelder;

 $options = array_map( 'wp_strip_all_tags', $options );