孩子的PHP文件不会覆盖父母的PHP文件

时间:2016-04-06 作者:domdambrogia

我有一个php文件,位于:

.../wp-content/themes/kallyas-child/pagebuilder/elements/TH_TeamBox/TH_TeamBox.php
我正试图使用上述文件覆盖家长的团队框。php文件,可在此处找到:

.../wp-content/themes/kallyas/pagebuilder/elements/TH_TeamBox/TH_TeamBox.php
我的子主题处于活动状态,我在子主题中创建了文件路径,以模仿父主题。我的印象是,如果我这样做了,我就可以在我的子主题中编辑我喜欢的PHP文件,而不会在更新父主题时丢失我所做的更改。

我已经开发了一段时间了,但正如你所看到的,我是Wordpress的新手。任何关于为什么我的孩子。php文件没有覆盖其父文件。php文件将不胜感激。我很乐意提供您可能需要帮助我的更多信息,谢谢!:)

3 个回复
最合适的回答,由SO网友:Otto 整理而成

子主题可以覆盖模板,而不仅仅是任意的PHP文件。

在WordPress中,主题由一组用作模板的PHP文件组成。您可以在中找到这些文件的列表Template Hierarchy.

这些特定的模板文件可以用新的模板文件覆盖,但除非父主题有一些特殊的方法让您覆盖其他文件,否则不能以这种方式简单地覆盖父主题作为支持结构的一部分或作为pagebuilder代码段的库而包含的文件。

SO网友:Patriot

解决方案是将所需的更改移动到子主题函数。php文件。

如果它是一个函数,通常会有一个If语句来检查它是否已经声明,在这种情况下,您可以将函数复制到函数。php使用相同的名称并进行必要的更改,它将优先于其他主题文件。如果函数是在没有if语句的情况下声明的,那么必须在函数中更改其名称。php,找到调用函数的模板文件,将其复制到子主题并更改其中的函数调用。

如果它是一个小部件,那么将整个类声明复制到函数中。php,更改其名称并进行其他更改。确保您也注册了新的小部件,您将在小部件区域中找到它,其中包含新名称和更改。

SO网友:majick

我为您提供了一个变通方法,它可能比仅仅在父主题文件中编写修改要好,因为奥托提到的原因,这当然是不可取的。

如果将这两行PHP添加到要在子主题目录结构中使用修改副本的任何文件的顶部:

<?php
    $filepath = str_replace(get_option(\'template\'), get_option(\'stylesheet\'), __FILE__);
    if (file_exists($filepath)) {include($filepath); return;}
?>
当然,在主题升级后,您仍然需要对每个文件再次执行此操作,因此建议您记下这些文件,可能不再直接更新主题,而是下载主题,将这些行添加回本地,并通过FTP上载更新的副本。

这似乎不值得这么麻烦,但它可以让您将自定义修改的文件保存在子主题结构中,而不会被任何主题更新覆盖。同样,只需将这些行重新添加到要保持覆盖的任何父文件的顶部。

这还意味着您可以删除修改后的子功能文件副本,而不破坏您的站点(例如,针对更新的主题文件进行测试),因为如果找不到修改后的副本,这将返回到原始文件。

(CEM打字编辑:替换第一个get_options 使用呼叫get_option.)