wordpress add_action传递变量

Mar*_*kol 0 php wordpress closures arguments function

我创建了一个Wordpress函数来在任何页面中显示幻灯片.该功能运行良好,我可以添加一个函数调用到我的任何模板页面来显示幻灯片.

样本函数调用: add_slideshow($slideshow_id, $gallery_id, $show_navigation_handles);

我在页脚中硬编了jquery.但是,我想add_action('wp_footer','')在我的main函数中使用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>";
  });  
Run Code Online (Sandbox Code Playgroud)

但是PHP变量$slider_id没有传递给发出的javascript,因此我的页脚输出是:

<script type='text/javascript'>
    $(document).ready(function(){ 
        $('#').flexslider();
    });
</script>
Run Code Online (Sandbox Code Playgroud)

什么时候应该是这样的:

<script type='text/javascript'>
    $(document).ready(function(){ 
        $('#some_id_here').flexslider();
    });
</script>
Run Code Online (Sandbox Code Playgroud)

如果我使用正确的ID(#actual_slideshow_id)手动将其添加到我的页脚,幻灯片播放就可以了.

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

谢谢,马克

Sep*_*ter 5

1.缺失价值(问题的答案):

首先,您的$ slider_id在匿名函数中不可用的原因是因为您没有将它包含在闭包中,use ($slider_id)如下所示:

  function() use ($slider_id) { 
    echo "<script type='text/javascript'>
        $(document).ready(function(){ 
            $('#" . $slider_id . "').flexslider();
        });
    </script>";
  }
Run Code Online (Sandbox Code Playgroud)

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+中的回调,并且我(个人)不会依赖它们,只要该编码声明只允许使用字符串格式的语法(即使相同)文章稍后会使用基于闭包的示例).

3.发出脚本:

您应该在WordPress Answers中根据此答案使用register_script和enqueue_script

(如果脚本是否在页脚中,则有一个bool参数说明).

要在运行时将特定参数传递给脚本,请使用localize脚本方法.这方面的教程是在WordPress的Otto上

希望这可以帮助.