J'ai essayé de charger des scripts et des styles pour un widget WordPress avec les conditions suivantes ...
- Les scripts DOIVENT se charger dans la TETE (sinon ils se cassent).
- Les scripts doivent se charger UNIQUEMENT lorsque le widget s'affiche réellement (ils sont assez lourds).
J'ai fait beaucoup de recherches, et cela semble être un problème courant (non résolu) ... mais j'espère que quelqu'un ici a réussi à mettre en œuvre une solution de contournement.
C'est le meilleur que j'ai eu jusqu'à présent ...
Ce qui suit est un widget simple qui imprime du texte dans la barre latérale. Il charge avec succès jQuery conditionnellement (lorsque le widget est réellement affiché) ... mais seulement dans le pied de page! (Remarque: il peut également ne fonctionner que sur WordPress 3.3 , bien que ce hack puisse fournir une compatibilité descendante).
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");') );
Il semble qu'une fois que WordPress commence à gérer les widgets, il est trop tard pour mettre en file d'attente (ou même annuler l'enregistrement de quelque chose mis en file d'attente plus tôt).
Toutes les idées seraient très appréciées!
Marque.