1
首先
functions.php
用于主题,与插件不同。
在WordPress中应使用主题for presentation only, plugin for functionality.
如果你想,你可以使用主题来实现功能,但你不应该。事实上,主题和插件只是在WordPress请求的特定时刻加载的php文件。(WordPress只加载一个文件,即主题的functions.php和插件的主插件文件,加载您需要的所有其他文件取决于您)。
问题是,在WordPress中,您可以拥有数量不限的插件,但只有一个主题。因此,如果您想更改主题,并且在functions.php
你会失去它:简单地说,这就是为什么更好地将功能放在插件上,而只将主题用于演示的原因。
2
是的,WordPress core中的所有内容都在全局名称空间中,并且大量使用全局变量,但这就是core,没有人强迫您遵循相同的规则,您可以使用名称空间(如果您的PHP版本为5.3以上),也可以不使用任何全局变量:当WordPress加载插件时,它会加载一个PHP文件,所以,你可以做任何你的PHP版本可以做的事情:如果你想,你可以自己编写所有的功能,但这毫无意义:你使用WordPress是因为它有所有的功能,所以当你需要的东西被core覆盖时,试着使用core函数/类,但是可以随意编写WordPress没有的PHP代码。要做到这一点,请随意使用您所知道的所有PHP技术。
3我读了你的问题
保存到数据库的函数就是一个例子
我不知道您正在将什么保存到数据库中以及为什么要保存,但如果您必须保存WordPress实体:post、taxonomy terms、meta、options、users、transient。。。WordPress已经有了从数据库中保存和检索所有这些内容的函数,所以不需要为此编写自定义函数。如果你是说一些custom tables, 是的,如果需要,可以编写一些抽象代码,简化自定义表的创建和操作,但在这种情况下:
在WordPress中使用自定义表有时很有用,但是如果您的应用程序需要太多的自定义表,WordPress可能不是合适的基础,这里有非常好的框架(Symphony, Laravel, Sylex 在编写自定义功能之前,请查看现有的大量WordPress插件,可能有一个插件已经可以满足您在编写自定义WordPress功能时的需要,请记住它不是一个独立的应用程序,它将与其他主题和插件一起在WordPress中使用,因此,为了保持应用程序的健全性,您需要遵循一些共存规则,例如,对特定任务使用正确的挂钩。或者,如果您需要创建一个自定义表,请使用db_delta只为一个功能创建一个插件我认为这不是一个好主意:使用另一个插件需要一些努力,而且不值得只为一个功能这么做。如果你的插件中有一些通用函数,你可以创建一个包含所有这些函数的插件
4
现在讨论从一个插件提取公共特性到另一个插件。是的,这是可行的,而且,我认为,这是完全公平的。有不同的方法:
4.1:只需创建不同的插件并安装它们,就像前面所说的,插件只是php文件,在WordPress引导过程中的特定时间使用require_once
, 所以,实际上,当安装了两个插件时,两个文件在同一个插件中并由您自己加载,或者两个文件由WordPress加载,没有什么区别。当然,你不能说哪个文件先加载,哪个文件后加载,但多亏了WordPress挂钩,你可以知道何时加载了所有插件,并从那一刻起开始做这件事。当然,在使用放置在另一个插件中的功能之前,请确保插件/功能可用。概念验证代码:
// plugin-one.php
namespace PluginOne
class Foo {
function do_something () {
return \'Foo!\';
}
}
// plugin-two.php
namespace PluginTwo
class Bar {
function do_something ( PluginOne\\Foo $foo ) {
echo $foo->do_something();
}
}
add_action(\'plugins_loaded\', function() {
// when WordPress fires \'plugins_loaded\' all plugin files are required
// so we can check if the class PluginOne\\Foo exists and use it
if ( class_exists( \'PluginOne\\Foo\' ) ) {
$bar = new Bar;
$bar->do_something( new PluginOne\\Foo );
}
});
我不知道你是否曾经听说过
Composer. 它是一个依赖关系管理工具。
当您需要编写需要另一个插件的插件时,如果两者都支持Composer,那么只需在composer.json
文件
如何为插件使用Composer并不复杂,但对于这里的答案来说太复杂了。
在最近的几个月里,WordPress社区(在PHP社区,它是很久以前发展起来的)对Composer产生了兴趣,现在您可以找到一些有用的资源。开始看看吧composer.rarst.net, 这是一个共享的资源Rarst, 此站点的一个mods。