【问题标题】:How to override a parent file in a child Wordpress theme when parent file is being required in functions.php当functions.php中需要父文件时,如何覆盖子Wordpress主题中的父文件
【发布时间】:2015-12-09 20:10:12
【问题描述】:

我对 Wordpress 主题的设计和编码还比较陌生,并且最近开始了一个基于悉尼主题的子主题,该主题在 Wordpress 中免费提供。我遇到了一个我无法锻炼的障碍。

有一个 PHP 文件通过父级的 functions.php 调用,我需要对其进行自定义,并且在更新父主题时需要保持不变。该文件名为template-tags.php,位于“inc”文件夹中。现在,据推测,根据 Wordpress codex(我在询问之前已经咨询过),子主题上的任何重复文件(functions.php 除外)将自动覆盖父主题中的文件。我不知道这是否适用于文件夹内的文件,但我认为这个特定文件在父级的functions.php 中被调用这一事实使得它是正在加载的父级文件。我假设这是因为样式 CSS 和 JS 脚本文件也是如此,为了获得我自己的自定义版本,我必须在子主题中排队。

但是,Wordpress 代码库中没有任何内容解释如何覆盖已在父 functions.php 中调用的文件。而且我在其他任何地方都找不到任何对我有特别帮助的东西(即使是在这些问题中:WordPress child theme override a parent theme includeOveriding parent theme functions with a Child theme in WordPressHow to override a not plugable parent theme function from a non function.php file?Wordpress child theme - functions.php copy - cannot "redeclare")。

所以,总结一下:

  • 父主题有一个“inc”文件夹,其中包含文件template-tags.php
  • 我的子主题还有一个“inc”文件夹,其中包含文件template-tags.php
  • 父主题的functions.php 具有以下调用其文件的代码:

    require get_template_directory() . '/inc/template-tags.php';
    
  • 我尝试在我孩子的 functions.php 文件中添加的任何调用其 template-tags.php 文件的内容都会导致错误,因为显然 WP 不能要求相同的东西两次。

没有在父母的functions.php 中注释掉电话,在我看来这不是一个实际的解决方案,但更多的是一种解决方法,我不知道还能做什么。

目前我将不胜感激。提前致谢!

【问题讨论】:

  • 允许子主题文件覆盖父模板的良好做法。但是,如果开发人员使用了 require 你不能将自己的文件滑入其中,无论如何这听起来像是一页函数。您可能会看到要覆盖的函数挂钩的位置,然后您可以取消挂钩并挂钩自己的。
  • 嗨,大卫,感谢您的回答。如果我对您的理解正确,您建议将我的自定义文件链接到父文件所链接的位置。如果是这样,我也可以在父文件中删除该链接,而我孩子的 functions.php 中的链接将是唯一的链接。但是我必须牢记这一点,每次主题升级时都要进去做。似乎这个经常发生。我从上周中旬开始,今天已经升级了; 15 号,因为它是在 1.15 版上。我宁愿避免不得不总是这样做。谢谢!
  • 没有即时说明它的方式 :) 但可能的是单独查看每个函数并在可能的情况下将它们解开,例如,如果一个函数与 init 挂钩,解开它并钩住你自己。但从文件名来看,模板标签——这些是在模板中使用的吗?您可以使用自己的标签等创建自己的模板...

标签: php wordpress wordpress-theming parent-child require


【解决方案1】:

我有一个类似的问题,我想在 template-tags.php 中更改我的子主题中的标题布局。

对我有用的解决方案是在我的子主题的 functions.php 文件中使用以下行: 需要 get_stylesheet_directory() 。 '/inc/template-tags.php';

我在functions.php中使用了父级中的原始行: 需要 get_template_directory() 。 '/inc/template-tags.php';

使用函数 get_template_directory() 不起作用,因为此函数将始终返回父主题目录。

使用函数 get_stylesheet_directory() 有效,因为它检索子主题目录。

是的,我知道函数“get_stylesheet_directory()”的名称不是很直观,但它实际上会返回子主题目录位置。

通过在线搜索需要一段时间才能解决这个问题。我在网上找到了这个帮助我搜索的参考资料:How to override a parent file in a child Wordpress theme when parent file is being required in functions.php

【讨论】:

  • 嘿那个链接就是这个问题,我很困惑
【解决方案2】:

你好@QuestionerNo27,

你问这个问题已经很长时间了,但我也一直在寻找答案 2 天,因为我遇到了同样的问题。有答案,简单如“嗨”:

  1. 您的子主题中不需要inc 文件夹,也不需要template-tags.php 文件。
  2. 您只需从父 template-tags.php 复制要覆盖的函数并将其粘贴到您的子主题 functions.php 就我而言,我想从我的父母 template-tags.php 覆盖 function mytheme_posted_on()

现在它正在工作。感谢https://wordpress.org/support/topic/inc-folder-in-child-theme(Stephencottontail 回答)

【讨论】:

  • 据我了解,子主题只是扩展了父主题,增加了更多功能。如果你只复制(而不是剪切)函数,那么服务器会抛出一个错误,因为它会多次尝试加载同一个函数。我错过了什么吗?
猜你喜欢
  • 1970-01-01
  • 2018-04-07
  • 1970-01-01
  • 2020-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-19
  • 2013-11-10
相关资源
最近更新 更多