Pierre,
Cara saya menangani ini adalah dengan wp_enqueue_script
dan wp_dequeue_script
, dan menggunakan variabel instan $is_active
di kelas Your_Widget
Jadi lakukan wp_enqueue_script
berdasarkan is_active_widget
yang enqueues skrip di semua halaman tetapi dengan parameter footer disetel ke true. Perhatikan bahwa dequeue dijalankan pada prioritas untuk memastikan itu berjalan sebelum skrip di-output.
function enqueue_scripts() {
if ( is_active_widget( false, $this->id, $this->id_base, true ) ) {
wp_enqueue_script( 'your-script-handle', 'your-script-url', array(), '1.0', true );
add_action( 'wp_footer', array($this,'dequeue_redundant_scripts'), 1 );
}
}
Kemudian pada fungsi widget tunjukkan apakah widget aktif di halaman itu
function widget( $args, $instance ) {
// outputs the content of the widget
$this->is_active = true;
}
Kemudian di footer dequeue script jika widget tidak aktif di halaman itu
function dequeue_redundant_scripts() {
if (! $this->is_active) {
wp_dequeue_script('your-script-handle');
}
}
Pendekatan enqueue ini kemudian dequeueing jika tidak digunakan juga berfungsi dengan baik untuk plugin yang mendefinisikan shortcode yang membutuhkan skrip