如何创建一个WordPress子主题

WordPress的主题可能很棒但是有很多我们都希望改变的小事。这里的颜色,那里的字体大小,可能在按钮上使用不同的号召性用语?

子主题如何运作以及为什么要使用它们

子主题是单独的主题,它们的大部分功能都依赖于父主题。如果您使用的是子主题,WordPress将首先检查您的子主题,以查看是否存在特定功能。如果没有,它将使用父主题。这很棒,因为它允许您仅修改所需内容。
如果您想修改主题中的单个页面,则应始终使用子主题。有两个很好的理由:更新和给页面布局。
更新
如果您在不使用子主题的情况下修改主题,则有两种选择:您可以选择不再更新主题,也可以更新并丢失对主题所做的任何更改。
后一种选择在技术上可行,但不建议这样做。即使您的更改易于复制和粘贴,为什么每次更新都要花两分钟时间完成容易出错的任务?
不更新你的主题应该是不可能的,几乎所有“ 为什么你的网站被黑客攻击 ”事件都是因为软件过时不及时更新造成的原因。所以你应该始终保持WordPress,你的主题和插件是最新的,没有例外。
布局
当您将代码添加到现有主题时,您将添加到代码库,该代码库可能是成千上万行。在您的网站上工作的开发人员(实际上,您自己)将很难跟踪您的更改。至少有一个直接结果是增加开发费用。
除非另有说明,否则子主题将回退到父主题,因此您的子主题实际上是现有主题的变更集。即使子主题只有几个文件,也许有100行代码,这可能会导致大量更改。

创建一个子主题

创建子主题非常简单,因此您可以复制并粘贴下面的示例。
要为主题创建子主题,您需要执行以下步骤:

  • 1、在WordPress安装中创建主题目录
  • 2、创建一个样式表,其中包含有关子主题的信息
  • 3、拉入父主题的样式

完成这些步骤后,您可以激活您的子主题,您的网站将与以前完全相同,但它将使用您的子主题。
让我们详细介绍上述步骤。在这个例子中,我将为Twenty Fourteen默认主题创建一个子主题。

  • 1.首先,转到主题目录并为新主题创建一个文件夹。你可以任意命名。为了清楚起见,我将命名我的主题twentyfourteen-child
  • 2.下一步是创建样式表文件。这必须命名style.css。将以下代码复制并粘贴到刚刚创建的文件中:

上面代码中的两个必要项是以“ Theme Name“和”Template“。主题名称告诉WordPress您的主题名称是什么,这将显示在主题选择器中。该模板告诉WordPress它应该考虑哪个主题作为父主题。除文本域和标签外,其他大多数都是不言自明的。文本域用于翻译字符串。文本域对于您的主题应该是唯一的,并且应该在您使用翻译功能时使用。有关更多信息,请参阅I18n for WordPress Developers。标签部分是WordPress主题存储库使用的标签列表。在这个例子中,我看了一下style.css 父主题的文件,只需从那里复制粘贴标签。

  • 3.此时你的子主题可以运行。如果您激活它并重新加载页面,那么您的所有内容都将在那里,但它没有样式信息。我之前提到WordPress首先在子主题中寻找功能,如果它不存在,它会回到父主题上。

在我们的例子中,我们做有一个样式表,所以WordPress的数字不应该载入父文件的。为了确保我们加载父文件的样式表,我们需要将它排入队列。这可以在主题functions.php文件中完成,因此请立即创建该文件。在此文件中,复制粘贴以下代码:

子主题有什么好处

那么子主题如何实际起作用呢?子主题适用于文件级别。在加载主题的过程中使用文件时,它会检查它是否存在于子主题中。如果是,则使用该文件的内容。如果不是,则使用父主题中的相同文件。
这个规则有一个例外,即主题的函数文件。将functions.php加载父主题和子主题中的文件。如果子主题的功能取代了父母,您将要么有一个故障的网站,或者您需要将父主题的功能文件的全部内容复制粘贴到子主题中,这会破坏扩展主题的目的。
修改功能时的工作流程如下。如果要更改标题,请将父主题的header.php文件复制粘贴到子主题中。根据您的内容编辑文件,保存并享受您的劳动成果。
主题制作者的一些注释
如果您制作自己的主题,则可能需要遵循一些指导原则,以便更轻松地创建子主题。这两个最重要的是学习的区别get_stylesheet_directory()get_template_directory()和创建可插拔的功能。
正确的目录
使用上述函数链接到资源时,您应始终注意get_template_函数族将始终指向父主题的目录,而get_stylesheet_函数族将始终指向子主题的目录。

在上面的示例中,第一个链接从父主题获取其图像,第二个链接从子主题获取它。你应该使用哪一个没有好的答案,这取决于你。
使用get_stylesheet_directory_uri()的好处是,子主题开发人员可以通过在适当的位置创建它来使用自己的图像。另一方面,如果图像在子主题中不存在,则根本不显示。
这样做的原因是,如果子主题处于活动状态,则该get_stylesheet_directory_uri()函数不会检查(并且不知道)您正在加载哪个文件,因此它不会检查它是否存在,它将始终为子进程返回URI主题。
可修改的功能
你应该使用的另一种方法是WordPress调用可插入函数。这使得子主题作者可以覆盖您在父主题中定义的函数。这涉及将您的功能包装在function_exists()函数中。
让我们假设你为一个名为的自定义post元显示创建一个函数my_meta()。子主题无法修改此功能,因为它无法定义两次。解决方案是仅在尚未定义的情况下创建此函数(请记住,首先加载子主题的函数文件)。

结论
使用一些非常简单的可复制的步骤,您可以为您的主题创建一个面向未来的环境,这将为您节省很多麻烦。虽然在WordPress中使用内置主题编辑器可能很诱人,但如果你没有使用子主题,它几乎总会导致比它解决的更多问题。

Back to Top