大多数复杂的插件都是以这样或那样的形式实现的。不幸的是,许多插件都是从god类开始的,没有使用干净的OOP方法。WooCommerce就是一个很受欢迎的例子。
插件不能提供真正的前端控制器,因为它们是在WordPress设置了大部分环境后加载的。所有插件几乎都是平等的:如果两个插件试图处理同一个请求,那么第一个插件可能会获胜。你永远不知道哪些插件可能与你的竞争。
有关一个非常基本的示例,请参见我的插件T5 Public Preview (来自this answer).
前控制器是T5_Public_Preview 它根据请求(管理或前端)加载所需的类并创建对象共有三种型号:T5_Post_Meta
, T5_Public_Preview_Language
和T5_Endpoint
.两个视图处理输出:T5_Publish_Box_View
和T5_Render_Endpoint
. 后者实际上并不显示某些内容,但在某些情况下,它会更改WordPress以显示不同的输出
OOP是关于
communication between objects and components. 所以真正的问题不是模式,而是
communication. WordPress的核心不是面向对象的,所有的东西都集中在一起;该准则过去和现在都在有机地发展。由于没有清晰的内部结构,WP解决了通信问题
actions and filters (hooks): 预定义事件,允许任何插件更改或替换输出和应用程序逻辑。
你的插件必须在这个给定的结构中运行。有一些有趣的沟通问题需要解决:
可以临时更改或停用插件。避免anonymous objects 或提供配置对象但不提供too many custom hooks too early.尝试控制order of execution 当多个插件作用于同一挂钩时确保依赖于特定订单的回调chained.这些是插件前端控制器最重要的职责。您可以将一些委派给后续控制器,但前端控制器必须知道它们是如何工作的。在我看来,WP插件中的前端控制器必须知道太多太多。但我还在学习。:)
哦,将主插件文件与类声明分开。