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
Entonces, haga lo que se wp_enqueue_script
basa 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 cola se ejecuta con prioridad para asegurarse de que se ejecuta 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 el script 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 poner en cola y luego quitar de la cola si no se usa también funciona bien para complementos que definen códigos cortos que requieren scripts