it-swarm.com.de

Widget Javascript Code (Ajax)

Ich habe ein Widget wie dieses:

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
  }
}

Grundsätzlich gibt es eine Schaltfläche, die eine Ajax-Anfrage auslöst, die einige Informationen abruft ...

Wie Sie sehen können, konnte ich die Ajax-Funktion nur hinzufügen, indem ich sie an das init-Tag und das js an eine Theme-Funktion knüpfte, die das Javascript handhabt.

Das Problem ist, dass dies nur funktioniert, wenn das Widget in einer Seitenleiste vorhanden ist. Und ich brauche es auch, um zu funktionieren, wenn ich dieses Widget mit der Funktion the_widget () aufrufe, zum Beispiel. innerhalb einer Seite. Ich weiß nicht, wie ich die Widget-Optionen abrufen kann, um sie im Javascript-Code zu übergeben ...

Irgendwelche Ideen?

1
Alex

Das Problem ist, dass dies nur funktioniert, wenn das Widget in einer Seitenleiste vorhanden ist.

Wenn Sie Code benötigen, um unabhängig vom Widget ausgeführt zu werden, ist es meines Erachtens sinnvoll, diesen Code getrennt von der Widget-Klasse hinzuzufügen.

Und ich brauche es auch, um zu funktionieren, wenn ich dieses Widget mit der Funktion the_widget () aufrufe, zum Beispiel. innerhalb einer Seite. Ich weiß nicht, wie ich die Widget-Optionen abrufen kann, um sie im Javascript-Code zu übergeben ...

Diese Funktion verwendet ein Instanzarray mit Widgetdaten. Ich bin mir nicht sicher, was Ihre Einzelheiten angeht, aber ich denke, Sie können dort alles weitergeben, was Sie brauchen.

Das direkt aufgerufene Widget enthält keine anderen Daten als die in der Instanz übergebenen (oder von ihm selbst abgerufenen).

0
Rarst