为什么你不应该使用functions.php(以及你应该做什么)


您是否遇到过 WordPress 教程要求您将代码添加到 functions.php 文件以完成某项工作? 不要这样做!阅读以下内容,找出原因......
我相信使用 WordPress 的人可以分为三大阵营:
- 即插即用: WordPress 爱好者,他们可能不是经验丰富的网站设计师,正在寻找统包解决方案.他们会找到一个主题,安装它,然后可能会继续创作内容.
- Tweakers:这些人会采用一个可能直接开箱即用的主题并应用他们自己的调整.他们可能会使用 custom.css 和 custom_functions.php 文件(或类似文件)来自定义他们的主题.他们会选择一个现成的选项,然后把它弄得一团糟,直到他们拥有 (a) 满足他们的需求,并且 (b) 看起来很独特.
- 框架人员:这些通常是开发人员,他们会从一个主题框架开始,该框架提供的内容非常少——你猜对了——一个框架,内容可以放在上面.数小时或数天后,他们将制作出真正独特的东西,并根据自己或客户的特定需求进行定制.
如果非要我猜的话,我会说三个阵营中最大的阵营是tweakers.
让我们面对现实:WordPress 是调整者的天堂.仅配备 Google 搜索和您的 functions.php 文件,WordPress 让 相对轻松地为您的网站添加各种功能.
唯一的问题是许多调整者在玩火.使用 functions.php 向您的网站添加功能可能是一个等待发生的意外(出于多种原因).在本文中,我将解释原因,并为您提供一些更好的替代方案.

WordPress 的工作原理
WordPress 的核心是一个简单的原则:设计和功能应该(尽可能)明确分开.
这就是我们拥有主题和插件的原因;表面上,主题全权负责设计,插件全权负责功能.一个应该能够在不影响功能的情况下切换主题,并且一个应该能够在不影响设计的情况下停用插件.
这不是总是可能的(其中一些原因我很快就会谈到),但是设计和功能的分离是任何 WordPress 开发人员都值得他或她的盐分的理想选择应该瞄准.
PHP 与函数.php
WordPress 初学者经常感到困惑并提出以下问题:
- WordPress 中的 PHP 函数在哪里?
- PHP 在 WordPress 中的作用是什么?
- 如何向 WordPress 中的 PHP 函数添加函数?
- 每个主题都需要函数 PHP 文件吗?
首先,PHP 在 WordPress 中随处可见,因为它是 WordPress 的主要构建语言.我们不会在本文中介绍 PHP 在 WordPress 中的作用,但您可以在我们的面向 WordPress 开发初学者的学习 PHP 教程系列中阅读所有相关内容.
functions.php 是一个特定于主题的文件,我的意思是它存在于 WordPress 主题的目录中,并且仅与该主题有关.每个主题都应该在主题文件夹内有一个 functions.php 文件.

