我想让一个小部件只在小部件存在的页面上加载javascript。
我试过在'showWidget'中添加add操作,但没有成功。
我做错了什么?
PHPwp_register_sidebar_widget('MyWidget','MyWidget', 'showWidget');
add_action('wp_enqueue_scripts', 'addScript'); //now the script appears on every page
function addScript()
{
wp_register_script('MyWidgetJs', plugins_url( '/script.js' , __FILE__), array('jquery'));
wp_enqueue_script('MyWidgetJs');
}
function showWidget($args)
{
// add_action('wp_enqueue_scripts', 'addScript'); //I tried this but it doesn't work :(
wp_enqueue_script('MyWidgetJs');
extract($args);
/* do widget stuff */
}
新版本的WordPress似乎支持这个:http://codex.wordpress.org/Version_3.3
注册你的脚本,但不要进入队列。在小部件PHP中,添加wp_enqueue_script('your_script_name');只有当你的小部件被使用时,它才会加载它,并把它放在页脚。
你要升级到3.3,对吗?:)
所以,像这样的东西应该工作得很好:
wp_register_sidebar_widget('MyWidget','MyWidget', 'showWidget');
function showWidget($args) {
wp_enqueue_script('MyWidgetJs');
extract($args);
/* do widget stuff */
}
您希望使用is_active_widget() conditional来执行以下操作:
<?php
if ( is_active_widget('MyWidget') ) {
add_action('wp_enqueue_scripts', 'addScript');
}
?>
使用上述代码,最终的小部件可能看起来像:
<?php
if ( is_active_widget('MyWidget') ) {
add_action('wp_enqueue_scripts', 'addScript');
}
function addScript()
{
wp_register_script('MyWidgetJs', plugins_url( '/script.js' , __FILE__), array('jquery'));
wp_enqueue_script('MyWidgetJs');
}
function showWidget($args)
{
wp_enqueue_script('MyWidgetJs');
extract($args);
/* do widget stuff */
}