如何使用OPTIONS_API在单个数组中存储累积的多个选项值

时间:2012-12-22 作者:Rob Myrick

我创建了一个选项数组,其中存储了一系列选项及其值。问题是我想累积这些选项并将它们存储在选项数据库中。这意味着我可以向数据库中添加多条记录,而不是只更新一个选项。

例如,我需要存储推荐信,允许用户为几个不同的人保留姓名/推荐信(即Brad的推荐信、Carrie的推荐信等),因此该选项需要能够添加多个记录。

希望这是足够的描述。以下是我当前的选项代码:

add_option( \'testimonials_settings\', $testimonials_options );   

  $testimonials_options = array (
\'testimonials_active\' => \'0\',
\'testimonials_name\' => \'\',
\'testimonials_website_name\' => \'\',
\'testimonials_website_url\' => \'\',
\'testimonials_quote\' => \'\'
);

if(isset($_POST[\'testimonials_update_options\'])) {
   $options = get_option(\'testimonials_settings\'); 
   $options[\'testimonials_active\'] = $_POST[\'testimonials_active\'];
   $options[\'testimonials_name\'] = $_POST[\'testimonials_name\'];
   $options[\'testimonials_website_name\'] = $_POST[\'testimonials_website_name\'];
   $options[\'testimonials_website_url\'] = $_POST[\'testimonials_website_url\'];
   $options[\'testimonials_quote\'] = $_POST[\'testimonials_quote\'];
update_option(\'testimonials_settings\', $options);
}

3 个回复
SO网友:Chip Bennett

问题是我想累积这些选项并将它们存储在选项数据库中。这意味着我可以向数据库中添加多条记录,而不是只更新一个选项。

例如,我需要存储推荐信,允许用户为几个不同的人保留姓名/推荐信(即Brad的推荐信、Carrie的推荐信等),因此该选项需要能够添加多个记录。

你所描述的不是option, 而是一个Custom Post Type.

因此,不要试图将自定义内容强制放入圆形孔中。相反,请注册testimonial 自定义帖子类型。

SO网友:s_ha_dum

最简单的解决方案是更改设置键名称。

update_option(\'testimonials_settings_brad\', $options);
update_option(\'testimonials_settings_carrie\', $options);
要检索它们,您需要知道各个键的名称或编写自己的SQL。上次我检查过你不能用通配符testimonials_settings_*. 如果您试图用可能是可变的键名(例如基于人名的键名)存储不同的键,这将是一个问题。您可以使用键名存储另一个选项,并使用该选项构造其他键名。

$names = array(\'brad\',\'carrie\');
update_option(\'testimonial_key_names\',$names);
然后当你需要你的证明

$names = get_option(\'testimonial_key_names\',array());
$testinomials = array();
foreach ($names as $n) {
    $testimonials[] = get_option(\'testimonials_settings_\'.$n);
}
当然,大量的推荐意味着大量的查询,所以效率不高。

您只需以不同的方式构建阵列并存储一个值。

$options[\'brad\'][\'testimonials_active\'] = $_POST[\'testimonials_active\'];
$options[\'brad\'][\'testimonials_name\'] = $_POST[\'testimonials_name\'];
// and so on
$options[\'carrie\'][\'testimonials_active\'] = $_POST[\'testimonials_active\'];
$options[\'carrie\'][\'testimonials_name\'] = $_POST[\'testimonials_name\'];
// and so on
// then 
update_option(\'testimonials_settings\', $options);
这解决了前面提到的几个问题,但您可以在一个位置存储大量信息,但这是一个longtext 这个列相当大——我相信大约4GB。如果它变得那么大,我预计会出现性能问题--想想内存错误。

这些是我可以想到的使用选项API的可能性。希望我没有误读你的问题。

我想知道如果你有一个Custom Post Type 为了这个。你有一个足够复杂的项目,我倾向于认为这是最好的选择。你可以register it 这样一来,如果你不想这样做,就没有前端帖子列表。您甚至可以在没有后端接口的情况下注册它。有关参数,请参见链接。

SO网友:brasofilo

看起来您正在寻找可重复的选项。我只有可重复字段的示例。希望这将足以让你得到这个想法,并建立你的选择
这应该是一个为选项转换元框/自定义字段逻辑并替换的问题get/update -> *_post_meta 通过*_option.

结束