我现在正在开发插件,我有一个问题best practices
和惯例。
What I need ?
我的插件将存储一些预定义的对象、对象列表(或只是数组/键值对),并且可以添加新对象并填充其字段
例如,我的对象将包含以下内容
{
"id": 123,
"url": "http://google.com/",
"enabled" : true,
"name": "hello_world",
"api_key" : "api_key"
}
简单的
JSON
对象
和上Plugin Admin configuration page
可以添加、编辑或删除此类对象。
What is my question ?
存储此类数据的最佳方式是什么。我安装了许多不同的插件,以了解如何存储设置中的自定义数据。我看到了一些选择
使用Settings API
提供人:Wordpress
. 即使UI
由wordpress处理,您可以调用该函数,它将创建适当的输入字段,然后将所有设置保存到选项表中。所有检查和安全都由wordpress处理。但有没有可能创建动态管理页面,您可以在其中添加新项目?
使用旧的Options API
也存储在选项表中,但为开发人员处理所有验证提供了更多的自由。
创建新的数据库表并在其中保存数据。
我想我不会使用第三种方法。
请建议更好的方法,或者您知道插件已经以正确的方式实现了这样的功能。如果有任何帮助,我将不胜感激。
SO网友:dan9vu
在哪里存储插件设置字段?
选项表FTW。它是缓存的,很容易进行CRUD。
设置API还是选项API?
基本上,你可以use Options API 没有设置API,但您不能use Settings API 无选项API。即使您只需要向现有WordPress页面添加一些字段,您仍然需要get_option() 检索视图模板的数据。
但是通过使用现有的WordPress页面,您的数据将变得支离破碎,很难检索/维护,因为它存储在不同的option_name
. 这也可能会让最终用户感到困惑。
当仅使用Options API时,作为插件的作者,您可以随时添加新闻节/字段,但其他人不能。因为视图模板是硬编码的,没有挂钩do_settings_sections() 和do_settings_fields(). 当然,你可以使用do_action() 但事情会复杂得多。
使用选项API可以让开发人员更自由地处理所有不正确的验证。设置API具有sanitize_callback
这也允许开发人员对输入数据做任何他们想做的事情。
那么,为什么不同时使用它们呢?
例如,假设一个设置页面同时使用设置API和选项APIoption_group
是my_app_group
和option_name
是my_app
:
$options = get_option(\'my_app\');
?><div class="wrap">
<h1><?= __(\'Plugin Settings\', \'textdomain\') ?></h1>
<form class="form-table" method="post" action="options.php">
<?php settings_fields(\'my_app_group\') ?>
<table>
<tr>
<td>
<label for="my_app[name]">
<?= __(\'App Name\', \'textdomain\') ?>
</label>
</td>
<td>
<input type="text" name="my_app[name]" value="<?= $options[\'name\'] ?>">
</td>
</tr>
<tr>
<td>
<label for="my_app[app_key]">
<?= __(\'App Key\', \'textdomain\') ?>
</label>
</td>
<td>
<input type="text" name="my_app[app_key]" value="<?= $options[\'app_key\'] ?>">
</td>
</tr>
<?php do_settings_fields(\'my_app_group\', \'default\') ?>
</table>
<?php do_settings_sections(\'my_app_group\') ?>
<?php submit_button() ?>
</form>
</div><?php
现在,所有数据都存储在选项表中
my_app
选项名称,这样很容易检索/维护。其他开发人员也可以向插件添加新的节/字段。