it-swarm-es.com

Widget Javascript code (ajax)

Tengo un widget como este:

class test_widget extends WP_Widget{

  function test_widget(){
    $widget_ops = array('description' => 'test widget');
    $this->WP_Widget(false, 'Test', $widget_ops);

    add_action('init', array(&$this, 'ajax'), 99);

    // include in jQuery(document).ready()
    add_action('jquery_init', array(&$this, 'js'));
  }

  function js(){
    // get settings from all widget instances
    $widget_settings = get_option($this->option_name);

    // identify this instance
    foreach($widget_settings as $instance => $options):

      $id = $this->id_base.'-'.$instance;
      $block_id = 'instance-'.$id;

      if (is_active_widget(false, $id, $this->id_base)): ?>

      $("#<?php echo $block_id; ?> .button").click(function(){

        $.ajax({
          type: "GET",
          url: "<?php echo get_bloginfo('url'); ?>",
          data: { id: "<?php echo $block_id; ?>",
                  some_data: "<?php echo $options['some_widget_option']; ?>",
                  my_widget_ajax: 1 },
          success: function(response){
             alert(response);
             // yey
          }
        });
        return false;

      });

      <?php endif;
    endforeach;
  }

  function ajax(){
    if(isset($_GET['my_widget_ajax'])):

      $some_data = esc_attr($_GET['some_data']);

      echo $some_data;
      exit();
    endif;
  }

  function widget($args, $instance){
    // the widget front-end

  }

  function update($new_instance, $old_instance){
    // update form
    return $instance;
  }

  function form($instance){
    // the form
  }
}

Básicamente hay un botón que activa una solicitud ajax que recupera algo de información ...

Como se puede ver, la única forma en que podría agregar la función ajax fue conectándola a la etiqueta de inicio, y el js a una función de tema que maneja el javascript.

El problema es que esto solo funciona cuando el widget está presente en una barra lateral. Y también necesito que funcione cuando llamo a este widget con la función the_widget () , por ejemplo. dentro de una pagina No sé cómo podría recuperar las opciones del widget para pasarlas en el código javascript ...

¿Algunas ideas?

1
Alex

El problema es que esto solo funciona cuando el widget está presente en una barra lateral.

Si necesita que un código se ejecute independientemente del widget, creo que tiene sentido agregar ese código por separado de la clase del widget.

Y también necesito que funcione cuando llamo a este widget con la función the_widget (), por ejemplo. dentro de una pagina No sé cómo podría recuperar las opciones del widget para pasarlas en el código javascript ...

Esa función toma la matriz de instancia con datos de widget. No estoy seguro de tus detalles, pero creo que puedes pasar lo que necesites allí.

El widget llamado directamente no tiene datos, excepto los que se pasan en la instancia (o se recuperan por sí mismos).

0
Rarst