我正在尝试将小部件仅加载到存在小部件的页面上的javascript。
我尝试在'showWidget'中添加add动作不起作用。
我做错了什么?
wp_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 */
}
答案 0 :(得分:1)
似乎新版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 */
}
答案 1 :(得分:0)
您希望使用is_active_widget()条件来执行以下操作:
<?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 */
}