【问题标题】:How do I check for child theme files first using include, before going to parent theme?在转到父主题之前,如何首先使用包含检查子主题文件?
【发布时间】:2018-09-14 21:18:35
【问题描述】:

我正在创建一个基于现有父主题的 WordPress 子主题,并且我希望我放在子主题目录中的任何同名文件优先于父主题目录中的文件。我认为这是在 WP 中设置父/子主题的方式,但我遇到了一个问题。

根据WordPress codex on Child Themes,它说:

模板文件
如果你想改变的不仅仅是样式表, 您的子主题可以覆盖父主题中的任何文件:只需 在子主题目录中包含一个同名文件,并且它 将覆盖父主题目录中的等效文件 您的网站正在加载。

在我的一个文件 (header.php) 中,有一个如下所示的包含:

include get_parent_theme_file_path("folder/file.php")

即使我的子主题中有该 file.php 的重复命名但经过修改的版本,它仍然使用我的父主题中的版本。根据相同的 codex,他们针对子主题文件的建议是使用 get_stylesheet_directory(),所以它看起来像这样:

include (get_stylesheet_directory()."/folder/file.php");

我了解名为“get_parent_theme_file_path()”的函数的目的是忽略父/子关系并仅获取父主题版本,因此无需将其替换为在我的子主题中显式获取文件的函数( ie.get_stylesheet_directory),有没有办法让我拥有某种通用的 get_path() 函数,首先检查子级,如果不存在,获取父级版本?

顺便说一句,我读过this Q&A on "get_parent_theme_file_path vs. get_template_directory",但他们的解决方案是使用 parent_theme_file 过滤器,但这不是动态的,并且需要我为我希望它使用的每个子文件编写一个过滤器函数。

感谢您的帮助。

【问题讨论】:

  • 所以你现在在你的主题文件夹中有你的父主题文件夹和子主题文件夹,对吧?您的子文件夹是否至少有一个 functions.php 和 style.css 文件?您的 style.css 文件是否有正确的标题注释来引用父主题?

标签: wordpress inheritance parent-child child-theming


【解决方案1】:

你有没有尝试过这样的事情:

add_filter( 'parent_theme_file_path', function( $path, $file ) {
    return get_stylesheet_directory() . '/' . $file;
}, 10, 2 );

这应该覆盖父主题路径,而无需为每个文件编写函数。

如果您想确保 get_parent_theme_file_path() 仍然适用于未在您的子主题中覆盖的父主题文件,您可以做一个简单的检查:

add_filter( 'parent_theme_file_path', function( $path, $file ) {
    if ( !file_exists( get_stylesheet_directory() . '/' . $file ) ) {
        return $path;
    }
    return get_stylesheet_directory() . '/' . $file;
}, 10, 2 );

【讨论】:

  • 我很欣赏这个建议,但是我根本无法使用parent_theme_file_path() 功能,以后可能会在父主题或子主题中使用。
  • 更新了我的答案。
  • 绝妙的答案,这个解决方案应该在核心 Wordpress 代码中真正可用。如果存在子主题文件,则始终获取子主题文件的能力对我来说似乎是标准的。
【解决方案2】:

wordpress.stackexchange 上有人指出locate_template 的使用,它检索存在的最高优先级模板文件的名称。

在 TEMPLATEPATH 和 wp-includes/theme-compat 之前的 STYLESHEETPATH 中搜索,以便从父主题继承的主题只能重载一个文件。

【讨论】:

    猜你喜欢
    • 2015-02-18
    • 1970-01-01
    • 1970-01-01
    • 2016-01-04
    • 1970-01-01
    • 2017-06-15
    • 2013-11-10
    • 2023-04-02
    • 1970-01-01
    相关资源
    最近更新 更多