Jak korzystać z pola wyboru i przycisku opcji na stronie opcji?


16

Nazywaj mnie głupim, ale nie mogę wymyślić, jak to zrobić. Do wprowadzania tekstu po prostu:

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

a następnie podłącz go do workdpress za pomocą register_setting(). Mógłbym wtedy uzyskać jego wartość get_option('option_name'). Jak mam to zrobić za pomocą pól wyboru i przycisków opcji?

Odpowiedzi:


25

Zwykle przechowuję wiele opcji jako tablicę, więc miałbym coś takiego…

<?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'] ); ?> />

Jednak zależy to od tego, jak funkcja oddzwaniania, która odkaża przychodzące dane, radzi sobie z zapisaną wartością (oddzwonienie, które należy zdefiniować jako trzeci parametr register_setting). Osobiście, gdy mam do czynienia z polami wyboru, nie ustawiam klucza tablicy, gdzie inni mogą zdecydować o ustawieniu klucza na 0 (lub cokolwiek innego zamiast ...)

Więc mój kod faktycznie wygląda tak ...

<?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'] ) ); ?> />

Jeśli mam do czynienia tylko z polami wyboru, moje wywołanie odkażające będzie wyglądać podobnie do ...

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;
}

Zgrałem to prosto z jednej z moich klas wtyczek (wtyczka z tylko opcjami pola wyboru), ale nie jest to kod, którego można się spodziewać po skopiowaniu, jest tylko dla ilustracji.

W przypadku radia, jeśli nie używasz wielokrotnego wyboru, dzieje się to mniej więcej tak ...

<?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'] ); ?> />

UWAGA: Oczywiście rozsądnie byłoby sprawdzić, czy klucz jest ustawiony przed porównaniem go z jego wartością (zostawiłem to z powyższego, aby było krótkie).

Czy powyższe pomogło? Jeśli nie, daj mi znać, co wymaga wyjaśnienia ... (lub czego mi brakuje) ..

RE: checked()

Tutaj możesz znaleźć, gdzie funkcja jest zdefiniowana (w WordPress). http://core.trac.wordpress.org/browser/tags/3.0.2/wp-includes/general-template.php#L2228

Pierwszy parametr jest w zasadzie instrukcją warunkową, a drugim parametrem (jeśli chcesz go zdefiniować) jest to, co chcesz sprawdzić. Wartością domyślną do porównania jest PRAWDA ... więc gdyby to zrobić checked( 1 == 1, true ), sprawdziłbym, czy 1 == 1 jest równe prawdzie. Jeśli warunkowy trafi w dopasowanie, zostaniesz checked="checked"do niego przywrócony.

UWAGA: Mam bzdury w wyjaśnianiu rzeczy, więc jeśli powyższe wymaga dalszych wyjaśnień, nie będę obrażony ... daj mi znać ...;)


Mój mózg nie działa w tym obrazie, ponieważ jestem sfrustrowany, że nie mogłem tego samodzielnie zrozumieć. Czy możesz wyjaśnić, co checked( 1 == $options['option_one']robi? Jest checked()funkcją php, ponieważ nie mogłem jej znaleźć w instrukcji.
Joann

Nie umiem tego wyjaśnić w komentarzu, wkrótce zaktualizuję swoją odpowiedź, patrz wyżej ..;)
t31os

Ahh! Dziękuję bardzo za pomoc! Ta checked()funkcja jest jedyną, której nie mogłem znaleźć przez Google, ponieważ najwyraźniej nie jest to udokumentowane. Byłem tak przyzwyczajony do uzyskiwania dokładnie tego, czego chcę, kiedy pytam „term + wordpress”. :-)
Joann,

Aby wyjaśnić, pierwszy parametr jest tym, co należy sprawdzić, drugi to porównanie pierwszej wartości z ... więc możesz to zrobić na przykład ... checked( 1, 2 )aby sprawdzić, czy 1 jest równe 2 ... funciton jest specjalnie zaprojektowany do wyświetlania stanu zaznaczonego dla
pól

33

pole wyboru:

<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' ) ); ?> />

W kodzie (typ) jest literówka.
t31os

1
Udzieliłeś bezpośredniej odpowiedzi na pytanie, więc otrzymujesz ode mnie +1 ...;)
t31os

3
To powinna być odpowiedź.

To jest to! Rozwiązany powinien być odpowiedzią.
mircobabini,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.