如何创建 WordPress 子主题

作者 : 慕源网 本文共3818个字,预计阅读时间需要10分钟 发布时间: 2021-09-22 共520人阅读

如果您使用的是从免费 WordPress 主题存储库下载的主题,或者您从ThemeForest购买的主题,则可能需要对其进行一些调整。

也许您想注册新字体或添加新模板文件。也许您想从Envato Tuts+ 上的教程或课程之一中添加一些代码。或者您可能想使用该主题作为您自己设计的主题的基础。

您可能想直接去编辑第三方主题(即不是您自己编写的主题)的源代码,但不要这样做!下次更新该主题时,将下载新文件,您将丢失所做的所有更改。

令人沮丧,至少可以说。

但是,如果您确实需要编辑主题,该怎么办?

幸运的是,有一种方法可以编辑主题中的代码,并且仍然可以下载最新更新:即通过使用原始主题作为父主题创建子主题。

这意味着您将在 WordPress 管理中激活子主题,但在该主题的代码中是 WordPress 的说明,告诉它这是一个子主题,以及父主题是什么。您将父主题安装在您的站点上,但您没有激活它。(保持安装它很重要,因为没有它,子主题会中断。)

在本教程中,我将向您展示如何在 WordPress 中创建子主题。我还将为您提供有关子主题和父主题如何工作的一些提示,以便您了解正在使用哪组代码来显示您网站中的内容。

创建子主题

首先要做的是在wp-content/themes文件夹中创建子主题。子主题必须有两个文件才能工作:样式表和函数文件。您还可以添加可选文件,例如模板文件或包含文件。

在主题文件夹中为您的子主题创建一个文件夹,并为其取一个合适的名称。我打电话给我的tutsplus-child-theme

在该文件夹中,创建一个名为style.css的文件。

在该文件的顶部,添加以下注释掉的代码:

/*
Theme Name:     Tutsplus Child Theme. Child for Twenty Nineteen.
Theme URI:      https://github.com/rachelmccollin/tutsplus-child-theme
Description:    Theme to support tutsplus tutorial. Child theme for the Twenty Nineteen theme.
Author:         Rachel McCollin
Textdomain:     tutsplus
Author URI:     https://rachelmccollin.com/
Template:       twentynineteen
 
Version:        1.0
*/

这告诉 WordPress 这是一个主题,并提供与您在任何主题中找到的相同的主题信息 – 只是添加了一个。该Template: twentynineteen行告诉 WordPress 这是 29 主题的子项。

通过使用存储它的文件夹的名称,您可以将任何主题用作父主题。不要使用主题的标题:而是使用文件夹名称。

现在保存样式表并在您的子主题中创建另一个文件,称为functions.php

在此文件中,您需要将来自父主题的样式表加入队列。过去,您是通过@import在样式表中使用一行来完成此操作的,但这不再是推荐的方法。

相反,在您的函数文件中,添加以下代码:

<?php
 
/* enqueue script for parent theme stylesheet */   
function tutsplus_parent_styles() {
     
    // enqueue style
    wp_enqueue_style( 'parent', get_template_directory_uri().'/style.css' );
         
}
add_action( 'wp_enqueue_scripts', 'tutsplus_parent_styles');

这正确地将样式表从父主题排入队列,get_tempate_directory_uri()用于查找该主题(模板目录是存储父主题的文件夹,而样式表目录是存储当前主题的文件夹)。

如果您想向子主题添加任何样式以覆盖或增强父主题中的样式,请返回子主题的样式表并将其添加到那里。不要在函数文件中添加或尝试将更多样式表加入队列。

您还可以将函数添加到子主题的函数文件中,将模板文件添加到主题文件夹中,这将覆盖父主题中的相同模板文件。

所以现在您已经设置了您的孩子主题——就这么简单!但是,确切了解子主题模板文件和父主题模板文件的交互方式是值得的。

创建模板文件

现在让我们来看看主题模板文件。WordPress 使用哪个模板文件在您的网站上显示页面取决于两件事: 模板层次结构 和您添加到子主题的文件。

假设您正在查看 站点中的旅行类别存档页面。WordPress 将使用模板层次结构来查找最相关的文件:

  1. 该特定类别的类别存档模板文件,使用 slug:  category-travel.php
  2. 该特定类别的类别存档模板文件,使用 ID:  category-23.php
  3. 年龄内部分类存档文件:  category.php
  4. 一般存档文件:  archive.php
  5. 包罗万象:  index.php

