Debería poder llamar wp_enqueue_script()
como parte de su salida de Widget.
Editar
Rápido y sucio, utilizando el ejemplo de clase de API de Widgets básico :
<?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' );
?>
Agregue su wp_enqueue_script()
llamada en línea , dentro de la salida de su widget, es decir, dentro de 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()
no es lo mismo que llamarwp_enqueue_script()
desde la salida de su widget . Ver respuesta actualizada.Si el script necesita ir en la
<head>
sección:De lo contrario, la solución de Chip Bennett funcionará para ponerla en cola en el pie de página.
La
$did_script
variable estática no es necesaria, la usé solo para evitar más llamadas innecesariaswp_enqueue_script
si hay varias instancias de widgets en la página ...fuente
is-active_widget()
solo le permite saber si se ha activado un widget (es decir, arrastrado a una de las áreas de la barra lateral en Apariencia> Widgets), en lugar de aparecer en una página determinada .is_active_widget
devolverá un sidebar_id, incluso si esa barra lateral no se muestra en la página actual. Esto agregará el script en cada página. (2)wp_enqueue_script
agregará un script solo una vez, incluso si lo llama varias veces. no es necesario paraself::$did_script
(3) porque__construct
se llama en cada solicitud de página, incluso si el widget ni siquiera se muestraPierre
La forma en que manejo esto es con
wp_enqueue_script
ywp_dequeue_script
, y uso una variable de instancia$is_active
en la clase Your_WidgetEntonces, haga lo que se
wp_enqueue_script
basa enis_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.}
Luego, en la función de widget, indique si el widget está activo en esa página
Luego, en el pie de página, elimine el script si el widget no está activo en esa página
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
fuente
Considere el enlace 'wp_footer' porque este enlace se ejecuta al pie de página, y es probablemente la mejor manera de agregar scripts solo donde se usa el widget.
fuente
wp_enqueue_script()
Por favor. Sin impresión directa de JS.dynamic_sidebar
acción, detectar cuándo se muestra realmente su widget, o, más simplemente, simplemente poner suenqueue_script()
derecho en elwidget()
método, como recomienda @ChipBennet.