動作をよく確認して、自己責任で・・。
widget_idなどの可変部分を含めたものをフッターに出力したい場合です。
<?php
class CustomWidget extends WP_Widget {
function __construct() {
parent::__construct( 'my-widget-id','My Widget Name');
}
function widget( $args, $instance ) {
echo "test";
add_action( 'wp_footer', function() use ($args,$instance){
echo '<h1>' . $args['widget_id'] . '</h1>';
echo '<pre>'; print_r( $instance ); echo '</pre>';
echo '<pre>'; print_r( $args); echo '</pre>';
echo '<hr>';
});
}
function update( $new_instance, $old_instance ) {}
function form($instance) {}
}
//PHP 5.3
add_action( 'widgets_init', function(){
register_widget( 'CustomWidget' );
});
参考:
・Insert to wp_footer if widget is found in the sidebar - WordPress Development Stack Exchange
上記サンプルを動かしてみれば、動作がわかりやすいと思う。コンストラクタ(__construct)の中で、add_action( 'wp_footer',をしてもうまく行かないケースなどの場合に使えると思う。
コンストラクタは1度しか呼ばれないけど、widget( $args, $instance )は貼り付けたwidgetの数だけ呼ばれるみたいなんですね。
・PHP: 無名関数 - Manual
無名関数とuse文当たりの解説は上記が分かりよいと思う
追記:2016/10/29
widget( $args, $instance )の「echo "test";」を書き換えると確かに文字が変わるのですが、add_action( 'wp_footer', 部分だけが動作してないように見えるケースがありました。ウジェット自体を貼り付けなおすとうまくいったりします。
widget( $args, $instance )の「echo "test";」を書き換えると確かに文字が変わるのですが、add_action( 'wp_footer', 部分だけが動作してないように見えるケースがありました。ウジェット自体を貼り付けなおすとうまくいったりします。
ウジェットのID番号みたいなものを取得したい
$widget_id = $args['widget_id'];
$idno= substr(strrchr($widget_id, "-"), 1);
・PHP: strrchr - Manual
widget( $args, $instance ) 関数内なら上記のような感じで、無理やり取得できる。他のもっと良い方法があるのかもしれませんが・・。
参考
・actions - passing variables inside a widget add_action - WordPress Development Stack Exchangeadd_action( 'wp_enqueue_scripts', function() {
if ( is_active_widget(false, false, $widgetid) ) {
wp_enqueue_style('fpw_styles_css');
}
}, 5); // used priority 5 to make possible dequeue using default 10 priority
・widgets - How to use wp_dequeue_style() for style enqueued in WP_Widget class - WordPress Development Stack Exchange・theme development - How to enqueue script if widget is displayed on page? - WordPress Development Stack Exchange
スポンサーリンク
コメントを残す