私はこのようなウィジェットを持っています:
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のコードでそれらを渡すためにウィジェットのオプションを取得することができるかわからない...
何か案は?
問題は、これがウィジェットがサイドバーにあるときにのみ機能することです。
ウィジェットから独立して実行するコードが必要な場合は、そのコードをウィジェットクラスとは別に追加するのが理にかなっています。
また、このウィジェットをthe_widget()関数で呼び出すときにも機能する必要があります。ページの中私はどのように私はJavaScriptのコードでそれらを渡すためにウィジェットのオプションを取得することができるかわからない...
その関数はウィジェットデータを持つインスタンス配列を取ります。私はあなたの詳細についてはよくわかりませんが、私はあなたがそこに必要なものは何でも渡すことができると思います。
直接呼び出されたウィジェットには、インスタンスで渡される(または自分自身で取得される)以外にデータはありません。