He estado intentando cargar scripts y estilos para un widget de WordPress con las siguientes condiciones ...
- Los scripts DEBEN cargarse en la CABEZA (de lo contrario, se romperán).
- Las secuencias de comandos SOLO deben cargarse cuando el widget realmente se muestra (son bastante pesados).
He realizado muchas búsquedas y este parece ser un problema común (sin resolver) ... pero espero que alguien aquí haya implementado con éxito una solución.
Esto es lo mejor que tengo hasta ahora ...
El siguiente es un widget simple que imprime texto en la barra lateral. Se carga correctamente jQuery condicionalmente (cuando se muestra el widget) ... ¡aunque solo en el pie de página! (Nota: también puede funcionar en WordPress 3.3 , aunque este truco puede proporcionar compatibilidad con versiones anteriores).
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");') );
Parece que una vez que WordPress comienza a manejar widgets, es demasiado tarde para poner en cola (o incluso para cancelar el registro de algo en cola).
¡Cualquier idea sería muy apreciada!
Mark.