Anda harus dapat memanggil wp_enqueue_script()
sebagai bagian dari output Widget Anda.
Edit
Cepat dan kotor, menggunakan contoh API kelas telanjang Widgets 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' );
?>
Tambahkan inlinewp_enqueue_script()
panggilan Anda , dalam output Widget Anda - yaitu dalam :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()
tidak sama dengan meneleponwp_enqueue_script()
dari dalam keluaran Widget Anda . Lihat jawaban yang diperbarui.Jika skrip perlu masuk pada
<head>
bagian:Jika tidak, solusi Chip Bennett akan berfungsi untuk mengantri di footer.
The
$did_script
variabel statis tidak diperlukan, saya menggunakannya hanya untuk menghindari panggilan lebih lanjut tidak perlu untukwp_enqueue_script
jika ada beberapa contoh widget pada halaman ...sumber
is-active_widget()
cukup beri tahu Anda apakah widget telah diaktifkan (mis.: Diseret ke salah satu area bilah sisi di Appearance> Widgets), dan bukan benar-benar muncul di halaman tertentu .is_active_widget
akan mengembalikan sidebar_id, bahkan jika sidebar itu tidak ditampilkan pada halaman saat ini. Ini akan menambahkan skrip pada setiap halaman. (2)wp_enqueue_script
akan menambahkan skrip hanya sekali, bahkan jika Anda menyebutnya beberapa kali. tidak perlu untukself::$did_script
(3) karena__construct
dipanggil pada setiap permintaan halaman, bahkan jika widget bahkan tidak ditampilkanPierre,
Cara saya menangani ini adalah dengan
wp_enqueue_script
danwp_dequeue_script
, dan menggunakan variabel instan$is_active
di kelas Your_WidgetJadi lakukan
wp_enqueue_script
berdasarkanis_active_widget
yang enqueues skrip di semua halaman tetapi dengan parameter footer disetel ke true. Perhatikan bahwa dequeue dijalankan pada prioritas untuk memastikan itu berjalan sebelum skrip di-output.}
Kemudian pada fungsi widget tunjukkan apakah widget aktif di halaman itu
Kemudian di footer dequeue script jika widget tidak aktif di halaman itu
Pendekatan enqueue ini kemudian dequeueing jika tidak digunakan juga berfungsi dengan baik untuk plugin yang mendefinisikan shortcode yang membutuhkan skrip
sumber
Saya menganggap kait 'wp_footer' karena kait ini dieksekusi di footer, dan mungkin merupakan cara terbaik untuk menambahkan skrip hanya di mana widget digunakan.
sumber
wp_enqueue_script()
silahkan. Tidak ada pencetakan langsung JS.dynamic_sidebar
tindakan, mendeteksi kapan widget Anda benar-benar ditampilkan, atau, lebih sederhana, cukup masukkanenqueue_script()
hak Anda ke dalamwidget()
metode, seperti yang direkomendasikan @ChipBennet.