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

13

Chame-me de idiota, mas não sei como fazer isso. Para entrada de texto eu gostaria apenas de:

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

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

    
por Joann 07.12.2010 / 16:08

2 respostas

23

Eu costumo armazenar várias opções como um array, 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 deve ser definido como o terceiro parâmetro de register_setting ). Pessoalmente, quando estou lidando com caixas de seleção, não defino a chave do array, onde, como outros, podem escolher definir a chave como 0 (ou o que for) ...

Então, meu código realmente tende a se parecer com isso ...

<?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 as caixas de seleção, meu retorno de chamada de sanitização será parecido com algo do tipo ..

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

Copie 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ê espera trabalhar se copiar, está lá apenas para ilustração ...

Para rádios, se você não estiver usando várias seleções, 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'] ); ?> />

OBSERVAÇÃO: É claro que seria sensato verificar se a chave foi definida antes de comparar com seu valor (deixei isso de fora para mantê-lo curto).

O acima ajudou? Se não, deixe-me saber o que precisa ser esclarecido ... (ou o que eu estou perdendo) ...

RE: checked()

Você pode encontrar onde a função está definida (no WordPress) aqui. enlace

O primeiro parâmetro é basicamente uma instrução condicional e o segundo parâmetro (se você quiser defini-lo) é o que verificar. O valor padrão para comparação é TRUE ... então, se fizer checked( 1 == 1, true ) , eu verificaria se 1 == 1 é igual a true. Se a condição atingir uma correspondência, você receberá checked="checked" para você ..

OBSERVAÇÃO: Eu sou um lixo para explicar as coisas, então, se o texto acima precisar de mais esclarecimentos, não ficarei ofendido ... apenas me avise ..;)

    
por t31os 07.12.2010 / 16:35
28

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' ) ); ?> />
    
por zeo 07.12.2010 / 17:09

Tags