除了将文件添加到子主题之外,还有其他方法可以定制父模板文件吗?

时间:2020-04-29 作者:Nora McDougall-Collins

在我使用WordPress子主题的10多年中,我从未见过将模板文件复制到子主题并进行自定义的问题,直到现在。父主题标头中存在函数调用。在学生的子主题中导致致命错误的php。主题作者从父主题中删除了该函数,因此调用引发了一个错误。

删除有问题的函数调用修复了错误,但它确实突出了一个漏洞,即子主题可以保护自定义项不受更新的影响。它可以防止自定义设置被覆盖,但不能防止站点出错。

我的问题有两个方面:

有没有更好的方法自定义父模板文件,而不是将其复制到子主题并进行更改?

这实际上是一个结构不良的主题的问题吗?也就是说,主题编写者是否应该在父主题中保留函数定义,同时考虑到可能使用的子主题?

1 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

有没有更好的方法自定义父模板文件,而不是将其复制到子主题并进行更改?

不是真的。有些主题(如Genesis)是专门为子主题设计的,而不是使用模板来构建页面。如果父主题是这样构建的,则可以使用remove_action()add_action() 修改模板。然而,父主题需要专门设计来支持这一点。它不适用于大多数主题,此技术的任何实现都将特定于父主题。

我所能建议的就是查阅有关父主题的任何文档,看看它们是否支持子主题的任何替代方法。

这实际上是一个结构不良的主题的问题吗?也就是说,主题编写者是否应该在父主题中保留函数定义,同时考虑到可能使用的子主题?

当开发人员创建主题时,他们也在为子主题开发人员创建API,无论他们是否愿意。API需要稳定。出于同样的原因,WordPress不能在没有某种回退以防止错误的情况下删除函数,主题开发人员不应该在不考虑子主题开发人员的情况下更新其主题。因此,是的,我认为主题开发人员应该保留函数定义。

问题是没有办法强制执行这一点。然而,你可以做一些事情来避免将来发生这种情况。

使用子主题时,在未查看变更日志或变更本身的潜在问题之前,不要更新父主题function_exists() 第一如果父主题删除了一个函数,那么输出将消失,但至少没有致命错误

相关推荐

Admin Theme customization

我遵循wordpress codex网站上关于通过插件创建管理主题的说明。我激活了插件,但我的样式表没有包含在<head>.. 这是我的代码:add_action( \'admin_init\', \'kd_plugin_admin_init\' ); add_action( \'admin_menu\', \'kd_plugin_admin_menu\' ); function kd_plugin_admin_init() { /* Register