在模板中使用插件函数/方法

时间:2017-08-05 作者:Ric

我使用各种类创建了一个插件。我希望能够从自定义主题的页面模板中访问几个不同类上的方法。我目前使用的方法是生成静态方法,但我想知道这是否是最好的方法?

例如,可以是一个类,该类具有一个检查用户是否已登录及其用户角色的方法。让我们给全班打电话Plugin_Access 以及方法has_access();

现在,假设我需要使用if()语句自定义页眉、页面模板和页脚中的内容,基于has_access(). 要做到这一点,我会使用if( Plugin_Access::has_access() ). 对我来说,我觉得这不是最干净的解决方案。我基本上调用了相同的方法,并得到了相同的结果3次。如果它在方法中调用了数据库,那么这将是3次调用,而不是1次。

我想到的一个解决办法是让班级singleton 并将函数的结果存储在类中的变量中。然后该方法将检查该变量null, 然后完成方法的其余部分,否则只返回存储的变量。

我觉得我肯定错过了什么。提前感谢您的建议。

2 个回复
最合适的回答,由SO网友:Mark Kaplun 整理而成

过早优化是万恶之源(好吧,浪费编程时间)。为什么要关心函数被调用了多少次?内存或CPU并不是因为过度使用而变得“更弱”。

更重要的是,您生成的代码将尽可能多地进行自文档化,而不是进行微优化,如果这意味着要进行三次调用而不是一次调用,那么就这样吧。

如果由于函数执行一些重/慢计算而导致实际性能问题,那么答案是“内部”缓存重/慢部分。

旁注1。使用Wordpress API,除非你已经研究并发现没有其他方法,否则不要重新发明轮子,因为Wordpress会为你做很多缓存,而你的3 DB访问实际上在任何情况下都是唯一的。

旁注2。单件很少是面向对象的,如果您首先避免类并使用名称空间,那么您将更容易阅读和操作代码,尤其是在wordpress的上下文中。

SO网友:ClemC

正如您所理解的,这取决于您的方法将做什么。

如果该方法必须检查DB以定义要返回的布尔值,如检查选项,则在水合作用时或在您第一次调用该方法时,将其值存储在属性中。注意,WP缓存查询结果,如get_option(), get_post_meta(), 等所以在这种情况下,我不认为有什么好处
否则,在模板中以这种方式调用它,而不将其存储在属性中。

如果该方法必须返回DB查询结果,那么可以将结果存储为domain model 对象,根据定义not 做一个单身汉
在WP中,WP_Post 是域模型类的一个示例。正如你所见,$post->title 返回查询结果
hydrate 初始化时的域模型对象。

结束

相关推荐

如何在所有插件中搜索Composer的供应商/autoload.php?

我已经将一些项目(主题和插件)设置为composer项目。这些项目可以是彼此的开发依赖项。现在我正在研究一个主题,它需要vendor/autoload.php 文件然而,当我将该主题引入另一个项目(如插件)时,我仍然需要访问autoload.php. 问题是autoload.php 文件现在位于插件的目录结构中,而不是主题。define(\'FL_CHILD_THEME_DIR\', get_stylesheet_directory()); define(\'FL_CHILD_THEME_URL\