Pierre,
La façon dont je gère cela est avec wp_enqueue_script
et wp_dequeue_script
, et utilise une variable d'instance $is_active
dans la classe Your_Widget
Il en va de même en wp_enqueue_script
fonction de la mise en is_active_widget
file 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