functions.php 文件是wordpress主题中的核心函数文件,包含wordpress主题的所有调用功能,是主题必不可少的文件。在子主题中引用父主题的 functions.php 文件不像是引用 style.css 文件会把原先的样式覆盖掉,而是把子主题的 functions.php 的内容追加到父主题的 functions.php 文件优先加载。
我们有时想要增加功能,但是当主题升级之后,我们增加的功能就被覆盖掉了,比较聪明的办法就是利用子主题的这个特性,想要增加父主题的功能,我们可以新建一个子主题,然后把功能放在 functions.php 中,这样即使是父主题升级了也没有关系。
注意,不必把父主题的 functions.php 文件内容,全部复制到子主题的 functions.php 中。
关于 functions.php 中功能代码的编写,就跟普通主题的一样,例如下面一个例子(添加 favicon.ico 到头部):
1 2 3 4 5 6 7 8 |
<?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 文件的引用机制,是在父主题的 functions.php 之前加载使用的。那么我们就可以利用这个特性,来替换父主题的相关函数等。例如:
1 2 3 4 5 |
if (!function_exists('theme_special_nav')) { function theme_special_nav() { // Do something. } } |
这样,子主题就可以通过事先简单的声明来替换父主题的 PHP 函数功能啦。
引用子主题中的其他文件
如果在子主题目录中还有一些其他的文件要引入,你可以使用 get_stylesheet_directory() 这个函数来获取当前子主题的目录位置。因为父主题的 style.css 文件被你的子主题的 style.css 文件替换了,但是你的子主题 style.css 文件却在子主题目录中,使用 get_stylesheet_directory() 函数可以指向你的子主题目录位置,这样就可以引用子主题目录里面的文件啦。
这个例子使用 require_once 引入一个存放在你子主题目录中的文件。
1 |
require_once( get_stylesheet_directory(). '/my_included_file.php' ); |
1 |
修改替换父主题的模板文件 |
父主题的文章页面(single.php)的 HTML 结构已经满足不了我强大的样式定义需求了,可以通过在子主题中增加一个同名的模板文件(single.php)直接覆盖掉父主题对应的模板文件,注意一定要和父主题的模板文件同名才可以覆盖。
注意:你在子主题中所做的一切,都不会影响到原来的父主题,所以即使是父主题升级了,模板文件变动了,你的子主题的相关代码仍然会起作用。
wordpress子主题实质上就是一个独立的主题,不仅仅可以使用 style.css、functions.php 等文件,还可以增加其他的主题必备的文件和资源,例如:图片、样式、Javascript 等。当然,你要通过正确的链接地址引用到它们。