是否有任何适用于任何主题的全局functions.php文件?


11

是否有适用于任何主题的某种全局类的functions.php文件?

问题在这里:

当我在任何主题中更改functions.php文件时,我需要注意两个更改:首先,我需要注意该主题的更新。其次,我需要注意更改网站的主题。

因此,除了对主题的functions.php进行更改之外,是否可以对独立于任何主题的某些functions.php文件进行更改?


4
赏金真的必要吗?这个问题已经有了很好的答案
onetrickpony

由于@Mohit Bumb是提供a)赏金的人,b)是第一个建议使用插件的人,我想他应该是获得代表积分的人(返回)。IMO赏金是没有必要的(我想他不知道,他实际上给它)。
kaiser

Answers:


15

主题代码和非主题代码之间的区别是组织而不是技术。任何活动代码都会对最终环境产生影响,与从何处加载无关紧要。

有很多地方可以加载代码,而这些地方并不是WordPress核心的一部分:

  • wp-config.php 配置文件
  • 活动主题(及其父主题用于子主题)
  • 活动插件
  • 必须使用插件
  • 插件(这些插件有些先进,并且用于非常特定的目的)

您自己的代码(通常不应该作为主题的一部分)的典型位置是创建一个插件。其他方法没有从一般情况下获得好处,但是丧失了接口(通过管理区域进行管理)和普通插件的技术(激活/停用/卸载事件)便利。


为您和@kaiser +1。我相信正确的答案是1)创建一个子主题以容纳中的自定义功能functions.php,或2)创建一个自定义插件以容纳该功能,以便可在各种主题之间移植。
Chip Bennett

@Chip因为问题在切换主题时会询问有关保留代码的问题,我认为子主题不合适。如果要切换到儿童主题该怎么办?插件最适合给定的需求。
2011年

这就是为什么我投票赞成你们俩。:)但是,切换主题时,您仍然可以使用子主题;只需Template:在“儿童主题”的中适当更改标签即可style.css
Chip Bennett

@芯片你没明白我的意思。如果我想使用儿童主题怎么办?我用我的代码为“二十一”创建了子主题。然后,我想切换到也是二十一岁(或其他父母)的子主题的主题。除了手动合并两个子主题之外,我别无选择。然后下次取消合并时更改主题。一团糟。
罗斯特(Rarst)2011年

我为此必须使用。我发现这是添加可跨主题使用的函数,挂钩和简码的快速,简单的方法
chiliNUT

6

嗯,这是一个实际的问题,许多人在更改主题时都会遇到问题,但是有一个简单的解决方案。

将该函数添加到一个新的页面,而不是functions.php,并给它一个唯一的名称,例如yousitename + timestamp或您想要的任何名称,但将唯一的具有相同名称的create文件夹压缩并上传为插件,这样在您禁用它之前,它肯定可以工作。

要了解哪个插件适合您,不妨给该插件起个名字,例如:

/*
Plugin Name: XYZ
*/

3

作为@MBTheDeveloper答案的补充。

其他选项是:

  1. 为您当前的主题创建一个子主题,并使用该主题中的functions.php文件(这是“最佳实践”)。
  2. include在主题函数php文件中使用,并加载包含您的自定义代码的custom-function.php文件。

2

不要在主题的functions.php文件中进行特定于站点的更改。

而是创建一个特定于站点的插件。我喜欢使用网站的域名,例如“ ottopress.com”。然后将您的代码片段放入该插件中,并使其仅在该站点上处于活动状态。

另外,如果您有相关更改的摘要,则仅为它们创建一个特定的插件。这使您可以选择根据需要打开/关闭相关的代码位。


2

一些解释

首先,您需要了解主题中functions.php的用途。Functions.php基本上只是一个没有任何名称的插件文件,如果有的话,它将由Wordpress自动加载。Wordpress会为Wordpress的前端页面和后端(管理)页面加载当前主题的function.php。

插件和functions.php之间没有什么区别,除了插件具有名称,并且可以激活/停用它们,而与其他插件和主题无关。funtions.php随附于当前主题,如果您切换到另一个主题,则WordPress会使用新主题的functions.php而不是具有自定义修改功能的旧函数。

主题更新还会覆盖functions.php,即使您将自定义修改放在单独的代码文件中并将其包含在fucntions.php中,也无法避免它,但每次更新后都必须添加包含行。

通常应该在functions.php中使用的代码类型:

  • 主题模板文件中使用的功能。
  • 主题选项
  • 侧边栏
  • 导航菜单
  • 帖子格式
  • 发布缩略图
  • 仅与当前主题相关的任何代码。

因为您希望保留自定义修改,即使您切换主题也是如此。因为子主题在这种情况下不起作用,因为您将切换主题,因此将不使用子主题的functions.php。

解决方案

@Otto推荐的唯一解决方案是创建一个插件文件。创建站点特定插件的方法是在“ wp-content / plugins”中创建一个站点名称为文件夹的文件夹,并在其中创建插件文件。

为什么使用插件文件?而不是单个插件文件。

分组相关站点的功能与单独的插件文件中的代码相关,并且不要忘记在所有插件文件中添加插件头,因此Wordpress会将它们识别为单独的插件。然后,您将能够激活/停用站点的不同功能/功能,而不会破坏所有功能。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.