我创建了一个Wordpress功能,可以在任何页面中显示幻灯片。该功能运行良好,我可以向我的任何模板页面添加函数调用,以显示幻灯片。
示例函数调用:add_slideshow($slideshow_id, $gallery_id, $show_navigation_handles);
我在页脚中硬编码了jquery。但是,我想在我的main函数中使用add_action('wp_footer','')
将jquery添加到页脚,因为每个幻灯片可能有不同的设置(不同的slideshow_id,gallery_id等)。
这是我的功能:
function add_slideshow($slider_id, $gal_id, $show_controls){
//get the slideshow images from database and return HTML - A Bit Long to show here but it WORKS!
//add the required script to footer - JavaScript is added to footer but not $slider_id
add_action('wp_footer', function() {
echo "<script type='text/javascript'>
$(document).ready(function(){
$('#" . $slider_id . "').flexslider();
});
</script>";
});
但PHP变量$slider_id
没有传递给发出的javascript,因此我的页脚输出是:
<script type='text/javascript'>
$(document).ready(function(){
$('#').flexslider();
});
</script>
应该是这样的:
<script type='text/javascript'>
$(document).ready(function(){
$('#some_id_here').flexslider();
});
</script>
如果我使用正确的ID(#actual_slideshow_id)手动将其添加到我的页脚,幻灯片播放就可以了。
我在最后一小时搜索了这个网站,试图找到一个解决方案,但我找不到任何可以适应我的具体问题的网站。
谢谢, 标记
答案 0 :(得分:5)
<强> 1。缺失价值(问题的答案):
首先,您的$ slider_id在匿名函数中不可用的原因是因为您没有将use ($slider_id)
包含在这个闭包中:
function() use ($slider_id) {
echo "<script type='text/javascript'>
$(document).ready(function(){
$('#" . $slider_id . "').flexslider();
});
</script>";
}
<强> 2。在add_action()
方法中使用匿名函数:
来自WordPress Codex for add_action():
add_action($ tag,$ function_to_add,$ priority,$ accepted_args);
参数
...
$ function_to_add(callback)(必填)的名称 你希望被召唤的功能。 注意:只有“回调”类型的PHP文档中列出的字符串格式的语法才有效。 [我的重点]
...
请注意,闭包(也称为匿名函数)仅作为PHP 5.3+中的回调,并且我(个人)不会依赖它们,只要该codex声明只允许使用字符串格式的语法(甚至虽然同一篇文章稍后会使用基于闭包的示例。)
第3。发送脚本:
的答案中使用register_script和enqueue_script(如果脚本是否在页脚中,则有一个bool参数说明。)
要在运行时将特定参数传递给脚本,请使用localize脚本方法。这方面的教程是Otto on Wordpress
希望这有帮助。
答案 1 :(得分:0)
1)您需要使用全局
$myvar ='123';
add_action('blabla','your_func');
function your_func(){
global $myvar;
}
2)或者,使用 do_action :
- can I pass arguments to my function through add_action?