wordpress add_action传递变量

时间:2012-09-26 09:43:22

标签: php wordpress function arguments closures

我创建了一个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)手动将其添加到我的页脚,幻灯片播放就可以了。

我在最后一小时搜索了这个网站,试图找到一个解决方案,但我找不到任何可以适应我的具体问题的网站。

谢谢, 标记

2 个答案:

答案 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。发送脚本:

你应该在WordPress Answers

的答案中使用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?