Widget Javascript code (ajax)

时间:2010-09-12 作者:Alex

我有这样一个小部件:

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
  }
}
基本上,它有一个按钮,可以触发一个ajax请求来检索一些信息。。。

正如您所见,我添加ajax函数的唯一方法是将其挂接到init标记,并将js挂接到处理javascript的主题函数。

问题是,只有当小部件出现在侧栏中时,这才起作用。当我调用这个小部件时,我也需要它工作the_widget() 函数,例如在页面内。我不知道如何检索小部件选项以在javascript代码中传递它们。。。

有什么想法吗?

1 个回复
最合适的回答,由SO网友:Rarst 整理而成

问题是,只有当小部件出现在侧栏中时,这才起作用。

如果您需要一些独立于小部件运行的代码,我认为可以从小部件类中单独添加这些代码。

我还需要它在我使用\\u widget()函数调用这个小部件时工作,例如在页面内。我不知道如何检索小部件选项以在javascript代码中传递它们。。。

该函数使用带有小部件数据的实例数组。我不确定你的具体情况,但我认为你可以在那里传递你需要的任何东西。

直接调用的小部件除了传入实例(或自身检索)之外,没有任何数据。

结束