您可以在我们的终极指南中了解有关functions.php 文件、它的作用以及如何添加函数的更多信息到 WordPress functions.php 文件.
那么functions.php 适合于此吗?
正如您从名称中猜到的那样,functions.php 包含与主题相关的函数,例如:
- 精选图片的使用
- 摘录长度
- 小部件化区域
这些类型的功能是证明 WordPress 设计/功能分离规则的例外情况.虽然它们是功能元素,但它们仅与其父主题相关,并且在应用于其他主题时可能不合适.因此,它们属于 functions.php 并且应该保留在那里.
例如,长度为 200 字的摘录可能在一个主题上看起来很棒,但在另一个主题上却很糟糕.虽然我们在技术上通过调整摘录长度来调整网站的"功能",但在 functions.php 中包含必要的代码是正确的做法.
我不打算在本文中深入探讨有效利用 functions.php 的复杂性,但此时值得一提的是,如果您要包含很多主题-您网站中的特定功能,您应该考虑在您的主题中创建一个 inc 目录(或使用预先存在的目录,如果它已经存在)以在您的主题功能中实现某种组织.这是 WordPress 开发人员 Tom McFarlin 的精彩读物如果您想在这条道路上走得更远,则主题.
我的最终观点是:functions.php 不是敌人.它是主题引擎中的一个有价值的齿轮;除了最基本的设计之外的所有设计都是必需的.
然而,functions.php 的滥用很普遍,应该停止.
当您不应该使用functions.php
何时应该使用 functions.php 的简单答案是"几乎从不."
稍微复杂一点的答案是"用你的脑袋."
如果您了解 functions.php 的用途(与特定主题严格相关的功能),您应该能够弄清楚它不是的用途.
可以在 WordPress 网站的插件目录中找到简单的示例.插件(理想情况下)是按其预期功能分隔的逻辑排列的代码"数据包".
在 WordPress 中将功能与设计分开的整个要点的最佳(和更高调)示例之一是 Google Analytics 跟踪代码,如下所示:
需要将此代码添加到您网站的head部分,以便跟踪访问.
在添加此代码时,您有三个主要选择:
- 手动将其添加到主题的 header.php 文件
- 手动将其添加到您的 functions.php(使用 钩子)
- 使用插件
如果您使用选项一或二,如果您更改主题,您的跟踪代码将消失,并且访问者将不再被 Google 计算在内.(下次更新主题时它也可能消失.)但是如果您使用选项三(我建议使用 WPMU DEV 自己的 Google Analytics +),您是金色的.除非您有一个高级时刻并停用您正在使用的插件,否则该跟踪代码将无处可去.
我的简单建议是:如有疑问,请使用插件.它们很受欢迎是有原因的.
为什么不应该使用functions.php
在解释上面的"何时"时,我也用公平的方式解释了"为什么":不要使用functions.php,因为更改主题会改变功能您的网站,这是各种各样的错误.
但是,我还应该提出一些其他要点,以进一步加强尽可能避免使用 functions.php 的原因.
首先是可怕的"死亡白屏".坦率地说,如果您在使用 WordPress 时从未遇到过这种情况,那么您就没有生活过.或者至少当你第一次开始使用 WordPress 时,你比我小心得多.
我觉得在这个阶段我们需要一个截图来澄清这个白屏死机的实际情况:

吓人.但这意味着什么?
好吧,用女王的英语来说,当一个人打开自己的 PHP 时,就会遇到白屏死机.
换句话说,你搞砸了.
换句话说,插入到 functions.php 中的 PHP 代码中的语法错误会"破坏"您的网站,导致您只看到白屏.(别问我"死"从何而来.据我所知,没有人受伤.)
遇到白屏死机时,最好通过FTP 或在线 IDE(如 ShiftEdit)而不是 WordPress 后端,否则,您回到您的网站时会遇到一些麻烦.另外,你会因为使用 WordPress 后端而受到我的掌声.淘气.
但我离题了.我要说的重点是:将您的 PHP 代码放入插件中可以防止白屏死机的发生.相反,WordPress 可能能够停用有问题的插件,而不会对整个网站的持续运营产生负面影响.
其次,如果您打算插入多个代码,那么使用 functions.php 只会很麻烦;特别是如果您使用的主题已经具有现有功能.
第三,正如我上面已经提到的,functions.php 中的代码是特定于主题的(即当您更改主题时不会移动)并且可以被主题更新覆盖.
这些都不好,应该让您相信functions.php 在大多数情况下不是您想要放置代码的地方.当然;保留默认情况下的任何内容(假设主题开发人员仅包含特定于主题的功能),但您添加的任何新代码都可能是公平的.
那你会怎么做?
好吧,事实证明,您有 3 个选择:
- 将其添加到子主题的functions.php
- 使用 WordPress 自定义函数插件
- 创建自己的插件
让我们简要看看这些选项中的每一个:
使用你的孩子主题functions.php
您应该始终在 WordPress 中使用子主题.特别是如果您打算对主题进行任何更改.这样,当您网站的主要(即父级)主题更新时,您不会丢失任何自定义设计或修改.
例如,如果您想将样式从父主题拉入子主题,则必须将其加入子主题的functions.php 文件.如果您的子主题没有,您需要为它创建一个functions.php文件.

如果您需要向 functions.php 文件添加代码,请在您的子主题的 functions.php 中进行.
但是请注意,这不是推荐的解决方案,它可能会导致错误.有一个更好的选择……使用插件!
为 Functions.php 使用 WordPress 插件
比直接向 functions.php 文件添加代码更好的选择是使用 WordPress 自定义函数插件.

My Custom Functions 是一个漂亮的免费 WordPress 功能插件这让您可以轻松地将自定义 PHP 代码添加到您的 WordPress 网站,而无需编辑主题的 functions.php 文件或任何插件文件.
要安装插件,请转到插件>在您的仪表板菜单中添加新功能,在关键字搜索字段中输入"我的自定义功能",找到 Space X-Chimp 的"我的自定义功能"插件,然后点击立即安装 ,然后激活...

