我有这样一个小部件:
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代码中传递它们。。。
有什么想法吗?