亲爱的朋友们,大家好!我又来了!
这次要打脸了……上次结尾的时候说,要开始逐一完善各个页面,但是后来发现 functions.php 忘记介绍了……
functions.php 在 WordPress主题中是非常重要的。WordPress主题中模板文件都是用来“展示”的,但多多少少总还有些业务逻辑以及数据要处理,这就是 funcsions.php 的任务了。这次就一起学习一下 functions.php 吧。
我们先做个小实验,感受一下 functions.php 。在 the_first 主题目录中新建 functions.php,在文件中输入如下代码:
<?php
echo '追格小程序';
然后,访问网站的前台随便一个页面,都会发现:
然后,再看看后台的页面,同样的:
不难看出,在 functions.php 文件中的代码,优先级是非常高的。不管是前台、后台,都会在页面代码执行之前,先执行 functions.php 的代码。
因此,当我们需要关闭或打开一些 WordPress 的功能开关,或者增加或删除一些 WordPress 的特性,或者定义一些函数在模板文件中调用…… 把这些代码放在 functions.php 中是非常合适的。
现在可以在 functions.php 做点有意义的事儿了。
首页中左上角的LOGO和头部的幻灯片,这些功能都是在后台可配置的,如下:
这些配置项是怎么实现的呢?
这里我们没有直接使用 WordPress 配置项相关的 API(WordPress 配置项 API 使用起来比较繁琐,这里就不介绍了),而是用了之前提到过的Codestar Framework,之前曾有文章介绍过:《codestar-framework:WordPress主题插件后台开发的强大配置助手》。
引入 Codestar Framework 到 WordPress 主题有两种方式,一种就是 Codestar Framework 文档(https://codestarframework.com/documentation/#/)介绍的:
1. 下载 Codestar Framework 代码;
2. 将 Codestar Framework代码 作为一个 WordPress 插件,上传、安装、启用;
3. 在 functions.php 中添加配置代码。
还有就是可以像 酱茄Free主题 那样,把上面的第二步改成:把 Codestar Framework 代码,放到主题目录下,然后在 functions.php 中包含:
require_once TEMPLATEPATH . '/inc/codestar-framework/codestar-framework.php';
Codestar Framework 官网是推荐以插件方式使用的,因为这样可以避免 Codestar Framework 版本不同造成的冲突-前提是所有的 Codestar Framework 使用者都使用这种方式。国内大多数开发者都是在主题或插件目录中直接包含 Codestar Framework 代码,我们也就随大流吧。
上面的代码中有一个静态变量:TEMPLATEPATH。TEMPLATEPATH 是当前主题的目录,用来定位主题目录中的文件是比较方便的,以后会常用到。
我们这里就直接把酱茄Free主题中的这部分代码拷贝过来了,因为这部分代码,基本就是参考 Codestar Framework 文档,逐个写控件代码,比较简单且乏味。后面聊到在前台展示的时候,每个配置项都还会用到。
这次内容较少,再聊一个小知识点。在 酱茄Free主题 中,所有PHP文件的头部,都有一段代码:
<?php if (!defined('ABSPATH')) {
die;
} // Cannot access directly.
?>
ABSPATH 是 WordPress 中的一个常量,就是WordPress安装的绝对路径。同 TEMPLATEPATH 一样,大多数时候用来定位其他文件的位置。
上面这段代码检查 ABSPATH 是否存在,如果不存在就直接返回。这段代码有什么作用呢?
在 WordPress 经典主题中,好多PHP文件,这些文件中都是PHP代码。这些代码只有在 WordPress 环境中,受到 WordPress 约束时才能正常运行。
有一些人比较调皮,会在地址栏直接访问这些PHP文件,比如:
https://【你的域名】/wp-content/themes/the_first/index.php
毫无意外,页面报错了。大部分主机环境都会隐藏具体的错误信息,只告诉页面出错异常了。也有一些环境会直接显示具体的错误信息。对于一些不怀好意的人,这些信息可能会被利用。如何阻止这些非常规的访问请求呢?
如果直接访问模板文件,ABSPATH 是未定义的。因此,可以通过判断 ABSPATH 是否存在,来阻止一些非常规请求。
动动手,给我们主题中的文件都加上这个安全保护吧!
最新的代码,依旧上传在:
https://gitee.com/zhuige_com/course_jiangqie_theme
距离一个完整的主题,好像还有点远,好在我们一直在前进。
下周见,朋友们。
暂无评论,抢个沙发...