子主题

子主题是父主题的扩展。它们允许您修改现有主题,而无需直接编辑该主题的代码。它们通常是一些简单的小颜色更改,但也可能很复杂,包括父主题的自定义覆盖。

在本文中,您将了解什么是父主题和子主题,如何通过子主题创建自己的修改,以及可以覆盖父主题的哪些部分。

什么是父母和孩子的主题?

父主题

所有主题——除非是特定的子主题——在技术上都是父主题。基本上,这意味着它们是可以在WordPress中安装和激活的完整主题。 

父主题必须具有所有必需的文件,如主题结构文档。除此之外,你不必为你的主题做任何特别的事情成为父主题。

儿童主题

默认情况下,子主题包含父主题中的所有内容。这包括设计及其任何功能。但它也可以用于对父主题进行自定义,而无需直接修改父主题的文件。这意味着您(或您的子主题的用户)仍然可以接收父主题的更新,而不会丢失这些修改。

子主题:

  • 使您的修改具有可移植性和可复制性。
  • 保持自定义与父主题分离。
  • 允许在不丢失修改的情况下更新父主题。
  • 节省开发时间,因为您只需要编写所需的代码。
  • 这是一个很好的方式来开始你的旅程,以发展完整的主题。

值得注意的是,从子主题中进行广泛的定制最终会成为管理难题。对于这些更广泛的项目,最好是分叉原始主题并创建自己的完整/父主题。这是你需要根据具体情况做出决定的事情。

孙子主题呢?

目前这是不可能的。标准主题层次结构只有两个级别:父主题和子主题。

然而,当构建块主题时,站点前端显示的内容还有其他级别(它们只是不属于主题层的一部分):

  • WordPress本身(默认主题.json)
  • 父主题
  • 儿童主题
  • 用户自定义(可以覆盖主题.json、模板和模式)

在某种程度上,用户自定义层作为某种“孙子”主题工作。最大的区别是更改存储在数据库中,而不是文件系统中。

除此之外,还没有创建可安装孙子主题的标准方法。

如何创建子主题

让我们尝试创建默认的子主题二十二点二十四分与WordPress捆绑的主题。 

创建子主题文件夹

首先,您的子主题需要一个名称。这可以是你想要的主题名称,但对于本指南,我们将其命名为“大日出”

现在在您的wp-content/themes(wp-content/主题)目录,其中包含您的主题名称的烤肉串案例版本:大松驰.

创建style.css

现在需要创建一个名为样式表。它是子主题存在的绝对必要的文件。全部样式表文件必须包含文件头和所需的头字段,如主要样式表文档(如果您尚未阅读此文档,请阅读此文档)。

如主样式表文档中所述,有一个额外的字段需要将主题声明为子主题。您必须添加模板标题字段到样式表文件标题:

/***主题名称:大日出*模板:二十二点二十四分* ...其他标题字段*/

有一个警告模板字段。它必须与父主题的文件夹名称100%匹配,相对于wp-content/themes(wp-content/主题)文件夹。在这种情况下,我们知道Twenty Twenty-24主题文件夹位于wp-content/themes/twentythenty24因此模板值必须为二十四岁.

安装并激活子主题

如果您还没有在开发环境中使用主题wp-content/themes(wp-content/主题)文件夹,您现在需要将其移动到那里。根据您的设置,您有几个选项,但最简单的是创建主题的ZIP文件并通过外观>主题>添加新内容在WordPress管理员中。

有关如何向WordPress添加主题的更多信息,请阅读添加新主题从WordPress文档网站。

安装主题后,请访问外观>主题在WordPress管理员中找到主题。单击激活链接,如屏幕截图所示:

WordPress外观>主题屏幕显示一个空的子主题的弹出覆盖。

它现在看起来与你的父主题没有任何不同,因为你还没有自定义它。但您已经成功创建了子主题。

自定义子主题

在定制您的孩子主题时,您可以使用本手册中记录的所有功能。但是,您应该记住一些注意事项,您将在下面的部分中了解这些事项。

