Pierre,
La forma en que manejo esto es con wp_enqueue_script
y wp_dequeue_script
, y uso una variable de instancia $is_active
en la clase Your_Widget
Al igual que wp_enqueue_script
basado en is_active_widget
que pone en cola el script en todas las páginas pero con el parámetro de pie de página establecido en verdadero. Tenga en cuenta que la salida de la cola se ejecuta con una prioridad para asegurarse de que se ejecute antes de que se generen los 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 );
}
}
Luego, en la función de widget indique si el widget está activo en esa página
function widget( $args, $instance ) {
// outputs the content of the widget
$this->is_active = true;
}
Luego, en el pie de página, elimine la cola de la secuencia de comandos si el widget no está activo en esa página
function dequeue_redundant_scripts() {
if (! $this->is_active) {
wp_dequeue_script('your-script-handle');
}
}
Este enfoque de encolar y luego de encolar si no se usa también funciona bien para los complementos que definen códigos cortos que requieren scripts