Код обновления виджета не работает

28 дек. 2010 г., 19:42:34
Просмотры: 1.67K
Голосов: 3

Насколько я понимаю, API виджетов довольно прост и понятен, но по какой-то причине мой код обновления не работает должным образом. Когда я нажимаю [сохранить] в админке, все поля очищаются, и ничего не сохраняется.

Когда я перетаскиваю виджет в область сайдбара, запись в базе данных создается.

1846, 0, 'widget_email-signup', 'a:2:{i:2;a:0:{}s:12:"_multiwidget";i:1;}', 'yes'

Когда я ввожу значения и сохраняю, они не сохраняются. Я перехватил и $new_instance, и $old_instance во время вызова метода update и записал их вывод в файл, но не нашел в них никаких данных.

Полный код: http://pastebin.com/gtrfuciZ

Метод Update

function update( $new_instance, $old_instance ) {
  $instance = $old_instance;

  $instance['title'] = $new_instance['title'];
  $instance['script'] = $new_instance['script'];

  file_put_contents( '/wp_results.txt', print_r( $old_instance, true ) );
  file_put_contents( '/wp_results.txt', print_r( $new_instance, true ), FILE_APPEND );

  return $instance; 
}

wp_results.txt (данные внутри метода update)

Array
(
    [title] => 
    [script] => 
)
Array
( )
0
Все ответы на вопрос 1
1

Вы используете get_field_id() для атрибута name элементов формы, но следует использовать get_field_name().

Имена полей имеют вид widget-{$id_base}[{$number}][{$field_name}], но в id нельзя использовать [], поэтому они выглядят как widget-{$id_base}-{$number}-{$field_name}.

28 дек. 2010 г. 22:08:56
Комментарии

get_field_name для имени поля. Пример кода можно найти в codex: http://codex.wordpress.org/Widgets_API#Example

hakre hakre
29 дек. 2010 г. 02:52:38