如何包含php生成的javascript?

时间:2013-08-26 作者:user1429980

我环顾四周,迄今为止还没有找到很好的解决方案:我想使用wp_enqueue_script, 但是Wordpress似乎限制了我加载的javascript文件的范围,正如我的javascript文件所说:

未捕获类型错误:对象[对象对象]没有方法“photogallery”

这是我想加载的输出,就像它自己的脚本通过wp_enqueue_script:

<script type = "text/javascript">
            (function ($) {
                "use strict";
                $(function () {
                    var $gallery = $("#gallery").photogallery(
                            "a",
                            {
                                thumbs: <?php echo setBool($instance["hasThumbs"]); ?>,
                                history: <?php echo setBool($instance["historyEnabled"]); ?>,
                                time: <?php echo ($instance["transitionTime"] * 1000); ?>,
                                autoplay: <?php echo setBool($instance["autoplayEnabled"]); ?>,
                                loop: <?php echo setBool($instance["isLooped"]); ?>,
                                counter: <?php echo setBool($instance["hasCounter"]); ?>,
                                zoomable: <?php echo setBool($instance["zoomable"]); ?>,
                                hideFlash: <?php echo setBool($instance["hideFlash"]); ?>
                            }
                        );
                });
            }(jQuery));
        </script>
我知道手动将默认值编码到另一个js文件中,并使用enqueue_script 可以很好地工作,但我如何正确地使用自定义小部件值来完成这项工作,而不必两次加载所需的js文件?我对复杂的ajax请求不感兴趣,除非这是我唯一的选择,as mentioned here.

提前谢谢。

1 个回复
最合适的回答,由SO网友:helgatheviking 整理而成

您可以不使用wp_enqueue_script (加载一个JS文件,您将无法使用PHP),而只需在wp_headwp_footer 挂钩。。。。或者您可以使用wp_localize_script()

wp_enqueue_script( \'some_handle\' );

$instance = // not sure how you are fetching this value

$array = array( \'thumbs\' => $instance["hasThumbs"], 
                \'history\' => $instance["historyEnabled"],
                \'time\' => $instance["transitionTime"] * 1000,
                \'autoplay\' => $instance["autoplayEnabled"]),
                \'loop\' => $instance["isLooped"]),
                \'counter\' => $instance["hasCounter"]),
                \'zoomable\' => $instance["zoomable"]),
                \'hideFlash\' => $instance["hideFlash"] );

wp_localize_script( \'some_handle\', \'object_name\', $array );
然后修改JS文件,从名为“object\\u name”的JS对象中提取值,其中对象的属性对应于“wp\\u localize\\u script”中的数组键

(function ($) {
                "use strict";
                $(function () {
                    var $gallery = $("#gallery").photogallery(
                            "a",
                            {
                                thumbs: object_name.hasThumbs,
                                history: object_name.history,
                                time: object_name.time,
                                autoplay: object_name.autoplay,
                                loop: object_name.loop,
                                counter: object_name.counter,
                                zoomable: object_name.zoomable,
                                hideFlash: object_name.hideFlash
                            }
                        );
                });
            }(jQuery));

结束

相关推荐

Why is this Ajax not working?

我不确定这样做是否滥用了WordPress和Ajax,但是WP and Ajax Codex a以及Plugin Development with Ajax 似乎不是很有帮助。我创建了以下Ajax情况:(function($){ $(document).ready(function(){ $(\'a\').click(function(e){ var el = $(this).prev(\'input[type=\"checkbox