Як використовувати прапорець та перемикач на сторінці параметрів?


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"повернетесь до вас.

ПРИМІТКА: Я сміття пояснюю речі, тому, якщо вищезгадане потребує подальшого уточнення, я не ображаюся ... просто дайте мені знати ..;)


Мій мозок не працює з цим ім'ям, тому що я засмучений тим, що не міг зрозуміти це самостійно. Чи можете ви пояснити, що checked( 1 == $options['option_one']робить? Це checked()функція php, оскільки я не зміг її знайти в посібнику.
Джоан

Я не можу пояснити в коментарі, я скоро
оновлюю

А-а-а! Дякую за допомогу! Ця checked()функція є єдиною, яку я не міг знайти через Google, оскільки, мабуть, це не документально. Я так звик отримувати саме те, що хочу, коли запитував "термін + wordpress". :-)
Джоан

Для уточнення, перший параметр - що перевірити, другий - з чим порівняти перше значення з ... таким чином, ви могли це зробити, наприклад ... checked( 1, 2 )перевірити, чи 1 дорівнює 2 ..., що нічого б не дало, оскільки це funciton спеціально розроблений для виведення перевіреного стану для прапорців або радіо кнопок .. у будь-якому випадку,
ради

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

У вашому коді (тип) є друкарська помилка ..
t31os

1
Ви дали пряму відповідь на питання, тож ви отримаєте +1 від мене ...;)
t31os

3
Це має бути відповіддю.

Це воно! Вирішено, має бути відповідь.
mircobabini
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.