Wie verwende ich das Kontrollkästchen und das Optionsfeld auf der Optionsseite?

16

Nenn mich dumm, aber ich weiß nicht, wie ich es machen soll. Für die Texteingabe würde ich nur:

<input type="text" name="option_name"  value="<?php echo get_option( 'option_name' ); ?>" />

und dann mit in workdpress einbinden register_setting(). Ich könnte dann seinen Wert durch bekommen get_option('option_name'). Wie soll ich das mit Checkboxen und Optionsfeldern machen?

Joann
quelle

Antworten:

25

Ich neige dazu, mehrere Optionen als Array zu speichern, so würde ich so etwas haben ..

<?php $options = get_option( 'myoption' ); ?>
<input type="checkbox" name="myoption[option_one]" value="1"<?php checked( 1 == $options['option_one'] ); ?> />
<input type="checkbox" name="myoption[option_two]" value="1"<?php checked( 1 == $options['option_two'] ); ?> />

Allerdings hängt es ab , wie die Callback - Funktion , dass saniert die eingehenden Daten befasst sich mit dem gespeicherten Wert (den Rückruf Sie sollten werden als dritter Parameter definieren register_setting). Persönlich, wenn ich mit Checkboxen zu tun habe, setze ich nicht den Array-Schlüssel, wo andere den Schlüssel auf 0 setzen können (oder was auch immer stattdessen) ...

Mein Code sieht also normalerweise so aus.

<?php $options = get_option( 'myoption' ); ?>
<input type="checkbox" name="myoption[option_one]" value="1"<?php checked( isset( $options['option_one'] ) ); ?> />
<input type="checkbox" name="myoption[option_two]" value="1"<?php checked( isset( $options['option_two'] ) ); ?> />

Wenn ich nur mit Checkboxen zu tun habe, sieht mein Desinfektions-Rückruf wie folgt aus:

public function on_option_save( $options ) {
    if( !is_array( $options ) || empty( $options ) || ( false === $options ) )
        return array();

    $valid_names = array_keys( $this->defaults );
    $clean_options = array();

    foreach( $valid_names as $option_name ) {
        if( isset( $options[$option_name] ) && ( 1 == $options[$option_name] ) )
            $clean_options[$option_name] = 1;
        continue;
    }
    unset( $options );
    return $clean_options;
}

Das wurde direkt aus einer meiner Plugin-Klassen (ein Plugin mit nur Kontrollkästchen-Optionen) kopiert, aber es ist kein Code, von dem Sie erwarten können, dass er beim Kopieren funktioniert. Er dient nur zur Veranschaulichung.

Wenn Sie für Radios keine Mehrfachauswahl verwenden, geschieht dies in etwa so.

<?php $options = get_option( 'my_option' ); ?>
<input type="radio" name="myoption[option_three]" value="value1"<?php checked( 'value1' == $options['option_three'] ); ?> />
<input type="radio" name="myoption[option_three]" value="value2"<?php checked( 'value2' == $options['option_three'] ); ?> />

HINWEIS: Es ist natürlich ratsam, zu überprüfen, ob der Schlüssel gesetzt ist, bevor er mit seinem Wert verglichen wird (ich habe das aus den obigen Gründen weggelassen, um ihn kurz zu halten).

Hat das oben genannte geholfen? Wenn nicht, lass es mich wissen, was geklärt werden muss ... (oder was mir fehlt)

RE: checked()

Hier finden Sie, wo die Funktion definiert ist (in WordPress). http://core.trac.wordpress.org/browser/tags/3.0.2/wp-includes/general-template.php#L2228

Der erste Parameter ist im Grunde eine bedingte Anweisung, und der zweite Parameter (wenn Sie ihn definieren möchten) gibt an, gegen was geprüft werden soll. Der Standardwert, mit dem verglichen werden soll, ist TRUE. Wenn dies also der checked( 1 == 1, true )Fall wäre, würde ich prüfen, ob 1 == 1 gleich true ist. Wenn die Bedingung eine Übereinstimmung trifft, werden Sie checked="checked"zu Ihnen zurückgebracht.

BEMERKUNG: Ich bin ein Quatsch, wenn es darum geht, Dinge zu erklären, werde ich nicht beleidigt sein.

t31os
quelle
Mein Gehirn funktioniert in diesem Moment nicht, weil ich frustriert bin, dass ich das nicht alleine herausfinden konnte. Könnten Sie erklären, was checked( 1 == $options['option_one']macht? Ist checked()eine PHP-Funktion, weil ich sie im Handbuch nicht finden konnte.
Joann
Ich kann es nicht in einem Kommentar erklären, ich werde meine Antwort in Kürze aktualisieren, siehe oben.;)
t31os
Ahh! Vielen Dank für die Hilfe! Die checked()Funktion ist die einzige, die ich über Google nicht finden konnte, da sie anscheinend nicht dokumentiert ist. Ich war es so gewohnt, genau das zu bekommen, was ich wollte, wenn ich "term + wordpress" abfragte. :-)
Joann
Zur Verdeutlichung ist der erste Parameter zu überprüfen, der zweite ist der Vergleich des ersten Werts mit ... Sie könnten dies beispielsweise tun ... um checked( 1, 2 )zu überprüfen, ob 1 gleich 2 ist ... was nichts ausgeben würde, da dies funciton wurde speziell entwickelt, um einen aktivierten Status für Kontrollkästchen oder Optionsfelder auszugeben. Auf jeden Fall hilft es gerne ...;)
t31os
33

Kontrollkästchen:

<input name="option_name" type="checkbox" value="1" <?php checked( '1', get_option( 'option_name' ) ); ?> />

Radio:

<input name="option_name" type="radio" value="0" <?php checked( '0', get_option( 'option_name' ) ); ?> />
<input name="option_name" type="radio" value="1" <?php checked( '1', get_option( 'option_name' ) ); ?> />
zeo
quelle
In Ihrem Code ist ein Tippfehler (der Typ).
t31os
1
Du hast die Frage direkt beantwortet, also bekommst du von mir +1 ...;)
t31os
3
Das sollte die Antwort sein.
Das ist es! Gelöst, sollte die Antwort sein.
mircobabini