Próbowałem załadować skrypty i style dla widgetu WordPress z następującymi warunkami ...
- Skrypty MUSZĄ ładować się do HEAD (w przeciwnym razie się zepsują).
- Skrypty muszą się ładować TYLKO wtedy, gdy widżet faktycznie się wyświetla (są dość ciężkie).
Przeprowadziłem wiele poszukiwań i wydaje się, że jest to powszechny (nierozwiązany) problem ... ale mam nadzieję, że ktoś tutaj pomyślnie wdrożył obejście.
To najlepsze, jakie dotychczas miałem ...
Poniżej znajduje się prosty widget, który drukuje tekst na pasku bocznym. Z powodzeniem ładuje jQuery warunkowo (gdy widżet jest faktycznie wyświetlany) ... choć tylko w stopce! (Uwaga: może również działać tylko na WordPress 3.3 , chociaż ten hack może zapewnić zgodność wsteczną).
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");') );
Wydaje się, że gdy WordPress zacznie obsługiwać widżety, jest już za późno, aby umieścić je w kolejce (a nawet wyrejestrować coś zamaskowanego wcześniej).
Jakiekolwiek pomysły będą mile widziane!
Znak.