Pierre,
La façon dont je gère cela est avec wp_enqueue_scriptet wp_dequeue_script, et utilise une variable d'instance $is_activedans la classe Your_Widget
Il en va de même en wp_enqueue_scriptfonction de la mise en is_active_widgetfile d'attente du script sur toutes les pages mais avec le paramètre de pied de page défini sur true. Notez que la file d'attente est exécutée en priorité pour vous assurer qu'elle s'exécute avant la sortie des scripts.
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 );
}
}
Ensuite, dans la fonction widget, indiquez si le widget est actif sur cette page
function widget( $args, $instance ) {
// outputs the content of the widget
$this->is_active = true;
}
Ensuite, dans le pied de page, retirez le script si le widget n'est pas actif sur cette page
function dequeue_redundant_scripts() {
if (! $this->is_active) {
wp_dequeue_script('your-script-handle');
}
}
Cette approche de mise en file d'attente puis de retrait de la file d'attente si elle n'est pas utilisée fonctionne également bien pour les plugins qui définissent des codes courts qui nécessitent des scripts