【问题标题】:Wordpress child theme - functions.php copy - cannot "redeclare"Wordpress 子主题 - functions.php 副本 - 无法“重新声明”
【发布时间】: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) 应用解决方案。如果是正常功能,那还是个问题。

标签: php wordpress


【解决方案1】:

请原谅,我没有足够的代表来发表评论。

除了父主题之外,还加载了子主题的functions.php。所以你不需要实际复制和粘贴代码。其他人所说的将其包装在 if(function_exists(function)) 中是可选的,但这是一种最佳实践,因为它不易出错。

无论如何!

这是来自法典:

与 style.css 不同,子主题的 functions.php 不会覆盖其父主题的对应项。相反,它是在父类的functions.php 之外加载的。 (具体来说,它是在父文件之前加载的。)

Read more here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-04
    • 1970-01-01
    • 2012-11-30
    • 2018-03-24
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 2017-01-16
    相关资源
    最近更新 更多