哪里存储由插件/主题创建的PHP文件


12

在某些情况下,插件或主题需要在以后可以包含它的某个地方创建一个php文件。例如验证码插件,或诸如twig / smarty之类的模板系统(在我的情况下,这是用于小部件集合的简单模板引擎)。

该文件应该在哪里创建?

我唯一能想到的地方是wp-content/uploads/,但这听起来不对:)

那么,有没有安全的地方可以创建文件,而不用担心它们会在WordPress /插件/主题更新中被删除?

一种解决方案是在themes / plugins目录中创建一个子主题/目录。

Answers:



5

您不能依赖插件或主题目录中的写访问权限,因此wp_upload_dir()是唯一可能的目录。
但是我真的怀疑是否需要将信息存储在新文件中。如果模板是由用户创建的,则将其存储在选项中,以使用常规插件功能解析内容(例如,将占位符替换为strtr())。


是的,这对替换变量很有用(我现在有类似的东西)。但是,如果您还希望允许用户使用条件标签(例如IF)或循环对象,则需要编写php代码...
onetrickpony

5

在使用Wordpress插件时,我偶然发现了您的问题。我还首先想到了创建临时文件以缓存我的插件正在创建的某些数据。但是,再想一想,这种方法对我来说似乎很奇怪,因为如果您想使用服务器集群来扩展临时数据,则不希望在一台服务器上散布临时数据。

因此,我再次搜索,似乎有效的解决方案是Wordpress Transients API,API允许您使用到期日期将数据存储在数据库中。当然,您的问题可能仍然需要本地缓存的文件,例如,如果它们对于数据库而言太大,但是至少我建议也考虑一下此选项:-)


3

我只能想到一个很好的理由,一个插件将需要创建一个文件。一种是备份用户可以导出并下载以移动到新站点的复杂选项。另一个是站点地图插件。

如果您的插件包含用户可以自定义的模板文件,则应为用户提供将自定义文件移动到当前主题目录的选项,以便在您的插件更新时不会被覆盖。您可以尝试先从主题目录加载文件,然后再回到插件目录。

Gravity Forms将表单上载的文件存储在上载的其自己的文件夹中。W3 Total Cache使用wp-content,登录重定向使用上述方法。


1

如果必须创建文件(例如CAPTCHA插件的临时文件),则一定要使用\wp-content\uploads\(或自定义目录,例如\wp-content\plugin-slug-files\)。

大多数其他自定义代码应确实存储在数据库中。


1
eval()它?没办法...
onetrickpony

您需要eval()什么?
Chip Bennett

想想聪明的人。假设您创建了一个小部件,并且希望用户能够以他们想要的方式自定义输出。因此,您可以在小部件选项中添加一个textarea,用户可以在其中为该小部件编写自己的类似smarty的模板。该模板需要进行编译,而最好的方法是生成一个PHP文件并将其包含在小部件中。
onetrickpony

这听起来像是小部件/小部件选项的预期用途的相当大的延伸……
Chip Bennett

1
当然不是。但是恕我直言,如果用户在创建自定义小部件时需要很大的灵活性,则用户应编写自定义插件,或将自定义小部件代码添加到其Theme的functions.php文件中。为什么要有一个可以创建窗口小部件的插件,使用户可以创建其他窗口小部件?
Chip Bennett

1

我总是建议与PSR-0兼容的自动加载器和一个可以正常使用的库文件夹。

某些WP用户可能会开枪射击您,但也许您并不专注于这些用户,因此这可以作为一种选择。特别是当您获得越来越多的特定于供应商的库时。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.