声明使用不同操作挂钩排队的脚本之间的脚本依赖关系

时间:2015-03-15 作者:luqo33

考虑以下情况:

我在自定义主题中加入了一些脚本。然后我开始构建一个插件,我只想与这一个主题一起使用。我想在我的插件中加入依赖于主题中加入的脚本的其他脚本。在wordpress中声明脚本依赖项的标准方法是将依赖项数组传递给wp_enqueue_script. E、 g.:

wp_enqueue_script(\'tagsinput-scripts\', plugin_dir_url( __FILE__ ) . \'js/tagsinput/bootstrap-tagsinput.min.js\', array(\'bootstrap-js\'), \'130215\', false);

将不会排队,直到bootstrap-js 已排队。

假设上面的脚本是由我的插件使用admin_enqueue_scripts 动作挂钩,而bootstrap-js 已在主题中排队wp_enqueue_scripts 行动挂钩。

之间的依赖关系tagsinput-scriptsbootstrap-js 在这种情况下,当两个脚本使用不同的操作挂钩排队时,Wordpress会正确解决这个问题吗?

2 个回复
最合适的回答,由SO网友:Pieter Goosen 整理而成

答案很简单,“不”。虽然admin_enqueue_scriptswp_enqueue_scripts 钩子做的事情完全一样,它们在不同的地方做它们的工作,而这些地方与其他地方没有任何联系。

  • wp_enqueue_scripts 在公共侧或前端运行

  • admin_enqueue_scripts 顾名思义,它运行在管理端或后端

    如果依赖于通过另一个钩子加载的脚本,则具有依赖关系的脚本将永远不会加载。

    你得把你的bootstrap-js 为了使这两个挂钩都能工作,这将确保您的依赖关系也能工作

    示例:

    add_action( \'wp_enqueue_scripts\', \'enqueue_bootstrap_js\' );
    add_action( \'admin_enqueue_scripts\', \'enqueue_bootstrap_js\' );
    
    function enqueue_bootstrap_js()
    {
        //Register and enqueue your bootstrap-js script
    }
    
    add_action( \'wp_enqueue_scripts\', \'tagsinput_scripts\' );
    
    function tagsinput_scripts()
    {
        wp_enqueue_script(\'tagsinput-scripts\', plugin_dir_url( __FILE__ ) . \'js/tagsinput/bootstrap-tagsinput.min.js\', array(\'bootstrap-js\'), \'130215\', false);
    }
    

SO网友:luukvhoudt

简单的答案是“是”。

使用wp_enqueue_scriptsadmin_enqueue_scripts 使脚本成为依赖项,但它只能在本地环境中重新调用。因此,只有在您注册它的主题或插件中。然而,Pieter Goosen或WordPress没有告诉你的是,你可以使用wp_default_scripts 钩子以注册安装范围的脚本。

How to use? 请参阅下面的注释,当前等待审核的内容为wp_default_scripts action hook at the WordPress Developer Resources.


添加一个脚本,您可以使用wp_enqueue_scriptadmin_enqueue_script.

首先设置挂钩,例如在插件中。

add_action(\'wp_default_scripts\', function(&$scripts) {
  // Arguments order: `$scripts->add( \'handle\', \'url\', \'dependencies\', \'version\', \'in_footer\' );`
  // Set "in_footer" argument to 1 to output the script in the footer.
  $scripts->add(\'my-plugin-script\', \'/path/to/my-plugin-script.js\', array(\'jquery\'), \'alpha\', 1);
});
现在,您可以在任何地方使用插件中的脚本,例如在主题中。

add_action(\'wp_enqueue_scripts\', function () {
  // Note the third argument: `array(\'my-plugin-script\')`
  wp_enqueue_script(\'my-theme-script\', \'/path/to/my-theme-script.js\', array(\'my-plugin-script\'), null, true);
});
请确保为“handle”参数选择相同的字符串,一个好的做法是在句柄名称前面加上插件或主题名称。

结束

相关推荐

在加载plugins_后,get_plugins()不工作

知道为什么下面的代码function my_plugin_load() { get_plugins(); } add_action( \'plugins_loaded\', \'my_plugin_load\' ); 抛出此错误?Fatal error: 不应调用未定义的函数get\\u plugins()get_plugins() 定义在plugins_loaded 胡克开火了?如果不是,那么什么才是合适的钩子呢?(这个钩子应该启动插件的引导/加载过程)