Saya telah mencoba memuat skrip dan gaya untuk widget WordPress dengan ketentuan berikut ...
- Script HARUS dimuat di KEPALA (kalau tidak mereka rusak).
- Skrip harus HANYA memuat ketika widget benar-benar ditampilkan (cukup berat).
Saya telah melakukan banyak pencarian, dan ini tampaknya menjadi masalah yang umum (belum terpecahkan) ... tapi saya berharap seseorang di sini telah berhasil mengimplementasikan solusi.
Ini yang terbaik yang saya dapatkan sejauh ini ...
Berikut ini adalah widget sederhana yang mencetak teks ke sidebar. Berhasil memuat jQuery secara kondisional (saat widget benar-benar ditampilkan) ... meskipun hanya ada di catatan kaki! (Catatan: mungkin juga hanya berfungsi di WordPress 3.3 , meskipun peretasan ini mungkin memberikan kompatibilitas ke belakang).
class BasicWidget extends WP_Widget
{
function __construct() {
parent::__construct(__CLASS__, 'BasicWidget', array(
'classname' => __CLASS__,
'description' => "This is a basic widget template that outputs text to the sidebar"
));
}
function form($instance) {
$instance = wp_parse_args( (array) $instance, array( 'title' => '' ) );
$title = $instance['title'];
?>
<p><label for="<?php echo $this->get_field_id('title'); ?>">Title: <input class="widefat" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" type="text" value="<?php echo esc_attr($title); ?>" /></label></p>
<?php
}
function update($new_instance, $old_instance) {
$instance = $old_instance;
$instance['title'] = $new_instance['title'];
return $instance;
}
function widget($args, $instance) {
extract($args, EXTR_SKIP);
echo $before_widget;
$title = empty($instance['title']) ? ' ' : apply_filters('widget_title', $instance['title']);
if (!empty($title))
echo $before_title . $title . $after_title;;
echo "<h1>This is a basic widget!</h1>";
echo $after_widget;
// if we're echoing out content, enqueue jquery.
if (!empty($after_widget)) {
wp_enqueue_script('jquery');
}
}
}
add_action( 'widgets_init', create_function('', 'return register_widget("BasicWidget");') );
Tampaknya begitu WordPress mulai menangani widget, sudah terlambat untuk melakukan enqueue (atau bahkan membatalkan pendaftaran sesuatu yang sudah enqueued sebelumnya).
Setiap ide akan sangat dihargai!
Menandai.