Ich habe versucht, Skripte und Stile für ein WordPress-Widget unter den folgenden Bedingungen zu laden ...
- Die Skripte MÜSSEN in den HEAD geladen werden (sonst brechen sie).
- Die Skripte dürfen NUR geladen werden, wenn das Widget tatsächlich angezeigt wird (sie sind ziemlich schwer).
Ich habe viel gesucht, und dies scheint ein häufiges (ungelöstes) Problem zu sein ... aber ich hoffe, dass jemand hier eine Problemumgehung erfolgreich implementiert hat.
Das ist das Beste, was ich bisher habe ...
Das folgende einfache Widget druckt Text in die Seitenleiste. Es lädt erfolgreich jQuery bedingt (wenn das Widget tatsächlich angezeigt wird) ... allerdings immer nur in der Fußzeile! (Hinweis: Es funktioniert möglicherweise auch nur unter WordPress 3.3 , obwohl dieser Hack möglicherweise Abwärtskompatibilität bietet.)
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");') );
Sobald WordPress mit der Bearbeitung von Widgets beginnt, ist es anscheinend zu spät, um die Warteschlange zu öffnen (oder sogar die Registrierung von zuvor eingereihten Elementen aufzuheben).
Irgendwelche Ideen wäre sehr dankbar!
Kennzeichen.