我开发了一个插件,它有不少设置。到目前为止,它们的数量是固定的,所以我将它们存储在Wordpress选项中。现在我考虑让用户定义(任意数量的)样式,即选项集。由于这些仍然是相当普遍的选择,因此Codex 非常适合。
将所有这些内容存储在一个选项中显然不是一个好主意,但创建一个完整的数据库表也不太合适。你有什么建议?
请注意,我发布了一个想法作为答案,以便将其与问题分开。将问题标记为CW,但这似乎在这里被禁用了?
我开发了一个插件,它有不少设置。到目前为止,它们的数量是固定的,所以我将它们存储在Wordpress选项中。现在我考虑让用户定义(任意数量的)样式,即选项集。由于这些仍然是相当普遍的选择,因此Codex 非常适合。
将所有这些内容存储在一个选项中显然不是一个好主意,但创建一个完整的数据库表也不太合适。你有什么建议?
请注意,我发布了一个想法作为答案,以便将其与问题分开。将问题标记为CW,但这似乎在这里被禁用了?
存储数据的层次结构大致如下所示(从功能较少/复杂到更多):
由于您的描述选项太有限,数据库太复杂,我将查看设置。为了最好地回答你的问题,我建议不要回答;)
或者更准确地说: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类,例如样式。它的工作原理完全相同,但您可以将样式放在其他地方。
通常,您只需要读写设置,因此在界面中只需要两个函数。
然后,您可以随着时间的推移或在继续扩展选项值/样式数量的同时更改存储方法,而不影响插件代码。
每个样式添加一个Wordpress选项。由于每种样式都有固定的大小,并在许多地方使用,因此满足了法典中对该技术的基本要求。选项应命名为$pluginname_style_$name
.
检索一种具有已知名称的样式是非常自然、惯用的,而且(希望)很快。由于命名方案,检索/删除所有样式很容易。
假设用户不创建太多(即最多十种,而不是数百种)样式,则选项表不应过于臃肿。
您可以在数据集时创建一个数组,并将其保存到每个新样式的一个选项中,例如:
$new[\'size\'] = ...
$new[\'fixed\'] = ...
$new[\'blabla\'] = ...
update_option(\'new_option_name\',$new);
希望你能明白。这个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(\'Post Products Settings\', \'Post Products Settings\', \'administrator\', \'pp_settings\', \'pp_settings_page\'); 无论如何,我可以得到在第一个参数中指定的内容,以便在我的页眉中使用?我知道我可以硬编码,但只是好奇