在WordPress插件中使用前置控制器,有什么建议吗?

时间:2013-10-12 作者:Nicola Peluchetti

我的想法是在插件中使用前端控制器。有人已经这么做了吗?控制员的职责应为

初始化路由器类我在考虑遵循标准martin fowler example 但如果有人已经尝试过,我可能想向他学习。

1 个回复
SO网友:fuxia

大多数复杂的插件都是以这样或那样的形式实现的。不幸的是,许多插件都是从god类开始的,没有使用干净的OOP方法。WooCommerce就是一个很受欢迎的例子。

插件不能提供真正的前端控制器,因为它们是在WordPress设置了大部分环境后加载的。所有插件几乎都是平等的:如果两个插件试图处理同一个请求,那么第一个插件可能会获胜。你永远不知道哪些插件可能与你的竞争。

有关一个非常基本的示例,请参见我的插件T5 Public Preview (来自this answer).

前控制器是T5_Public_Preview 它根据请求(管理或前端)加载所需的类并创建对象T5_Post_Meta, T5_Public_Preview_LanguageT5_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.

哦,将主插件文件与类声明分开。

结束

相关推荐

Skip foreach loop

这里有一个小的编码问题。代码:if ($categories) { foreach ($categories as $tag) { $tag_link = get_category_link($tag->term_id); //new line if (isset($instance[\'new-line\'])) { $html .= \"