有什么方法可以划分wp_Options吗?

时间:2017-01-22 作者:Steve

我想让我的functions.php 文件使用update_option() 保存一些本地数据,但wp_options 表似乎对我网站上的每一个软件都是全局的,所以我必须给我的数据取一个长名称,以确保它不会与其他人为其数据选择的名称冲突。有办法解决这个问题吗?

谢谢

4 个回复
SO网友:Tom J Nowell

不,我强烈建议不要更改WordPress选项表模式,您会遇到许多问题,例如:

不再有可靠的更新过程,您将无法使用get_options 如果您能够成功地使用该套件,还可以使用它附带的一套功能和对象缓存及优化get_options 如果你开始的话,你会回来的

我的建议?$prefix.\'_option_name\'

SO网友:Fayaz

有办法解决这个问题吗?

Short answer: 是的,技术上可能,但是not recommended. 阅读下面的详细答案:

Using Custom Database table:

你当然可以implement custom Database table 来处理您的数据。但是,对于简单的操作,此过程是not recommended. 原因如下:

保养变得很困难。例如,如果您正在使用的另外十个插件决定拥有自己的插件,该怎么办table? 您的数据库将充满tables 很可能没有很好的定义。

您必须密切关注WordPress&;的未来更新;并亲自确保自定义数据库功能保持兼容。

选项API经过多年的经验优化;更新时,要获得与自定义数据库相同级别的优化并不容易。

所以using the core Options API is your best option (除非您的数据与帖子或用户相关。在这种情况下,您应该分别使用帖子元或用户元)。

To avoid option name conflict if the data is site specific:

<使用网站的domain name 作为选项名称前缀。例如,如果您的站点example.com, 使用example_com_option_name (更换option_name 使用合适的名称)作为选项名称。其他人不会将您的域名用作前缀。

在这种情况下,最好不要在主题中编写数据函数functions.php. 相反,创建一个自定义插件来处理这些特定于站点的数据Options API. 这样,即使您更改了主题,特定于站点的选项也将保持不变。检查this article on why you shouldn\'t use functions.php for these types of cases.

To avoid option name conflict if the data is theme specific:

如果所讨论的数据是特定于主题的,那么如果您在其他站点中使用该主题,这些站点将具有类似的数据;或者,如果您更改了主题,您可能需要也可能不需要这些数据?在这种情况下:

使用主题名称作为选项名称前缀。例如,如果主题名称为steve, 您可以使用steve_option_name. 如果您认为主题名称可能不唯一,请在选项名称中组合您的主域名:example_com_steve_option_name.

在这种情况下,实施Options API 主题中的函数functions.php 文件

To avoid option name conflict if the data is neither theme specific nor site specific:

如果您有多个站点&;他们使用不同的主题,所有这些网站都需要相同的选项数据?

在这种情况下,实施Options API 函数,并将插件名称用作选项名称前缀。如上所述,将主域名与插件名称相结合,以避免所有可能的命名冲突

[Bonus] Avoid adding multiple options:

在大多数情况下,实际上不需要创建多个选项。除非大多数选项专门用于站点的不同部分,否则通常最好只创建一个选项,并将所有特定于站点的自定义选项放在一个数组中。This document describes 你怎么能做到这一点。如WP文件所述:

作为单独的选项访问数据可能会导致许多单独的数据库事务,通常,数据库事务是昂贵的操作(就时间和服务器资源而言)。存储或检索选项数组时,它发生在单个事务中,这非常理想。

所以,若只使用一个选项就可以了,那个么为什么还要创建自定义数据库表呢?只有一个选项名称,冲突的可能性更低(在遵循上述建议后)(&;即使发生冲突,解决方案也非常简单,因为您只需更改数据库中的一个选项。

SO网友:Rick Hellewell

您可以为您的选项创建一个新表。

在我保存选项的插件上,我只是用插件名称的首字母来命名选项,以确保选项“name”不是一个常见的词。因此,如果我的插件被称为“我真正整洁的插件”,那么选项名称将是“mrnp\\u options”。

如果您担心与另一个类似的选项发生冲突,那么您的插件激活代码可能会有几个可选的选项名称。但是,您必须将该选项名称存储在某个地方。所以,我认为这不是一个好的选择。

我还将插件的“缩写”作为插件中所有函数的一部分,这样我的函数就不会与其他函数发生冲突。

SO网友:Kenneth Odle

我非常同意TomJ Newell和Rick Hellewell的观点,因为这是WordPress的最佳实践。

page 如果这是您的新领域,WordPress Codex将帮助您创建数据库表。