WordPress 将在您的父主题和子主题中查找这些。WordPress 将使用它找到的层次结构中的第一个文件,无论它是在父主题还是子主题中。

有一个例外。当最相关的模板文件在父主题和子主题中都有一个版本时,WordPress 将使用来自子主题的文件并忽略来自父主​​题的文件。这是子主题最常见的用途之一——覆盖父主题中的特定文件。

以下是一些示例,使用上面的类别示例:

  • 如果您的子主题有 archive.php 和 index.php 并且您的父主题有 category.php 和 index.php,那么 WordPress 将使用  父主题中的category.php因为它是 h在层次结构中最高。
  • 如果您的子主题有 category.php 和 index.php 而您的父主题有 archive.php 和 index.php,WordPress 将使用 来自子主题的 category.php文件,因为它在层次结构中最高。
  • 如果您的子主题有 archive.php 和 index.php 而您的父主题有 archive.php 和 index.php,WordPress 将使用 您子主题中的 archive.php文件。这是因为在层次结构中最高的文件有两个副本,并且子主题覆盖了父主题。

因此,如果您想覆盖父主题中的模板文件,请使用所需代码在子主题中创建该文件的副本。或者创建一个在模板层次结构中较高的文件并将其添加到您的子主题中。

为子主题添加功能

函数的工作方式与模板文件不同,而且不那么简单。

如果您向子主题添加与父主题同名的函数,WordPress 将抛出错误,因为它试图调用相同的函数两次。

但是如果父主题中的函数是可插入的,则不会发生这种情况。

可插入文件包含在对另一个同名函数的条件检查中,如下所示:

if ( ! function_exists( 'tutsplus_function_name' ) ) {
 
    function tutplus_function_name() {
     
    // contents of function
     
    }
}

在这里,WordPress 将检查是否尚未调用具有相同名称的函数。如果是这样,它将运行此功能。这是因为子主题的函数在父主题的函数之前被调用。如果您在子主题中编写了一个具有相同名称的函数,则会运行该函数。

但是如果父主题函数不可插入并且您想覆盖它怎么办?

好吧,您可以通过编写一个新函数来实现这一点,该函数基本上取消了父主题中的函数,赋予它比父主题中的函数更高的优先级,以便它在父主题函数之后运行。或者,您可以从父主题中取消挂接该函数,并在子主题中编写一个新函数,挂接到同一个钩子上。

想象一下父主题中的函数是这样的:

function tutplus_parent_function() {
         
    // contents of function here
 
}
add_action ( 'init', 'tutplus_parent_function' );

如果您的子主题中的函数可以撤消父主题的功能,而不必实际停止父主题函数的运行,则可以这样编写:

function tutplus_child_function() {
         
    // contents of function here
 
}
add_action ( 'init', 'tutplus_child_function', 20 );

但是如果你不得不阻止父主题的函数运行,你可以先解开它,像这样:

function wpmu_remove_parent_function(){
     
    remove_action( 'init', 'tutplus_parent_function' );
 
}
add_action( 'wp_head', 'wpmu_remove_parent_function' );

请注意,您仍然必须将该remove_action()函数放入另一个函数中,wp_head()在这种情况下是挂钩到钩子的。

然后,您可以为子主题编写函数,就好像父主题中的函数从未存在过一样——记住不要给它同名!

子主题是编辑主题的有用工具

子主题有两个主要用途:

  • 使用设计为用作父主题的主题(通常称为框架)。该框架不是为单独使用而设计的:相反,您可以使用子主题添加样式和额外的模板文件。
  • 允许您在不实际直接编辑的情况下编辑父主题,或添加额外的模板文件。这意味着当将来更新父主题时,您不会丢失您的工作。

因此,下次您阅读教程告诉您使用子主题而不是编辑第三方主题时,您就会知道该怎么做!

 


慕源网 » 如何创建 WordPress 子主题

常见问题FAQ

程序仅供学习研究,请勿用于非法用途,不得违反国家法律,否则后果自负,一切法律责任与本站无关。
请仔细阅读以上条款再购买,拍下即代表同意条款并遵守约定,谢谢大家支持理解!

发表评论

开通VIP 享更多特权,建议使用QQ登录