如果您有一个选项页(应该在一个表单中),那么所有数据都将从该表单发送,无论选项是否已更改。
接收验证的数组是从表单(您的部分)接收的数据。如果数据为“空”,则是因为数据未发送。通常这是因为用户故意不发送任何数据(即清空文本区域)。
如果您试图在一个数组中存储来自不同页面的选项,那么您需要确定空白数据是故意的,还是因为它不在提交的页面上而没有发送。
仅处理预期数据实际上您需要确定的是您期望接收的数据是什么?在您的情况下,这将取决于您提交数据的页面:
//The \'ids\' of data that is expected on the respective page
$page1_options = array(\'textarea_on_page_1\',\'checkbox_1\',\'another_textarea_1\');
$page2_options = array(\'someinput_2\',\'another_textarea\');
//An array of arrays of option names the plugin accepts:
$expected =array(\'page1\'=>$page1_options,\'page2\'=>$page2_options);
然后,如果从第1页提交数据,我们希望收到的数据是
$expected[\'page1\']
.
所以我们只validate 这些选项和filter everything else out 这样我们就可以$valid_input
其中包含all and only 列出的键$page1_options
. 然后,我们将当前选项与新的有效输入合并,以获得新的设置数组:
$option_array = get_option(\'XX_theme_settings\');
$option_array = array_merge($option_array,$valid_input);
//Return this $option_array to be saved to database
确定页面要确定要发送的页面,请在每个页面上添加另一个“选项”,该选项实际上是隐藏输入,其值设置为上面提到的页面ID(例如。
\'page1\'
). 这将与选项一起发送。
更好的方法是将每个页面的设置保存为数据库中单独的一行(因此您有X个页面的X(数组)选项),这是一种更简单的方法。