自定义内部主题文件夹是否可以被子主题覆盖?

时间:2018-03-14 作者:Luca Reghellin

基本上,我试图覆盖一些未编码主题的文件。但这不是一个特定主题的问题:它可以应用于任何主题。Uncode主题有一个自定义目录\'partials\' (/uncode/partials/) 包含一些布局元素的。在我的孩子主题上,我还创建了一个“partials”文件夹(my-child-theme/partials), 但内部文件似乎没有被覆盖。这正常吗?WP文档说,任何同名的文件都应该是可重写的,但似乎不是这样。我做错什么了吗?

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

这完全取决于父主题。而WordPress将检查子主题中的模板Template Hierarchy 如果它们存在的话,就使用它们,这取决于主题作者决定他们希望为这个层次结构之外的任何其他文件支持多少子主题覆盖。

例如,当包含模板部分时,主题作者可以使用:

require \'partials/partial.php\';
这很好,但如果主题作者想要支持儿童主题,他们会使用:

get_template_part( \'partials/partial\' );
这是因为get_template_part() 将检查子主题partials/partial.php 如果存在,请使用它,否则它将返回到父主题的副本partials/partial.php.

自4.7.0以来,WordPress添加了几个功能,允许主题作者支持其他文件的子主题。

get_theme_file_uri() 将返回子主题中文件的URL(如果存在),否则将使用父主题。这允许主题支持替换子主题中的CSS和JS文件。

例如,如果父主题将样式表排入以下队列:

wp_enqueue_style( \'custom-style\', get_theme_file_uri( \'assets/custom.css\' ) );
然后,子主题作者可以通过放置assets/custom.css 在他们的儿童主题中。

get_theme_file_path() 将返回子主题中文件的路径(如果存在),否则将使用父主题。父主题可以使用它来允许子主题替换包含的整个PHP文件。

例如,如果父主题包含如下PHP文件:

include get_theme_file_path( \'inc/template-tags.php\' );
然后子主题作者可以替换template-tags.php 只需放置inc/template-tags.php 在他们的儿童主题中。

因此,这里的要点是WordPress确实支持子主题替换父主题中的任意文件,但父主题作者需要通过使用正确的函数来明确支持它。

Uncode是一个付费主题,所以我看不到代码,但我怀疑它没有使用get_template_part(), 这就是为什么不能替换子主题中的文件。付费主题通常不是很好的“WordPress公民”,对此类功能的支持也不尽相同。

SO网友:weston deboer

这是一个很好的问题,主题目录有时会很混乱。

答案是否定的,WordPress只查看核心主题文件。由于子目录不是此主题的一部分,因此它不会在子主题中查找子文件夹。您可以做的是将包含partials文件夹的文件包括在内,并且将在子主题中包含自定义partials文件夹。

结束

相关推荐

Responsive Admin Themes

我在看这个管理主题的示例(http://themepixels.com/main/themes/demo/webpage/shamcey/dashboard.html). 至于标签为“Navigation”的左侧管理栏,有没有一种方法可以在不使用插件的情况下实现这种类型的左侧仪表板管理菜单?我想用css、js或Jquery来实现这一点,任何处理编码的东西都可以。