【发布时间】:2014-07-24 21:30:26
【问题描述】:
我正在使用带有子主题 (starkers-child) 的 Starkers。
我需要编辑functions.php来声明一个菜单,所以我复制了functions.php、JS文件夹和外部文件夹(它们都在functions文件的某个地方声明了)
但是我仍然有一个错误:
Cannot redeclare starkers_script_enqueuer()
(previously declared in C:\wamp\www\redlaw\wp-content\themes\starkers-child\functions.php:65) in
C:\wamp\www\redlaw\wp-content\themes\starkers-master\functions.php
我相信是由这条线引起的:
function starkers_script_enqueuer() {
我明白为什么它已经在主控中调用了该函数,所以它不能在子级中再次调用它。
但是,如果我从 master 中删除这条线,那么这不会破坏保持干净 master 和拥有子主题的目的吗?
完整的functions.php在这里(未经编辑,因为它出现在主主题中) http://jsfiddle.net/8KGcK/
【问题讨论】:
-
如果您正在包含/要求该文件,请尝试包含/要求一次。
-
对该文件的唯一其他引用是:add_action('wp_enqueue_scripts', 'starkers_script_enqueuer');
-
我认为标准的 WordPress 解决方法是将所有函数声明放在
function_exists()调用中,这样它们就可以被子主题覆盖。 -
@andrewsi 将它们包装在 master functions.php 文件中意味着当您更新主主题时,您必须重做文件中的修改,正如 Francesca 所说,这违背了目的 ok keep clean主人。
-
@AdrianoG.V.Esposito 我认为只有在挂钩功能的情况下,您才能从您的链接 (stackoverflow.com/a/30254629/1399205) 应用解决方案。如果是正常功能,那还是个问题。