插件激活后,WordPress 设置菜单中会出现一个新菜单项.要将自定义功能添加到 WordPress,请从"设置"菜单中选择 PHP 插入器.

这会显示"我的自定义函数"屏幕.只需将您的自定义 PHP 代码添加到该字段中,单击保存并打开该功能,该插件就会自动将您的 PHP 代码添加到您的网站,而无需更改您的任何主题文件,也不会降低您的网站速度.
此插件独立于您安装的主题运行,因此您可以将其用于任何主题,即使该主题没有 functions.php 文件.
使用此方法的好处是,如果您编辑主题的 functions.php 文件的内容,或者即使您更改了使用此插件添加到 WordPress 网站的任何代码,都不会受到影响你的主题.这也适用于插件,因此即使您更新或切换主题或插件,您的自定义 PHP 代码也不会被覆盖.
还有一个选项可以在不涉及主题的 functions.php 文件的情况下向 WordPress 网站添加代码.
美丽的选择:创建自己的插件
如果您是花园式 WordPress 调整者,并且以前从未创建过自己的插件,那么您会认为它涉及某种复杂而神秘的过程,这是情有可原的.也许需要某种咒语.
幸运的是,事实并非如此.如果您知道如何正确编辑 functions.php 文件(通过 FTP 或在线 IDE),您就已经具备了为所有代码创建插件的必要技能functions.php.
那我们就去做吧.
首先,通过 FTP(或您的主机面板的文件管理器,或通过在线 IDE)导航到您的 WordPress 网站的根文件夹.从那里,您应该导航到 wp-content/plugins:
WordPress 目录文件夹
您在 plugins 目录中看到的文件夹是(如您所想)您网站上当前安装的插件.要创建自己的插件,只需创建一个新文件夹.我将其命名为 tme-custom-functions:
WordPress 自定义功能插件文件夹
("TME"是我的首字母缩写,我将它们放在插件名称之前,以免不小心使用现有插件的名称.)
接下来,在您的插件文件夹中创建一个同名的 PHP 文件:
使用这个 WordPress 自定义函数插件将代码添加到 functions.php
最后,将以下代码插入到您全新的 PHP 文件中:
<?php /** * Plugin Name: Custom Functions Plugin * Description: This plugin contains all of my awesome custom functions. * Author: Tom Ewer * Version: 0.1 */ /* Your code goes below here.*/ /* Your code goes above here.*/ ?>
就是这样!确保您的文件已保存,并且您的新 WordPress 自定义功能插件现在将出现在您的 WordPress 插件列表中:

当然,您的插件还没有做任何事情,但是您现在可以随意插入以前驻留在您的 functions.php 文件中的任何自定义函数,并且他们将继续正常工作.
更进一步:创建一个"必须使用"的插件
一般的插件都很好,但如果您希望您选择的功能在任何情况下都能在您的网站上运行怎么办?如果您不希望新的自定义插件弄乱您的插件列表怎么办?
听起来您需要将其设为"必须使用"的插件,这些插件始终在您的网站上处于活动状态(并且无法停用).它们甚至不会出现在 WordPress 的插件列表中,除非您点击插件表中的"必须使用"链接.
要使您的插件"必须使用",只需在 WordPress 站点的 wp-content 目录中创建一个名为 mu-plugins 的文件夹,然后移动您插件的 PHP 文件( 不是 整个文件夹)放入其中.
嘿,快点!该插件从您的列表中消失并重新出现在新的"必须使用"部分中:

让我们把乐趣带回functions.php
希望现在您知道应该和不应该使用 functions.php 文件,并且有更好的替代方法可以将代码添加到 WordPress,例如使用 WordPress 自定义函数插件,创建自己的插件,甚至使用您的子主题functions.php 文件.
创建自己的插件以向 WordPress 添加自定义功能始终是一种选择.如果不出意外,它可以通过创建一个将出现在您客户的 WordPress 后端的插件让您看起来像一个聪明的 WordPress 开发人员,或者至少让您感觉比实际编码要好得多(至少,这就是它的方式我感觉!)
有关使用 functions.php 应了解的更多有用信息,请查看我们的终极指南 WordPress functions.php 文件.或者,如果您真的想给 WordPress 社区留下深刻印象,为什么不学习 PHP 并开始编写自己的插件和主题?有趣、实用且免费!
标签: