Вы должны иметь возможность звонить wp_enqueue_script()
как часть вашего вывода виджета.
редактировать
Быстрый и грязный, используя пример класса API виджетов
<?php
class wpse48337_Widget extends WP_Widget {
public function __construct() {
// widget actual processes
}
public function form( $instance ) {
// outputs the options form on admin
}
public function update( $new_instance, $old_instance ) {
// processes widget options to be saved
}
public function widget( $args, $instance ) {
// outputs the content of the widget
}
}
register_widget( 'wpse48337_Widget' );
?>
Добавьте свой wp_enqueue_script()
вызов в строке , в выводе вашего виджета - то есть в public function widget()
:
<?php
public function widget( $args, $instance ) {
// outputs the content of the widget
// Enqueue a script needed for
// the Widget's output
wp_enqueue_script( 'jquery-pluginname', $path, $deps );
// Rest of widget output goes here...
}
?>
is_active_widget()
это не то же самое , как вызовwp_enqueue_script()
из внутри вашего Widget выхода . Смотрите обновленный ответ.Если скрипт должен идти в
<head>
разделе:В противном случае решение Чипа Беннетта будет работать для постановки его в очередь в нижнем колонтитуле.
$did_script
Статическая переменная не требуется, я использовал его только , чтобы избежать в дальнейшем ненужных вызовов ,wp_enqueue_script
если существует несколько экземпляров виджета на странице ...источник
is-active_widget()
просто позволяет узнать, активирован ли виджет (т. Е. Перетащен ли он в одну из областей боковой панели в «Внешний вид»> «Виджеты»), в отличие от фактического появления на любой странице. ,is_active_widget
будет возвращать sidebar_id, даже если эта боковая панель не отображается на текущей странице. Это добавит скрипт на каждую страницу. (2)wp_enqueue_script
добавит скрипт только один раз, даже если вы вызовете его несколько раз. нет необходимости вself::$did_script
(3), потому что__construct
вызывается при каждом запросе страницы, даже если виджет даже не отображаетсяПьер,
То , как я справиться с этим с
wp_enqueue_script
иwp_dequeue_script
, а также использовать переменную экземпляра$is_active
в классе Your_WidgetТак что сделайте на
wp_enqueue_script
основе,is_active_widget
который ставит скрипт в очередь на всех страницах, но с параметром нижнего колонтитула, установленным в true. Обратите внимание, что очередь запускается с приоритетом, чтобы убедиться, что она запускается до вывода сценариев.}
Затем в функции виджета укажите, активен ли виджет на этой странице.
Затем в нижнем колонтитуле удалите скрипт, если виджет не активен на этой странице
Этот подход постановки очереди в очередь, а затем ее отмены, если не используется, также хорошо работает для плагинов, которые определяют шорткоды, требующие сценариев
источник
Я рассмотрел хук 'wp_footer', потому что этот хук выполняется в нижнем колонтитуле и, вероятно, является лучшим способом добавить сценарии только там, где используется виджет.
источник
wp_enqueue_script()
Пожалуйста. Нет прямой печати JS.dynamic_sidebar
действию, определяя, когда ваш виджет действительно отображается, либо, проще говоря, просто поместить своеenqueue_script()
право вwidget()
метод, как рекомендует @ChipBennet.