Как использовать флажок и переключатель на странице настроек?

16

Называй меня глупым, но я не могу понять, как это сделать. Для ввода текста я бы просто:

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

а затем подключить его в рабочий пресс с помощью register_setting(). Я мог тогда получить его ценность через get_option('option_name'). Как мне сделать это с флажками и переключателями?

Джоанн
источник

Ответы:

25

Я склонен хранить несколько вариантов в виде массива, поэтому у меня будет что-то вроде этого ..

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

Однако это зависит от того, как функция обратного вызова, которая дезинфицирует входящие данные, обрабатывает сохраненное значение (обратный вызов, который вы должны определить в качестве третьего параметра register_setting). Лично, когда я имею дело с флажками, я не устанавливаю ключ массива, где, как другие могут выбрать установить ключ в 0 (или что-то вместо этого) ...

Так что мой код на самом деле имеет тенденцию выглядеть следующим образом ...

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

Если я имею дело только с флажками, мой обратный вызов для очистки будет выглядеть примерно так ...

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

Разорвал это прямо из одного из моих классов плагинов (плагин только с опциями флажков), но это не тот код, который вы можете ожидать, если будете копировать, он там только для иллюстрации ...

Для радио, если вы не используете множественный выбор, это выглядит примерно так ...

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

ПРИМЕЧАНИЕ. Конечно, было бы разумно проверить, установлен ли ключ перед сравнением с его значением (я оставил это из вышеперечисленного, чтобы оно было коротким).

Помогло ли это? Если нет, просто дайте мне знать, что нужно уточнить ... (или что я пропускаю) ..

RE: checked()

Вы можете найти, где функция определена (в WordPress) здесь. http://core.trac.wordpress.org/browser/tags/3.0.2/wp-includes/general-template.php#L2228

Первый параметр в основном является условным оператором, а второй параметр (если вы хотите его определить) - это то, что нужно проверять. Значением по умолчанию для сравнения является ИСТИНА ... поэтому, если бы это было сделано, checked( 1 == 1, true )я бы проверил, равно ли 1 == 1 истине. Если условное совпадение совпадет, вы вернетесь checked="checked"к вам ..

ПРИМЕЧАНИЕ: я чушь в объяснении вещей, поэтому, если вышесказанное нуждается в дальнейшем разъяснении, я не буду обижаться ... просто дайте мне знать ..;)

t31os
источник
Мой мозг не функционирует в данный момент, потому что я расстроен, что не мог понять это самостоятельно. Не могли бы вы объяснить, что checked( 1 == $options['option_one']делает? Является ли checked()функция PHP, потому что я не мог найти его в руководстве.
Джоан
Я не могу объяснить в комментарии, я скоро
обновлю
Ааа! Большое спасибо за помощь! checked()Функция является только один я не мог найти через Google , потому что очевидно , что это не документировано. Я так привык получать именно то, что хочу при запросе «term + wordpress». :-)
Джоан
Чтобы уточнить, первый параметр - это что проверять, второй - что сравнивать первое значение с ... так что вы можете сделать это, например ... checked( 1, 2 )чтобы проверить, равен ли 1 2 ... что ничего не выдает, так как funciton специально разработан для вывода проверенного состояния для флажков или переключателей ... в любом случае, рад помочь ...;)
t31os
33

флажок:

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

радио:

<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
источник
В вашем коде есть опечатка (тип) ..
16:31
1
Вы дали прямой ответ на вопрос, поэтому вы получаете +1 от меня ...;)
t31os
3
Это должно быть ответом.
Это оно! Решено, должен быть ответ.
Миркобабини