这个问题是关于在类中使用动态方法而不是静态方法的著名辩论。根据我的研究,公认的想法是尽可能限制静态方法的使用。
如果需要存储某些内容,则需要是静态成员变量,这是有问题的。仅仅使用动态方法,它们比静态方法有很多优点,静态方法只有很少的优点和许多已知的缺点。但正如你所说,这是一场辩论,如果这是正确的,那么它在这里就没有立足之地。堆栈交换是一种问答;作为一个站点,而不是一个讨论论坛,您需要能够将答案标记为规范正确
1-如果我在侧栏中创建一个新的类实例,我担心构造函数中的一个“shortcode”和两个“init”挂钩,我担心它们是否会影响性能。
如果您的init例程非常昂贵,以至于重复执行两次会影响性能,那么您的init例程就有严重问题。您是否发出远程请求或获取数千篇帖子(或通过带有post元参数的WP\\u查询获取少量帖子?)
即便如此,只要测试一下就可以了。实现它然后比较页面加载时间和查询计数并不困难,可以使用查询监视器之类的插件来实现
2-而不是一次性获取post meta。现在我用同样的值取了两次。一个在短代码中,另一个在侧栏中。
这不是问题
忽略通过键和post ID获取post元值是一个非常快速的查询,所有这些都缓存在内存中。如果您有一个对象缓存,它甚至会在请求之间持久化。
事实上,WP通过在同一个查询中获取所有post meta,预先获取post meta以节省时间。
讽刺的是,那些试图限制WP_Query
获取,以便他们只能查询他们需要的是那些由于获取内容的大量小查询而速度较慢的对象
所以不,post meta只提取一次并缓存。要获取它两次,需要编写原始SQL