WordPress 子主题的使用教程。
文章目录[隐藏]
如果你从比如一为主题等地中购买过 WordPress 主题,那么相信你一定对个性化的修改主题并不陌生。比如你修改了主题的一个文件,那么当你更新以后,那将会是噩梦!因为你白修改了。此时,如果你没有备份,那么好了,恭喜,要重新修改。
这个时候 “子主题” 就诞生了。WordPress 子主题也是一个主题,它继承了另一个主题(父主题)的功能,并允许你对父主题的功能进行修改,或添加新功能。
创建一个子主题是很简单的。创建一个主题目录,将按照正确的 WordPress 格式编写正确的 style.css 文件放进去,一个子主题就做好了。紧接着,只需要对一个父主题的样式和布局进行修改和扩展,而不需要对父主题的文件作任何修改。通过这样的方式,当父主题被更新的时候,所做的修改依旧可以保存下来。
如果主题并不是自己写的,而且需要持久化更新,那么强烈建议使用 “子主题” 的方式,对主题进行修改。
一、目录树结构
- wwwroot
- ...
- wp-content
- ...
- themes
- ...
- OneNav —— 父主题
- OneNav-child —— 子主题,可自定义命名
像上面这样,子主题本身也是个主题,只是基于父主题 OneNav 而已。这也就意味着,它也一样必须要有 style.css。你也可以需要它有 functions.php、模板文件、其它文件,当然,这都是可选的。
二、style.css
众所周知,主题必须要有 style.css 来声明主题的信息。不过子主题就不太一样了,因为它要声明父主题。可以通过下面的例子来了解到。
/*
Theme Name: One Nav (Child)
Theme URI: https://example.com/
Description: The example theme.
Author: Elon Musk
Author URI: https://example.com/author/
Template: OneNav
Version: 1.0.1
*/
- Theme Name:子主题名字(必须)
- Theme URI:子主题的主页
- Description:子主题的描述
- Author:作者的名字
- Author URI:作者的主页地址
- Template:父主题目录名(必选),对大小写敏感!
- Version:子主题版本号
温馨提示:当你更改子主题名字时,要先换成别的主题。
剩下的,就是和普通的 CSS 一样了,注释结束后,就可以自由的写 CSS 了。当然,你也可以不写。如果你懂的主题的 style.css 那么除了需要写父主题的目录名外,其它的都一致。
三、替换主题样式
比如,在 OneNav 主题中,默认的主题颜色是 #F1404B。当然了,也是 style.css 文件。
就像这样
它被写在了这里,但我知道,你根本没见过这个颜色(2023 年 04 月 08 日),不只你没见到过,我也没见到过,因为目前根本就没有。
一般,看文章看到这里的,应该多少对 H5 + C3 有所了解。所以你就可以不用看主题,脑补样式。这很显然,就是一个变量。如果主题有用上过这个颜色,那么想要通过子主题修改它,我们只需要将子主题的 style.css 这样操作。
/*
Theme Name: One Nav (Child)
Theme URI: https://example.com/
Description: The example theme.
Author: Elon Musk
Author URI: https://example.com/author/
Template: OneNav
Version: 1.0.1
*/
/* 引入 OneNav 父主题的样式表 */
@import url("../OneNav/style.css");
/* 并覆盖掉那个变量 */
:root {
--theme-color: #FFFFFF;
}
如此简单的,就完成了替换。
值得注意的是,@import
规则之前没有其他的 CSS 样式规则,如果你将其他的规则置于它之上,那么它将无效,并且父主题的样式表不会被导入。(后来者居上原则,被替换了)
四、functions.php
子主题中的 functions.php 不会覆盖父主题中对应功能,而是将新的功能加入到父主题的 functions.php 中(但子主题的 functions.php 会优先于父主题的文件加载)。使用这种方式,可以让子主题的 functions.php 修改父主题的功能更加灵活。
functions.php 和它的名字一样,就是写各种自定义方法函数的文件。
比如 WordPress 官方的一个例子,将页签图标挂到 HTML 头里:
' . "\n";
}
add_action('wp_head', 'favicon_link');
当然了,只要不是给自己写的程式,都建议判断不存在这个名字的函数的时候才会覆盖你现有的函数。就像下面这样:
if (!function_exists('my_func')) {
function my_func() {
return 'prkblog.cn';
}
}
值得注意的是,替换的过程是在父级主题中,使用 PHP 的 function_exits 进行判断。所以,如果父主题没有使用这种方式,建议大家炎上作者,让他下一个版本更新出来。
五、模板文件
模板文件和 style.css 一样会覆盖父主题中的相同文件。子主题可以覆盖任何父主题模板中的文件,只需要创建同名文件就可以覆盖。
比如,OneNav 主题中,模板目录下有一个 “friendlink.php” 作为友情链接的模板文件。那么你只需要在子主题的 templates 中创建一个 “friendlink.php” 即可完成替换。
六、更多文件
除 style.css,functions.php,index.php 和 home.php 外,子主题可使用任何正式主题使用的类型的文件,只要文件被正确引用。
比如,你可使用在样式表里或者 JavaScript 文件里链接的图标、图片,或者从 functions.php 文件中调用出来的额外 PHP 文件。这一点和父主题的开发一样,因为子主题本质上就是基于父主题而替换部分资源的。
共有 0 条评论