我有一个关于块编辑器中实体的理论问题,因为我几乎找不到关于实体的文档。
我正在为块编辑器构建一个插件,该插件依赖于选项表中的插件设置。有许多方法可以在块编辑器中检索这些设置。最简单的方法是添加\'show_in_rest\'
注册设置并使用时useEntityProp( \'root\', \'site\', \'my-custom-setting\' )
. 只要用户是管理员,这就非常有效。由于none管理员无权访问WordPress中的设置,因此在使用useEntityProp
用户不是管理员。
我想到了许多备选方案:创建全局变量、创建自定义REST端点和直接获取,等等。所有这些要么都是糟糕的编码实践(IMO),要么都有显著的性能影响。
然后我偶然发现了实体addEntities
行动将自定义REST端点与新实体相结合,通过addEntities
, 我可以在块编辑器中检索几乎任何数据,对性能的影响极小。您可以使用getEntityRecord
.
所以我的问题是,这是addEntities
和getEntityRecord
还是我在做一些粗鲁的事?以前有没有其他人使用过这种方法?因为这种方法确实为在块编辑器中高效检索外部数据打开了一扇大门。
SO网友:Tom J Nowell
我想到了很多选择:创建全局变量,
这意味着对PHP的工作方式存在根本性的误解。全局变量不会在请求之间持久化,除非存储在文件或数据库中,否则PHP端不会持久化,因为WP是在每个请求上从头开始加载的。没有像节点web应用程序那样的持久化进程。
创建自定义REST端点并直接获取,等等。
这是什么getEntityRecord
在幕后,它只是一个从与数据存储集成中获益的助手
所以我的问题是,这是对addenties和getEntityRecord的适当使用,还是我做了一些粗俗的事情?以前有没有其他人使用过这种方法?因为这种方法确实为在块编辑器中高效检索外部数据打开了一扇大门。
getEntityRecord
? 当然addEntities
? 没有那么多。这是因为设置仅对管理员可用,这是敏感数据。通过将它们通过自定义端点进行路由,可以进行不安全的设置操作。
如果我们要了解这一点的原因,很有可能不需要你所问的前提。
块不需要知道选项的值,而在呈现时需要知道选项值的块应该在PHP中呈现。毕竟,如果你保存了内容,那么选项就会改变,如果你使用JS保存内容,WP就无法返回并自动更新所有帖子。