Код Javascript виджета (ajax)
У меня есть такой виджет:
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, - это подключить ее к тегу инициализации, а js - к функции темы, которая обрабатывает javascript.
Проблема в том, что это работает только тогда, когда виджет присутствует на боковой панели. И мне также нужно, чтобы он работал, когда я вызываю этот виджет с помощью the_widget() функция, например. внутри страницы. Я не знаю, как я мог бы получить параметры виджета, чтобы передать их в коде javascript...
Есть идеи?
1 answers
Проблема в том, что это работает только тогда, когда виджет присутствует на боковой панели.
Если вам нужен какой-то код для запуска независимо от виджета, я считаю, что имеет смысл добавить этот код отдельно от класса виджета.
И мне также нужно, чтобы он работал, когда я вызываю этот виджет с помощью функции the_widget(), например. внутри страницы. Я не знаю, как я мог бы получить параметры виджета, чтобы передать их в коде javascript...
Эта функция принимает массив экземпляров с данными виджета. Я не уверен в ваших особенностях, но я думаю, что вы можете передать все, что вам нужно, там.
Непосредственно вызываемый виджет не содержит никаких данных, кроме переданных в экземпляре (или полученных самостоятельно).