Пьер,
То , как я справиться с этим с wp_enqueue_script
и wp_dequeue_script
, а также использовать переменную экземпляра $is_active
в классе Your_Widget
Так что сделайте на wp_enqueue_script
основе, is_active_widget
который ставит скрипт в очередь на всех страницах, но с параметром нижнего колонтитула, установленным в true. Обратите внимание, что очередь запускается с приоритетом, чтобы убедиться, что она запускается до вывода сценариев.
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 );
}
}
Затем в функции виджета укажите, активен ли виджет на этой странице.
function widget( $args, $instance ) {
// outputs the content of the widget
$this->is_active = true;
}
Затем в нижнем колонтитуле удалите скрипт, если виджет не активен на этой странице
function dequeue_redundant_scripts() {
if (! $this->is_active) {
wp_dequeue_script('your-script-handle');
}
}
Этот подход постановки очереди в очередь, а затем ее отмены, если не используется, также хорошо работает для плагинов, которые определяют шорткоды, требующие сценариев