Sie sollten in der Lage sein, wp_enqueue_script()
als Teil Ihrer Widget-Ausgabe aufzurufen .
Bearbeiten
Schnell und schmutzig am Beispiel der Widgets-API- Klasse:
<?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' );
?>
Fügen Sie Ihren wp_enqueue_script()
Anruf inline innerhalb der Ausgabe Ihres Widgets hinzu - dh innerhalb der 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()
ist nicht dasselbe wie das Aufrufenwp_enqueue_script()
aus Ihrer Widget- Ausgabe . Siehe aktualisierte Antwort.Wenn das Skript in den
<head>
Abschnitt gehen muss:Andernfalls funktioniert die Lösung von Chip Bennett, um sie in der Fußzeile in die Warteschlange zu stellen.
Die
$did_script
statische Variable ist nicht erforderlich. Ich habe sie nur verwendet, um weitere unnötige Aufrufe zu vermeiden,wp_enqueue_script
wenn mehrere Widget-Instanzen auf der Seite vorhanden sind.quelle
is-active_widget()
Sie nur wissen, ob ein Widget aktiviert wurde (dh in einen der Seitenleistenbereiche unter Darstellung> Widgets gezogen wurde), anstatt tatsächlich auf einer bestimmten Seite angezeigt zu werden .is_active_widget
gibt eine sidebar_id zurück, auch wenn diese Seitenleiste auf der aktuellen Seite nicht angezeigt wird. Dadurch wird das Skript auf jeder Seite hinzugefügt. (2)wp_enqueue_script
fügt ein Skript nur einmal hinzu, auch wenn Sie es mehrmals aufrufen. Keine Notwendigkeit fürself::$did_script
(3), da__construct
bei jeder Seitenanforderung aufgerufen wird, auch wenn das Widget nicht einmal angezeigt wirdPierre,
Ich gehe damit mit
wp_enqueue_script
und umwp_dequeue_script
und verwende eine Instanzvariable$is_active
in der Your_Widget-KlasseTun Sie dies auch,
wp_enqueue_script
basierend darauf,is_active_widget
welches Skript das Skript auf allen Seiten in die Warteschlange stellt, wobei der Fußzeilenparameter auf true gesetzt ist. Beachten Sie, dass die Warteschlange mit einer Priorität ausgeführt wird, um sicherzustellen, dass sie ausgeführt wird, bevor die Skripts ausgegeben werden.}}
Geben Sie dann in der Widget-Funktion an, ob das Widget auf dieser Seite aktiv ist
Deaktivieren Sie dann in der Fußzeile das Skript, wenn das Widget auf dieser Seite nicht aktiv ist
Dieser Ansatz, bei Nichtverwendung in die Warteschlange zu stellen und dann in die Warteschlange zu stellen, funktioniert auch gut für Plugins, die Shortcodes definieren, für die Skripte erforderlich sind
quelle
Ich habe den Hook 'wp_footer' in Betracht gezogen, da dieser Hook in der Fußzeile ausgeführt wird und wahrscheinlich der beste Weg ist, Skripte nur dort hinzuzufügen, wo das Widget verwendet wird.
quelle
wp_enqueue_script()
Bitte. Kein direkter Druck von JS.dynamic_sidebar
Aktion ausführen , um zu erkennen, wann Ihr Widget tatsächlich angezeigt wird, oder einfach Ihrenqueue_script()
Recht in diewidget()
Methode einfügen, wie von @ChipBennet empfohlen.