Новая настраиваемая опция темы (ввод текста), дающая индексную ошибку

Я использую файл theme-options.php от ThemeShaper: http://themeshaper.com/2010/06/03/sample-theme-options/

Я могу успешно добавить новые варианты выпадающего списка, однако, когда я добавляю новый текстовый ввод, я получаю эту ошибку, когда я просматриваю ее в области администратора (я добавил THEME_DIRECTORY):

<br /> <b>Notice</b>: Undefined index: cpt_sm_dribbble_handle in <b>/[THEME_DIRECTORY]/theme-options.php</b> on line <b>359</b><br /> 

Когда я меняю входное значение на что-то еще и сохраняю его, он отлично работает и никогда больше не дает ошибку. Однако я не хочу, чтобы это сообщение об ошибке появлялось пользователям. Я предпочел бы, чтобы он просто выглядел пустым, так как еще не введено значение.

Я подозреваю, что получаю эту ошибку, потому что база данных не распознает этот новый параметр. И я думаю, что мне нужно какое-то подтверждение в моем коде, чтобы сказать, если это не существует, установите значение null. Хотя я не уверен, действительно ли это проблема, и если да, то как это исправить.

Вот минимальный код для моего файла параметров и для новой текстовой опции (я заметил строку, которая бросает ошибку):

 add_action('admin_init', 'cpt_options_init'); add_action('admin_menu', 'theme_options_add_page'); function cpt_options_init() { register_setting('cpt_options', 'cpt_theme_options', 'theme_options_validate'); } function theme_options_add_page() { add_theme_page('Theme Options', 'Theme Options', 'edit_theme_options', 'theme_options', 'theme_options_do_page'); } function theme_options_do_page() { global $sm_select_options; if (!isset($_REQUEST['settings-updated'])) $_REQUEST['settings-updated'] = false; ?> <form method="post" action="options.php"> <?php settings_fields('cpt_options'); ?> <?php $options = get_option('cpt_theme_options'); ?> <tr valign="top"> <th scope="row">Dribbble</th> <td> <label class="description" for="cpt_theme_options[cpt_sm_dribbble_handle]">Dribbble Username</label> <input id="cpt_theme_options[cpt_sm_dribbble_handle]" class="regular-text" type="text" name="cpt_theme_options[cpt_sm_dribbble_handle]" value="<?php esc_attr_e($options['cpt_sm_dribbble_handle']); ?>" /> // THIS IS THE LINE THAT IS THROWING THE ERROR (line 359) </td> </tr> </form> <?php } function theme_options_validate($input) { global $sm_select_options; // Say our text option must be safe text with no HTML tags $input['cpt_sm_dribbble_feed'] = wp_filter_nohtml_kses($input['cpt_sm_dribbble_feed']); return $input; } 

Любые идеи о том, что я делаю неправильно?

Спасибо за ваше время.

Оберните вызов в isset() условно в этой строке:

 <input id="cpt_theme_options[cpt_sm_dribbble_handle]" class="regular-text" type="text" name="cpt_theme_options[cpt_sm_dribbble_handle]" value="<?php esc_attr_e($options['cpt_sm_dribbble_handle']); ?>" /> 

Попробуйте что-то вроде этого:

 $cpt_sm_dribbble_handle = ( isset( $options['cpt_sm_dribbble_handle']) ? $options['cpt_sm_dribbble_handle']) : '' ); <input id="cpt_theme_options[cpt_sm_dribbble_handle]" class="regular-text" type="text" name="cpt_theme_options[cpt_sm_dribbble_handle]" value="<?php esc_attr_e($cpt_sm_dribbble_handle); ?>" /> 

РЕДАКТИРОВАТЬ

Примечание. Другой альтернативой является установка параметров по умолчанию для init, поэтому для этой опции установлено значение по умолчанию, например пустая строка.