概述
如果您使用的是从免费的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,这是二十十九主题的孩子。
通过使用存储主题的文件夹名称,您可以将任何主题用作父主题。 不要使用主题标题:而是使用文件夹名称。
现在保存样式表,并在您的子主题中创建另一个文件,称为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将使用模板层次结构来查找最相关的文件:
- 使用slug,该特定类别的类别存档模板文件: category-travel.php
- 该特定类别的类别归档模板文件,使用ID: category-23.php
- 通用分类存档文件: category.php
- 常规存档文件: archive.php
- 包罗万象 : index.php
WordPress将在您的父主题和子主题中查找这些主题。 无论是父主题还是子主题,WordPress都将使用其找到的层次结构中的第一个文件。
有一个例外。 当最相关的模板文件在父主题和子主题中都有版本时,WordPress将使用子主题中的文件,而忽略父主题中的文件。 这是子主题的最常见用途之一-覆盖父主题中的特定文件。
这是使用上面的类别示例的一些示例:
- 如果您的子主题具有archive.php和index.php,而您的父主题具有category.php和index.php ,则WordPress将使用父主题中的category.php ,因为它在层次结构中最高。
- 如果您的子主题具有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()
钩上。
然后,您可以为子主题编写函数,就好像父主题中的那个函数不存在一样-记住不要给它起相同的名字!
子主题是编辑主题的有用工具
儿童主题有两个主要用途:
- 具有设计为用作父主题的主题(通常称为框架)。 该框架不是为单独使用而设计的:相反,您添加了带有子主题的样式和额外的模板文件。
- 允许您编辑父主题而不实际直接对其进行编辑,或者添加其他模板文件。 这意味着在将来更新父主题时,您不会丢失工作。
翻译自: https://code.tutsplus.com/tutorials/how-to-create-a-wordpress-child-theme--cms-33278
最后
以上就是粗心马里奥为你收集整理的如何创建WordPress子主题的全部内容,希望文章能够帮你解决如何创建WordPress子主题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复