我一直在尝试加载WordPress小部件的脚本和样式,条件如下。。。
脚本必须装入头部(否则会中断)脚本只能在小部件实际显示时加载(它们很重)我做了很多搜索,这似乎是一个常见的(未解决的)问题。。。但我希望这里有人成功地实施了一种变通方法。
这是我目前为止最好的。。。
下面是一个将文本打印到侧栏的简单小部件。它成功地有条件地加载jQuery(当小部件实际显示时)。。。虽然只在页脚!(注:itmay also only work on WordPress 3.3, 虽然this hack 可能提供向后兼容性)。
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");\') );
似乎一旦WordPress开始处理小部件,就太晚了,无法排队(甚至取消注册之前排队的东西)。
任何想法都将不胜感激!
做记号
SO网友:Bainternet
Wordpress是一个很好的功能is_active_widget
您可以在构造和测试小部件是否存在于当前页面中时使用它,并基于该示例添加脚本/样式:
function __construct() {
parent::__construct(__CLASS__, \'BasicWidget\', array(
\'classname\' => __CLASS__,
\'description\' => "This is a basic widget template that outputs text to the sidebar"
));
if ( is_active_widget(false, false, $this->id_base) )
add_action( \'wp_head\', array(&$this, \'add_styles_and_scripts\') );
}
function add_styles_and_scripts(){
//since its wp_head you need to echo out your style link:
echo \'<link rel="stylesheet" href="http://example.com/css/style.css" type="text/css" />\';
//as for javascript it can be included using wp_enqueue_script and set the footer parameter to true:
wp_enqueue_script( \'widget_script\',\'http://example.com/js/script.js\',array(),\'\',true );
}