如何在functions.php中需要父文件时覆盖子Wordpress主题中的父文件

Que*_*o27 7 php wordpress wordpress-theming parent-child require

我是设计和编码Wordpress主题的新手,最近开始了一个基于悉尼主题的儿童主题,该主题在Wordpress中免费提供.我遇到了一些障碍我无法解决.

有一个PHP文件通过父级调用functions.php,我需要自定义,并且在更新父主题时需要不受影响.此文件被调用template-tags.php,位于"inc"文件夹中.现在,据说,根据Wordpress codex(我在此之前询问过),子主题上的任何重复文件(除了functions.php)都将自动覆盖父主题中的那些.我不知道这对于文件夹内的文件是否也能正常工作,但我认为这个特定文件在父文件中调用的事实functions.php使得它是正在加载的父文件.我假设这是因为同样适用于我必须在子主题中排队的样式CSS和JS脚本文件,以便获得我自己的自定义版本.

但是,Wordpress codex中没有任何内容可以解释如何覆盖已在父代中调用的文件functions.php.而且我在其他地方找不到任何东西(甚至在这些问题中都没有:WordPress子主题覆盖父主题包括,在WordPress中使用Child主题覆盖父主题函数,如何从非函数覆盖不可插入的父主题函数. php文件?,Wordpress子主题 - functions.php副本 - 不能"重新声明")这对我有帮助.

所以,总结一下:

  • 父主题有一个"inc"文件夹,其中包含文件template-tags.php.
  • 我的孩子主题也有一个"inc"文件夹,里面有文件template-tags.php.
  • 父主题functions.php具有以下代码来调用其文件:

    require get_template_directory() . '/inc/template-tags.php';
    
    Run Code Online (Sandbox Code Playgroud)
  • 我尝试在我的孩子的functions.php文件中添加调用其template-tags.php文件的任何内容都会导致错误,因为很明显WP不能同样需要两次.

没有评论父母的电话functions.php,这对我来说似乎不是一个实际的解决方案,而是更多的解决办法,我不知道还有什么可做的.

我很感激此时的任何意见.提前致谢!

小智 11

你好@TyerserNo27,

你提出这个问题已经有很长一段时间了,但是在我遇到同样的问题时,我也一直在寻找2天的答案.有答案,简单如"嗨":

  1. 您不需要inc子主题中的template-tags.php文件夹或文件.
  2. 你只需要从你的父母那里复制你要覆盖的功能template-tags.php并将其粘贴到你的子主题中.functions.php 在我的情况下,我想function mytheme_posted_on()从我的父母覆盖template-tags.php

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


小智 4

我遇到了类似的问题,我想更改 template-tags.php 中子主题中的标题布局。

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

我使用的是 Functions.php 中 Parent They 的原始行: require 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