我偶然发现了一个问题,即选项字段中存储的数据结构太复杂(至少在我看来)。
现在我有一个集合数组,每个集合中都有另一个子集合(如下所示)。在我看来,这看起来太复杂了,尤其是当一个人想在里面储存一些价值的时候。或多或少,它看起来像:
$collection = get_option(\'collection_setting\');
$collection[1][elements][0][name] = "ChangedExample";
当我们想在集合中引入另一个数组时,情况可能会变得更糟。此外,我认为如果每个数组使用100个条目,那么它可能会变得非常草率。我的问题是如何改进这一点?将其存储到两个不同的选项字段中—一个用于集合,另一个用于子集合,然后以某种方式尝试在代码中连接它?或者这完全可以?
当然,我假设在DB中创建另一个表不是最优雅的方式。
Array
(
[0] => Array
(
[name] => collection_name
[speed] => 200
[id] => collection_name_1
[max_elements_per_page] => 13
[elements] => Array
(
[0] => Array
(
[id] => 1
[url] => http://www.example1.org
[name] => Example1
)
[1] => Array
(
[id] => 2
[url] => http://www.example2.org
[name] => Example2
)
[2] => Array
(
[id] => 3
[url] => http://www.example3.org
[name] => Example4
)
)
)
[1] => Array
(
[name] => collection_name_2
[speed] => 200
[id] => collection_name_2
[max_elements_per_page] => 13
[elements] => Array
(
[0] => Array
(
[id] => 1
[url] => http://www.example1.org
[name] => Example1
)
[1] => Array
(
[id] => 2
[url] => http://www.example2.org
[name] => Example2
)
[2] => Array
(
[id] => 3
[url] => http://www.example3.org
[name] => Example4
)
)
)
)
例如,当我在设置页面上只想编辑集合的第一个元素,然后在保存时,Wordpress会用表单中提交的值覆盖整个选项,从集合中删除第二个元素(此处删除$collection[1])。出路是什么?我正在考虑使用validate\\u options函数(从设置页面接收数据)。我可以检索collection\\u设置,相应地修改它并返回修改后的collection\\u设置。
register_setting(\'collection-settings-group\', \'collection_setting\', \'validate_options\');
但我认为这是太多的工作,我相信有更好的解决办法。