如何在WordPress`functions.php`中将一个脚本排入另一个脚本,并使它们一起工作?

时间:2019-01-26 10:20:36

标签: javascript php wordpress enqueue

我有2个.js文件,第一个是plugins.js,第二个是ui.js,并且都在检查器的“调试”上可见,因此都包含在内

我在plugins.js中有一个jquery函数,需要在ui.js中调用,因此我首先将plugins.js入队,然后在其下立即将ui.js入队。 / p>

但是,网络浏览器中的控制台告诉我该功能未定义,并且无法正常工作。

如果我将功能从plugins.js剪切并粘贴到ui.js中,它将起作用。当我也在JSfiddle中尝试过时,它也起作用了。

functions.php

function add_scripts() { 

wp_enqueue_script( 'plugins', get_template_directory_uri() . '/javascript/plugins.js', array( 'jquery', 'jquery-ui-core' )           , '1.0.0', true );
wp_enqueue_script( 'ui'     , get_template_directory_uri() . '/javascript/ui.js'     , array(), '1.0.0', true );
}
add_action('wp_enqueue_scripts', 'add_scripts');

plugins.js

jQuery(document).ready(function($) {
    function PNGPreloader(e,t,i,r,n,a){...}
});

ui.js

jQuery(document).ready(function($) {
    $(...).each(function(){
        mobileIcons[ID] = new PNGPreloader($object,frames,size[0],size[1],20,false);
    });

如果我将plugins.js中的函数放在ui.js中,它将起作用:

jQuery(document).ready(function($) {
    function PNGPreloader(e,t,i,r,n,a){...}
    $(...).each(function(){
        ... = new PNGPreloader(...);
});

2 个答案:

答案 0 :(得分:2)

应该将jquery-ui-widget添加到wp_enqueue_script的依赖项参数中。

function stripesinteriors_theme_resources() { 
    wp_enqueue_script( 'plugins', get_template_directory_uri() . '/javascript/plugins.js', array( 'jquery', 'jquery-ui-core', 'jquery-ui-widget' ), '1.0.0', true );
    wp_enqueue_script( 'ui'     , get_template_directory_uri() . '/javascript/ui.js'     , array()                                                , '1.0.0', true );
}

答案 1 :(得分:1)

您可以将function PNGPreloader(e,t,i,r,n,a){...}移出jQuery(document).ready(function($) { ... });块吗?

这是一个范围界定问题,因为ui.js中的代码对于plugins.js中准备好文档的调用函数内部没有任何可见性。

或者您也可以执行以下操作:

plugins.js:

var fnPNGPreloader;  // globally accessible

jQuery(document).ready(function($) {
    fnPNGPreloader = function (e,t,i,r,n,a) {
        /*.. assuming you do stuff with "$" in here ..*/
    };
    //...
});

ui.js:

jQuery(document).ready(function($) {
    $(...).each(function(){
        mobileIcons[ID] = new fnPNGPreloader($object,frames,size[0],size[1],20,false);
    });
});