Código de Actualización de Widget No Funciona

28 dic 2010, 19:42:34
Vistas: 1.67K
Votos: 3

Según lo que puedo ver, la API de widgets es bastante directa y simple, pero por alguna razón mi código de actualización no está teniendo efecto correctamente. Cuando presiono [guardar] desde el backend, todos los campos se vacían y nada se guarda realmente.

Cuando arrastro mi widget a la región de la barra lateral, se crea una entrada en la base de datos para el widget.

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

Cuando ingreso valores y guardo, ninguno se guarda. He interceptado tanto $new_instance como $old_instance durante la llamada a mi método de actualización y escribí sus salidas en un archivo, pero no encontré nada en ellos.

Código Completo: http://pastebin.com/gtrfuciZ

Método de Actualización

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 (datos encontrados dentro del método de actualización)

Array
(
    [title] => 
    [script] => 
)
Array
( )
0
Todas las respuestas a la pregunta 1
1

Estás usando get_field_id() para el atributo name de los elementos del formulario, pero deberías usar get_field_name().

Los nombres de los campos tienen el formato widget-{$id_base}[{$number}][{$field_name}], pero los ID no pueden usar [], por lo que son como widget-{$id_base}-{$number}-{$field_name}.

28 dic 2010 22:08:56
Comentarios

get_field_name para el nombre del campo. El código de ejemplo está en el codex: http://codex.wordpress.org/Widgets_API#Example

hakre hakre
29 dic 2010 02:52:38