functions.php 是什么、什么时候加载

作者: admin 分类: wordpress主题制作教程 发布时间: 2026-11-06 18:36

functions.php 是什么

它不是模板,不输出任何页面内容。它是主题的“功能文件”——放一些辅助函数、注册菜单、注册侧栏、挂载钩子。

caogenbj 的 functions.php 里放了:评论过滤、description() 函数、标题过滤器、分页函数、面包屑函数、侧栏注册。

它什么时候加载

这是它最关键的特性:functions.php 比所有模板文件都先加载。

一个请求进来,WordPress 的顺序是:

  1. 加载插件;
  2. 加载主题的 functions.php;
  3. 判断页面类型、查数据库;
  4. 加载模板(single.php 等)。

所以 functions.php 里定义的东西,模板里都能直接用。比如你在 functions.php 定义了 lingfeng_pagenavi(),模板里就能调它。

能干什么

常见的几类:

  • 注册:菜单位置、侧栏、图片尺寸;
  • 挂钩子:add_action / add_filter,改 WordPress 的默认行为;
  • 定义函数:主题自己用的小工具函数(分页、面包屑、摘要);
  • 加载资源:引入 CSS/JS(更规范的做法是 wp_enqueue_script)。

不该放什么

有三个东西不该放这里:

  1. 页面内容:那是模板的活;
  2. 大量 HTML:函数里 echo 一大段 HTML 不好维护,用模板文件;
  3. 应该属于插件的功能:比如“文章浏览计数”“相关文章算法”——这些换主题就没了,应该做成插件。

判断标准:这个功能,换个主题还要不要?要 → 插件;不要 → 主题。

一个常见的坏习惯

很多人把所有东西都塞进 functions.php,几百行、上千行。结果换主题时全丢,或者维护时找不到。

更好的做法是拆分:

  • functions.php 只做“入口”,用 require 引入其他文件;
  • 具体功能分文件:inc/setup.php(注册)、inc/hooks.php(钩子)、inc/helpers.php(工具函数)。

小主题不拆也行,但要有“以后可能拆”的意识,别把无关的东西混在一起。

一个语法注意点

纯 PHP 文件末尾不要写 ?>。

因为 ?> 后面的任何空白(空格、换行)都会被原样输出。而 functions.php 在所有页面输出之前加载,这些空白会跑到每个页面的最前面。

在 HTML 里看不出(浏览器忽略),但在 XML(比如站点地图)里就是致命的——<?xml 前面多了空白,解析直接失败。

caogenbj 的 functions.php 原来末尾就有 ?> 加 8 个空行,我这次一并删了。

小结

一句话记住:functions.php 是主题的功能层,比模板先加载;放注册、钩子、工具函数,别放页面内容;末尾不要写 ?>。

下一篇讲钩子——add_action 和 add_filter 到底在干什么。

本系列导航

相关文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

Powered by 草根站长笔记 © 2015-2026 草根站长笔记 Inc.版权所有,禁止转载