He estado tratando de cargar scripts y estilos para un widget de WordPress con las siguientes condiciones ...
- Las secuencias de comandos DEBEN cargarse en la CABEZA (de lo contrario se rompen).
- Las secuencias de comandos SOLO deben cargarse cuando el widget realmente se muestra (son bastante pesadas).
He realizado muchas búsquedas, y este parece ser un problema común (no resuelto) ... pero espero que alguien aquí haya implementado con éxito una solución alternativa.
Esto es lo mejor que tengo hasta ahora ...
El siguiente es un widget simple que imprime texto en la barra lateral. Carga con éxito jQuery condicionalmente (cuando el widget se muestra realmente) ... ¡aunque solo en el pie de página! (Nota: también puede funcionar solo 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 cancelar el registro de algo en cola antes).
¡Cualquier idea sería muy apreciada!
Marca.