0

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

示例函数调用:add_slideshow($slideshow_id, $gallery_id, $show_navigation_handles);

我已经在页脚中对 jquery 进行了硬编码。但是,我想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) 手动将其添加到页脚,则幻灯片播放正常。

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

谢谢,马克

4

2 回答 2

6

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

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

add_action('wp_footer', function($arguments) use ($slider_id) { 
    echo "<script type='text/javascript'>
        $(document).ready(function(){ 
            $('#" . $slider_id . "').flexslider();
        });
    </script>";
}, $priority_integer, $accepted_arguments_integer);

2.在方法中使用匿名函数add_action()

来自add_action() 的 WordPress 法典

add_action($tag, $function_to_add, $priority, $accepted_args);

参数

...

$function_to_add (callback) (required) 你希望被调用的函数的名字。注意:只有“回调”类型的 PHP 文档中列出的字符串格式的语法才有效。[我的重点]

...

请注意,闭包(也称为匿名函数)仅在 PHP 5.3+ 中用作回调,并且我(个人)不会为此依赖它们,只要 codex 声明只允许字符串格式的语法(即使相同)文章稍后会使用基于闭包的示例)。

3. 发出脚本:

您应该按照WordPress Answers上的这个答案使用 register_script 和 enqueue_script

(有一个布尔参数来说明脚本是否进入页脚)。

要在运行时将您的特定参数传递给脚本,请使用本地化脚本方法。Otto on Wordpress 上有一个教程

希望这可以帮助。

于 2012-09-26T09:49:07.493 回答
0

1)你需要使用全局

$myvar ='123';

add_action('blabla','your_func');
function your_func(){
global $myvar;
}

2) 或者,使用do_action :
-我可以通过 add_action 将参数传递给我的函数吗?

于 2014-01-27T21:21:06.913 回答