一个现成的主题,未必能完全满足每个人的需求,因而要对它作出修改。如果直接修改主题,当它升级之后,所做的更改就会被更新覆盖掉,又得再次修改,实在是麻烦。针对这一点,WordPress 使用了一个叫子主题的功能来解决。
所谓子主题,就是引用另一个主题同时又比被引用的主题优先级高的主题。当你制作一个子主题,并把子主题链接到相应的父主题上时,在子主题里有的模板文件就会优先使用,子主题里没有模板文件才会继续调用父主题的模板文件(functions.php 除外,如果子主题和父主题都存在 functions.php 函数模板,那么会按先子主题后父主题的顺序同时引入)。
简单来说,子主题就是一个单独的主题,继承了父主题功能的同时又会覆盖父主题的功能,通过创建一个非常基本的子主题 来对一个父主题的样式和布局进行修改和扩展,而不需要对父主题的文件作任何修改,同时又不用担心父主题更新导致修改失效,因为子主题一直会存在。
创建子主题
创建一个子主题是很简单的。创建一个目录,将格式编写正确的 style.css 文件放进去,一个子主题就做成了!
首先看一下子主题所属的目录结构:
- wp-content
- themes(主题目录)
- llorix-one-lite(父主题目录)
- index.php(必须)
- style.css(必须)
- functions.php
- header.php
- footer.php
- (完整的模板)……
- llorix-one-lite-child(子主题目录)
- style.css(必须)
- functions.php
- (可选部分的模板文件,会覆盖同名的父主题模板文件)……
- llorix-one-lite(父主题目录)
- themes(主题目录)
style.css
style.css是一个子主题唯一必须的文件。它的头部提供的信息让WordPress辨认出子主题,并且重写父主题中的style.css文件。下面是一个style.css文件的头部信息的示例:
/*
Theme Name: Llorix One Lite Child
Theme URI: https://www.themeisle.com/llorix-one/
Description: This is a custom child theme created by <a href="http://www.janesjwu.com">JaneW</a>.
Author: Jane Wu
Author URI: http://www.janesjwu.com
Template: llorix-one-lite
Version: 1.0
*/
@import url("../llorix-one-lite/style.css");
代码解释:
- Theme Name(必须):子主题名字
- Theme URI(可选):子主题的页面
- Description(可选):子主题的描述
- Author(可选):子主题作者
- Author URI(可选):子主题作者的网站
- Template(必须):父主题目录名,区分大小写
- Version(可选):子主题版本
- 用
@import
规则将父主题的样式表调入
主要看加亮的必须参数就好,名字没什么好说,会在后台显示;Template 要注意,决定子主题归属于哪个父主题,要填写父主题目录名。
*/
这个关闭标记的后面部分,就会按照一个常规的样式表文件一样生效,你可以把你想对WordPress应用的样式规则都写在它的后面。
要注意的是,子主题的样式表会替换父主题的样式表而生效。(事实上WordPress根本就不会载入父主题的样式表。)所以,如果你想简单地改变父主题中的一些样式和结构——而不是从头开始制作新主题——你必须明确的导入父主题的样式表,然后对它进行修改。@import
规则之前不能有其他的CSS样式规则,如果你将其他的规则置于它之上,那么它将无效,并且父主题的样式表不会被导入。
functions.php
不像style.css,子主题中的functions.php不会覆盖父主题中对应功能,而是将新的功能加入到父主题的functions.php中。(其实它会在父主题文件加载之前先载入。)
这样,子主题的functions.php提供了一个灵活稳定的方式来修改父主题的功能。如果你想在你的主题里加入一些PHP函数,最快的方式可能是打开functions.php文件然后加入进去。但那样并不灵活:下次你的主题升级更新了,你加入的新功能就会丢失掉。相反地,如果你使用子主题,将functions.php文件放进去,再将你想加入的功能写进这个文件里,那么这个功能同样会工作得很好,并且对于父主题以后的升级更新,子主题中加入的功能也不会受到影响。
functions.php文件的结构非常简单:将PHP起始标签置于顶部,关闭标签置于底部,它们之间就写上你自己的PHP函数。你可以写得很多,也可以写得很少,反正按你所需。下面的示例是一个基本的functions.php文件的写法,作用是将favicon链接加入到HTML页面的head元素里
面。
<?php
function favicon_link() {
echo '<link rel="shortcut icon" type="image/x-icon" href="/favicon.ico" />' . "\n";
}
add_action('wp_head', 'favicon_link');
?>
给主题作者的提示。事实上子主题的functions.php首先加载意味着你的主题的用户功能可插入——即子主题是可替换的——通过有条件地进行声明。例如:
if (!function_exists('theme_special_nav')) {
function theme_special_nav() {
// Do something.
}
}
用这种方式,子主题可以替换父主题中的一个PHP函数,只需要简单地对它再次声明。
模板文件
模板文件 在子主题中的表现和style.css一样,它们会覆盖父主题中的相同文件。子主题可以覆盖任何父主题模板中的文件,只需要创建同名文件就行。(注意:index.php在WordPress3.0及以上版本才能被覆盖。)
同样,这项WordPress的功能允许你修改父主题的样式功能而不用去编辑父主题的文件,并且你的修改能让你在更新父主题后继续保留。
下面是一些使用模板文件的子主题的例子:
- 增加一个父主题没有提供的模板(例如:网站地图页面的模板,或者一单栏页面,它们在页面编辑,模板选择里是可用的)
- 增加一个比父模板更加具体的模板(见模板级别)。(例如:新加的tag.php模板用于按tag归档的文章来代替父主题中通常的archive.php模板。)
- 替换父主题中的一个模板.(例:使用你自己的home.php来覆盖父主题中的home.php)
其他文件
除了style.css,functions.php,index.php和home.php,子主题可以使用任何正式主题使用的类型的文件,只要文件被正确链接。打个比方,你可以使用在样式表里或者Javascript文件里链接的图标、图片,或者从functions.php文件中调用出来的额外PHP文件。
插件创建子主题
有一个叫做 Orbisius Child Theme Creator 的插件,可以一键创建子主题,我并没有测试,感兴趣的同学可以尝试一下。
启用子主题
经过上边的操作,回到后台的主题页面就可以看到刚才创建的子主题了,启用它。
可以发现和启用父主题的效果是完全一样的,只是主题的名字变成了 “Llorix One Lite Child”。
利用子主题定制父主题
子主题最终的用途是来定制父主题,比如要定制首页的内容,只需要把相应的模板文件放在子主题目录,WordPress 检测到就会自动优先调用。
未经允许不得转载:又闻琴音 » 创建WordPress子主题
评论前必须登录!