如何独立复刻并维护WooCommerce Block?
解决WooCommerce「Products By Category」区块数据库查询量过高问题
问题背景
我们在网站首页部署了多个WooCommerce官方提供的*「Products By Category」* Gutenberg区块实例,通过Query Monitor插件检测发现数据库查询量异常偏高(约550次);当移除部分或全部该区块实例后,查询量直接降至约80次,确认该区块是查询量过高的核心原因。
原因分析
查看该区块的核心实现代码后发现,它仅缓存需要解析的产品ID,而产品的详细数据每次渲染时都要从数据库重新查询获取。我们尝试修改其render方法,改为直接缓存最终生成的HTML输出,修改后数据库查询量得到了大幅降低,效果符合预期。
当前困境
我们希望通过编写自定义插件或主题的方式来修改这个行为,但尚未找到可行方案:WC Blocks的集成度极高且存在内部依赖,此前曾有将区块单独打包为独立插件的方法,但该方案现已被移除,不再被官方支持。
当前实现方式(需规避反射机制)
目前我们通过以下方式实现了HTML缓存优化,但因使用了反射机制,希望能找到替代方案:
- 通过JS gutenberg过滤器获取当前声明的
render_callback,存储对应的对象引用。 - 使用PHP
ReflectionClass修改并访问对象内部属性,在自定义渲染函数中调用原逻辑。 - 再次通过JS gutenberg过滤器将区块的
render_callback替换为我们的自定义渲染函数。
内容的提问来源于stack exchange,提问作者rnayabed
相关产品推荐
相关产品推荐

