Como usar a caixa de seleção e o botão de opção na página de opções?

16

Me chame de idiota, mas eu não consigo descobrir como fazê-lo. Para entrada de texto, eu apenas:

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

e conecte-o ao workdpress usando register_setting(). Eu poderia então obter o seu valor get_option('option_name'). Como devo fazer isso com caixas de seleção e botões de opção?

Joann
fonte

Respostas:

25

Eu costumo armazenar várias opções como uma matriz, então eu teria algo assim ..

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

No entanto, depende de como a função de retorno de chamada que limpa os dados recebidos lida com o valor salvo (o retorno de chamada que você deve definir como o terceiro parâmetro de register_setting). Pessoalmente, quando estou lidando com caixas de seleção, não defino a chave da matriz, onde outros podem optar por definir a chave como 0 (ou o que for).

Então, meu código tende a ficar assim ..

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

Se eu estiver lidando apenas com caixas de seleção, meu retorno de chamada de higienização será algo parecido com ..

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

Rasgou isso diretamente de uma das minhas classes de plugins (um plug-in com apenas opções de caixa de seleção), mas não é um código que você pode esperar que funcione se você copiar, está lá apenas para ilustração.

Para rádios, se você não estiver usando seleção múltipla, será algo assim.

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

NOTA: É claro que seria sensato verificar se a chave está definida antes de comparar com o seu valor (deixei isso fora do exposto para mantê-lo curto).

O que foi dito acima ajudou? Caso contrário, deixe-me saber o que precisa ser esclarecido ... (ou o que estou perdendo) ..

RÉ: checked()

Você pode encontrar onde a função está definida (no WordPress) aqui. http://core.trac.wordpress.org/browser/tags/3.0.2/wp-includes/general-template.php#L2228

O primeiro parâmetro é basicamente uma instrução condicional, e o segundo parâmetro (se você quiser defini-lo) é contra o que verificar. O valor padrão para comparação é VERDADEIRO ... então, se o fizesse, checked( 1 == 1, true )estaria verificando se 1 == 1 é igual a true. Se o condicional atingir uma correspondência, você checked="checked"retornará a você.

NOTA: Sou péssimo em explicar as coisas, por isso, se o item acima precisar de mais esclarecimentos, não ficarei ofendido ... deixe-me saber ..;)

t31os
fonte
Meu cérebro não está funcionando assim porque estou frustrado por não ter conseguido descobrir isso sozinho. Você poderia explicar o que checked( 1 == $options['option_one']faz? É checked()uma função php porque não consegui encontrá-la no manual.
quer
Não consigo explicar em um comentário, vou atualizar minha resposta em breve, veja acima ..;)
t31os
Ahh! Muito obrigado pela ajuda! A checked()função é a única que não consegui encontrar no google porque, aparentemente, não está documentada. Eu estava tão acostumado a conseguir exatamente o que quero ao consultar "term + wordpress". :-)
Joann
Para esclarecer, o primeiro parâmetro é o que verificar, o segundo é o que comparar o primeiro valor ... para que você possa fazer isso, por exemplo ... checked( 1, 2 )para verificar se 1 é igual a 2 ... o que não produziria nada, pois funciton é projetado especificamente para emitir um estado marcado para caixas de seleção ou botões de opção. em qualquer caso, prazer em ajudar ...;)
t31os
33

caixa de seleção:

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

rádio:

<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
fonte
Há um erro de digitação no seu código (tipo) ..
t31os
1
Você deu uma resposta direta à pergunta, para receber um +1 de mim ...;)
t31os
3
Essa deve ser a resposta.
É isso! Resolvido, deve ser a resposta.
7607 mircobabini