无法访问子主题的脚本依赖项在父主题中找到

时间:2017-04-18 作者:Diogo

我已经为此挣扎了将近一个月,但仍然找不到任何关于如何做到这一点的方法!不是在这里,不是在Quora,不是通过许多不同的高级谷歌搜索查询。。。

这是:

这个parent theme 只有one script file main.min.js. 它包含它使用的所有脚本和库,包括jQuery, Select2, ParsleySlick, 举几个例子。

我该怎么办making my own scripts use one or more of these libraries as their dependencies in the child theme?

最明显的方法是声明父主题main.min.js 将我自己的脚本排入子脚本队列时的依赖项functions.php 并确保在页面上加载依赖项后启动脚本。

我已经这样做了,但它不起作用。我的脚本无法访问其依赖项。

我能想到的唯一替代方法是在子主题中将所有这些库分别排队,就好像父母没有这些库一样。这显然是一件可怕的事情,因为父主题也会在其主js文件中加载这些库!

因此,必须有一种方法通过使用already provided libraries 在父级中。

如果父主题将库单独排队,这将很容易。我想这里的主要问题是,所有脚本和库都包含在一个js文件中。

任何帮助都将不胜感激!

2 个回复
SO网友:tao

如果父主题将所有供应商脚本捆绑在一个文件中,则不能单独要求/排队。从WP的角度来看,它们是一个单一的资源/依赖项。

查看任何页面的源代码或使用插件(如“debug this”)获取脚本的寄存器名称,以便将其指定为依赖项。对你来说可能是{parentThemeSlug}-main. 需要在依赖项数组中指定的不是文件名,而是寄存器名(即。jquery.min.jsjquery). 我通常通过查找register/enqueue函数在父主题中查找它。

SO网友:Diogo

只是为了提供一个答案,以防人们来到这里,而不浏览评论,这就是我产生这个问题的原因:

开发人员使用的父主题browserify to create the final bundle 对于主题。以及browserify的工作方式,such bundle is completely hidden from the global scope.

因此,即使它有我需要的所有库,我也无法在原始环境之外访问它们。

有人可能会说,在这种情况下,这个主题并不打算用作父主题。这是一个有效的输入,但由于我想/需要继续,这给我留下了3个选项:

1-Create redundance 并通过在我的子主题中分别使用相同的库来进行代码膨胀。(这不是一个真正的选择,是吗?)

2-Add to the parent theme 为了能够在下一个主题发布中保持mods的整洁,需要付出额外的努力,比如Andrei 请在评论中提出建议。(虽然有点冒险,因为我不仅不是一个专业的主题开发人员,还需要特别的关注,这为许多可能的问题留下了空间。谁知道会发生什么)。

3-Copy, modify and recompile parent theme source files 然后通过子主题覆盖最后一个包,方法是保留与原始包相同的文件名/句柄,因为子主题functions.php 将首先加载。

后者似乎是most practical and cleanest option, 所以我会坚持下去,看看会怎么样。

幸亏Andrei 再次感谢他在整个过程中的投入。

相关推荐

Child-theme breaks site

所以,我有一个子主题,里面除了所需的CSS文件之外什么都没有。一旦我激活了这个儿童主题,我的整个网站就关闭了。最后我有两个问题:激活一个只有CSS的子主题怎么能破坏我的网站</我怎样才能回到我原来的主题</这些是网站给我的错误:Warning: require_once(/wp-content/themes/interio_child/admin/options-framework.php) [function.require-once]: 无法打开流:中没有此类文件或目录/wp-c