Vous devriez pouvoir appeler wp_enqueue_script()
dans le cadre de la sortie de votre widget.
Éditer
Rapide et sale, en utilisant l' exemple de classe API Widgets bare-bones :
<?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' );
?>
Ajoutez votre wp_enqueue_script()
appel en ligne , dans la sortie de votre widget - c'est-à-dire dans 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()
n'est pas la même chose que d'appelerwp_enqueue_script()
depuis la sortie de votre widget . Voir la réponse mise à jour.Si le script doit aller dans la
<head>
section:Sinon, la solution de Chip Bennett fonctionnera pour la mettre en file d'attente dans le pied de page.
La
$did_script
variable statique n'est pas requise, je l'ai utilisée juste pour éviter d'autres appels inutiles àwp_enqueue_script
s'il y a plusieurs instances de widget sur la page ...la source
is-active_widget()
vous permet simplement de savoir si un widget a été activé (c'est-à-dire: glissé dans l'une des zones de la barre latérale dans Apparence> Widgets), par opposition à apparaître réellement sur une page donnée .is_active_widget
renverra un sidebar_id, même si cette barre latérale n'est pas affichée sur la page actuelle. Cela ajoutera le script sur chaque page. (2)wp_enqueue_script
n'ajoutera un script qu'une seule fois, même si vous l'appelez plusieurs fois. pas besoin deself::$did_script
(3) car__construct
est appelé à chaque demande de page, même si le widget n'est même pas affichéPierre,
La façon dont je gère cela est avec
wp_enqueue_script
etwp_dequeue_script
, et utilise une variable d'instance$is_active
dans la classe Your_WidgetIl en va de même en
wp_enqueue_script
fonction de la mise enis_active_widget
file d'attente du script sur toutes les pages mais avec le paramètre de pied de page défini sur true. Notez que la file d'attente est exécutée en priorité pour vous assurer qu'elle s'exécute avant la sortie des scripts.}
Ensuite, dans la fonction widget, indiquez si le widget est actif sur cette page
Ensuite, dans le pied de page, retirez le script si le widget n'est pas actif sur cette page
Cette approche de mise en file d'attente puis de retrait de la file d'attente si elle n'est pas utilisée fonctionne également bien pour les plugins qui définissent des codes courts qui nécessitent des scripts
la source
J'ai considéré le crochet 'wp_footer' parce que ce crochet est exécuté au pied de page, et est probablement le meilleur moyen d'ajouter des scripts uniquement là où le widget est utilisé.
la source
wp_enqueue_script()
S'il vous plaît. Pas d'impression directe de JS.dynamic_sidebar
action, détecter quand votre widget est réellement affiché, ou, plus simplement, simplement mettre votreenqueue_script()
droit dans lawidget()
méthode, comme le recommande @ChipBennet.