如何存储中等数量的期权?

时间:2011-02-05 作者:Raphael

我开发了一个插件,它有不少设置。到目前为止,它们的数量是固定的,所以我将它们存储在Wordpress选项中。现在我考虑让用户定义(任意数量的)样式,即选项集。由于这些仍然是相当普遍的选择,因此Codex 非常适合。

将所有这些内容存储在一个选项中显然不是一个好主意,但创建一个完整的数据库表也不太合适。你有什么建议?

请注意,我发布了一个想法作为答案,以便将其与问题分开。将问题标记为CW,但这似乎在这里被禁用了?

5 个回复
最合适的回答,由SO网友:Rarst 整理而成

存储数据的层次结构大致如下所示(从功能较少/复杂到更多):

  1. Transients API
  2. Options API
  3. Settings API
  4. Database Tables
  5. 自定义文件缓存
由于您的描述选项太有限,数据库太复杂,我将查看设置。

SO网友:hakre

为了最好地回答你的问题,我建议不要回答;)

或者更准确地说:Encapsulate what varies

由于您现在不知道如何/在何处存储设置,请创建为您的存储提供接口的对象,并将整个存储隐藏在插件的其余部分之外。

一些示例代码:

interface myStore {
    const PREFIX = \'myStore\';
    public function get($name);
    public function set($name, $value);
}
/**
 * option storage: all in one wordpress option
 */
class myStore_Options implements myStore {
    private $data = null;
    private $optionName = \'\';
    private init() {
        if (null===$this->data) {
            $this->optionName = myStore::PREFIX.\'_options\';
            $this->data = get_option($this->optionName, array());
        }
    }
    public function get($name) {
        if (array_key_exists($this->data, $name)
            return $this->data[$name];
        return \'\';
    }
    public function set($name, $value) {
        $this->data[$name] = $value;
        update_option($this->optionName, $this->data);
    }
}
$store = new MyStore_Options();
代码中的任何地方都可以使用$store->get(\'settingName\') 无论您实施哪个存储层。

您现在可以创建另一个实现myStore接口的myStore\\u xxxx类,例如样式。它的工作原理完全相同,但您可以将样式放在其他地方。

通常,您只需要读写设置,因此在界面中只需要两个函数。

然后,您可以随着时间的推移或在继续扩展选项值/样式数量的同时更改存储方法,而不影响插件代码。

SO网友:Raphael

每个样式添加一个Wordpress选项。由于每种样式都有固定的大小,并在许多地方使用,因此满足了法典中对该技术的基本要求。选项应命名为$pluginname_style_$name.

检索一种具有已知名称的样式是非常自然、惯用的,而且(希望)很快。由于命名方案,检索/删除所有样式很容易。

假设用户不创建太多(即最多十种,而不是数百种)样式,则选项表不应过于臃肿。

SO网友:Bainternet

您可以在数据集时创建一个数组,并将其保存到每个新样式的一个选项中,例如:

$new[\'size\'] = ...
$new[\'fixed\'] = ...
$new[\'blabla\'] = ...

update_option(\'new_option_name\',$new);
希望你能明白。

SO网友:kaiser

这个Settings API 关心创建性能阵列并将选项存储在一个DB字段中。只要定义在其他页面上使用同一字段(“设置部分”afaik),就可以从不同页面添加到此字段。也许您应该为不同的部分(即样式)使用不同的部分,以便将其存储在全局可用的$var中,如

电话:

$my_plugin_styles = get_option(\'option_name\');

<span style="<?php echo $my_plugin_styles->background; ?>">
或者(甚至更好):

<span class="<?php echo $my_plugin_styles->background_class; ?>">

结束

相关推荐

如何获取我在Add_Options_Page中为我的页眉指定的标题

我有add_options_page(\'Post Products Settings\', \'Post Products Settings\', \'administrator\', \'pp_settings\', \'pp_settings_page\'); 无论如何,我可以得到在第一个参数中指定的内容,以便在我的页眉中使用?我知道我可以硬编码,但只是好奇