加载style.css

这是一个可选步骤,对于块主题通常不需要,因为它们的样式处理通常通过主题.json但如果你正在构建一个经典主题,这通常是必要的。无论如何,如果要确保样式表已加载。

在继续本节之前,请务必查看包括资产文档,其中介绍了如何加载样式表更加详细。在该文档中,您将学习如何通过wp_enqueue_style()函数(注意,子主题在其父主题之前加载)。

将样式表排入队列的理想方法是当父主题同时加载它自己的样式表和儿童主题样式表。但并非所有主题都这样做。因此,您必须检查父主题的代码,以查看它正在排队的样式表。这对于每个主题都是不同的,并且没有严格的规则。

如果父主题加载了两个样式表,则子主题不需要执行任何操作。它的样式表将自动加载。

对于Twenty Twenty-24主题,它根本不加载样式表。所以你必须加载样式表通过函数.php如以下代码段所示:

add_action('wp_enqueue_scripts','grand_sunrise_enqueue_styles');函数grand_sunrise_enqueue_styles(){wp_排队_样式(“豪华型”,获取样式表_uri());}

如果您使用的父主题只加载它自己的样式表,那么您也可以使用上面的代码加载子主题的样式表.

如果父主题只加载活动主题的样式表,例如via获取样式表_uri(),然后它将加载子主题的样式表。在这种情况下,您可能还想通过函数.php,您的代码将如下所示:

add_action('wp_enqueue_scripts','grand_sunrise_enqueue_styles');函数grand_sunrise_enqueue_styles(){wp_排队_样式(“豪华公寓式”,get_parent_theme_file_uri(“style.css”));}

模板、零件和图案

构建子主题时,可以通过在子主题中添加同名文件来覆盖父主题中存在的任何模板、零件或模式。注意:图案也必须具有相同的注册鼻塞字段。

您还可以将全新的模板、部件和模式添加到子主题中,即使它们不存在于父主题中。要了解有关这些功能的更多信息,请参阅手册中的以下文章:

使用functions.php

与模板和模式不同函数.php子主题的文件不覆盖函数.php父主题中的文件。事实上,它们都被加载了,子项被加载在父项之前。

这样函数.php子主题提供了一种智能、无故障的方法来修改父主题或WordPress的功能。 

假设您想向主题添加一个PHP函数。最快的方法是打开函数.php文件并将函数放在那里。但这并不是一个好的做法-下次更新主题时,您的功能将消失!

创建子主题并将自定义代码添加到子主题的函数.php文件。该函数也将从那里完成完全相同的工作,其优点是它不会受到父主题未来更新的影响。

不要直接从函数.php将父主题转换为子主题。由于函数名重复,这可能会导致致命错误。

了解更多函数.php,查看自定义功能文档。

引用或包含其他文件

有时您需要在主题中包含或使用自定义文件。在执行此操作时,您需要确保使用的函数将根据子主题的目录为您提供正确的目录路径或URI。

例如,如果您想通过函数.php,您可以使用获取主题文件路径()功能。下面是一段代码片段,显示了包括函数-helpers.php文件来自/公司子主题中的文件夹:

require_once get_theme_file_path('inc/functions-helpers.php');

要了解有关包含文件的更多信息,请阅读自定义功能文档。

当需要通过文件的URL(例如图像或样式表)引用文件时,必须使用不同的函数:获取主题文件uri()。让我们看一个使用名为兔子.jpg从你的主题/资产/图像文件夹中的<图像>HTML标记:

<?php$image=get_theme_file_uri('assets/images/bunny.jpg');?><img src=“<?php echo esc_url($image);?>”alt=“”/>

您可以从包括资产文档。

国际化

与父主题一样,子主题也可以国际化,并可以在任何语言中工作。要了解更多信息,请阅读国际化主题手册中的文档。

如国际化文档中所述,最大的变化是您必须创建一个唯一的文本域并使用load_child_theme_textdomain()而不是load_theme_textdomain()手动加载翻译时。