WordPress 主题的 functions.php 与插件该怎么分

· wordpress · 阅读 9
摘要

很多人把所有代码都塞进 functions.php,换主题时全部作废。这条界限值得一开始就划清楚。判断标准:换主题之后还需要吗?只要答案是需要,就放进插件。功能归属注册导航菜单、侧栏主题自定义文章类型(作品集)插件短代码 [year]插件文

很多人把所有代码都塞进 functions.php,换主题时全部作废。这条界限值得一开始就划清楚。

判断标准:换主题之后还需要吗?

只要答案是需要,就放进插件。

功能归属
注册导航菜单、侧栏主题
自定义文章类型(作品集)插件
短代码 [year]插件
文章内容的样式类主题
统计代码、SEO meta插件
图片尺寸定义主题

functions.php 里应该有什么

  • add_theme_support() 系列声明
  • register_nav_menus()
  • wp_enqueue_style/script 的排队
  • 主题特有的图片尺寸、模板标签

建议把 functions.php 拆成 inc/ 目录再加 include,保持单文件不超过两三百行,方便维护。

常见的错误做法

  • 在 functions.php 里写 SQL 直接改表
  • 把插件级别的功能做成短代码塞主题里,用户换主题后页面上一片空白只剩短代码文本
  • 用 after_setup_theme 里注册 CPT,这会因为加载顺序不稳定而出问题

子主题的正确用法

改别人的主题不要直接改,建子主题,在子主题的 functions.php 里覆盖父主题的函数。但要注意:父主题如果写成 if (!function_exists('xxx')) 才执行的风格,子主题才能覆盖;写死了函数名的父主题,子主题覆盖会直接导致全站白屏。