Wie verwende ich eine neu registrierte Einstellung mit einem Kontrollkästchen und dem Standardwert ‘true’?

Ich arbeite gerade an einem Plugin, in dem ich eine neue Einstellung haben möchte (‘show_introduction’ genannt), die den Standardwert ‘true’ hat.

Ich tat dies durch das Folgende, das in ‘admin_init’ eingebunden ist

register_setting('tf-song-list-settings-group', 'show_introduction'); if (get_option('show_introduction') == '') update_option('show_introduction', 'true'); 

Auf der Einstellungsseite habe ich Folgendes, um die obige Einstellung in ein Kontrollkästchen zu integrieren

 <input name="show_introduction" type="checkbox" id="show_introduction" value="true"  /> 

Jetzt ist das Problem, dass ich die Checkbox nicht abwählen kann und folglich den Wert auf falsch setze.

Was mache ich falsch und wie wird es richtig gemacht?

Wenn ich die Einstellung standardmäßig auf “false” setze, funktioniert alles gut. Aber das ist nicht, was ich will, dass der Standardwert ist.

Natürlich könnte ich die Einstellung von “show_introduction” in “hide_introduction” umbenennen, der Eingabe den Wert “false” geben, nach “false” suchen und somit alles anders herum tun. Wahrscheinlich würde das funktionieren. Aber das ist eher ein Workaround für das eigentliche Problem, oder?

Danke im Voraus.

// bearbeiten

Ich glaube, ich habe bekommen, was ich wollte. Hier ist der Code

 if (!class_exists('tf_song_list')) { class tf_song_list { public function __construct() { add_action('admin_init', array(&$this, 'init_options')); } // public function __construct function init_options() { register_setting('tfsl_options', 'tfsl_options', array(&$this, 'validate_options')); $options = get_option('tfsl_options'); if (false === $options) $options = $this->get_default_options(); update_option('tfsl_options', $options); } // function init_options function get_default_options() { $options = array( 'show_introduction' => 1 ); return $options; } // function get_default_options function validate_options($options) { $validated_options['show_introduction'] = ($option = $options['show_introduction']) ? $option : 0; return $validated_options; } // function validate_options } // class tf_song_list } // if (!class_exists('tf_song_list')) 

Der Hinweis, denke ich, ist
A) um eine validations- / Desinfektionsfunktion zu verwenden, um die spezifischen Werte festzulegen, falls es nicht der Standardwert ist,
und B) mit (false === MY_OPTIONS) zu überprüfen und erst dann die Standardwerte zu setzen.

Jetzt kann ich folgendes auf meiner Einstellungsseite verwenden und alles funktioniert gut:

 <input name="tfsl_options[show_introduction]" type="checkbox" id="tfsl_options[show_introduction]" value="1"  /> 

Danke für deinen Beitrag!

Übrigens, wenn es etwas verrücktes mit meinem obigen Code gibt, kannst du mich aufklären. Ich habe die Einstellungs-API erst vor zwei Tagen verwendet.

Solutions Collecting From Web of "Wie verwende ich eine neu registrierte Einstellung mit einem Kontrollkästchen und dem Standardwert ‘true’?"

Die function get_option hat einen zweiten Parameter, mit dem Sie einen Standardwert angeben können, wie in der Dokumentation angegeben , wenn ich Sie richtig verstehe.

Tut das etwas?

  /> 

Da du nach meiner Lösung gefragt hast, hier ist es.

Erstens musste Chip Bennett meinen gesamten Ansatz zu Einstellungen und Optionen neu ordnen.

Ab sofort habe ich den folgenden Code verwendet:

 class MYClass { function __construct() { add_action('admin_init', array($this, 'register_settings')); } function activate() { if (false === get_option('MY_options')) update_option('MY_options', $this->get_default_options()); } function register_settings() { register_setting('MY_options', 'MY_options', array($this, 'validate_options')); if (false === ($options = get_option('MY_options'))) $options = $this->get_default_options(); update_option('MY_options', $options); } function get_default_options() { $options = array( 'cb_option' => 1, // the checkbox-option in question 'option_n' => 'whatever', ... ); return $options; } function validate_options($options) { $validated['cb_option'] = (1 === $options['cb_option']) ? 1 : 0; $validated['option_n'] = SANITIZE_IN_SOME_WAY($options['title_name']); ... return $validated; } } $MYClassObject = new MYClass(); 

Auf der gewünschten Seite (Einstellungen) lautet das Code-Snippet für das Kontrollkästchen wie folgt:

 < ?php $O = get_option('MY_options'); ?>  /> 

Wenn diese Option aktiviert ist, wird die Option auf 1 gesetzt, und wenn die Option deaktiviert ist, wird sie deaktiviert (dh auf ” gesetzt), was wiederum mit Hilfe der validationsfunktion in ‘0’ validiert wird. Daher kann ich die Option als boolesch behandeln, egal was passiert. Der Wert ist entweder 1 oder 0.

Das ist genau das Verhalten, nach dem ich gesucht habe, als ich die Frage gestellt habe.