设置API-具有多个子页面的菜单中的复选框验证

时间:2013-08-08 作者:BioXD

我正在使用设置API构建一个主题。我有一个包含多个子页面的顶级菜单,除了复选框之外,其他一切都很正常。我正在将选项保存到单个选项数组中。

这是我的卫生功能:

public function sanitize($input) {

    $options = get_option(THEMEOPTIONS);
    $fields = gosu_adminpanel_fields();

    foreach ($fields as $key => $field) {
        if($field[\'callback\'] == \'gosu_controls_checkbox\') { // if the field is a checkbox

            if(!isset($input[$key])) {
                $options[$key] = "off";
            }

        }
    }

    foreach($input as $key => $field) {
        $options[$key] = $value;
    }

    return $options;

}
$字段是一个数组,包含所有字段数据,如类型、默认值等。

由于取消选中该选项时,不会在POST数组中发送复选框字段,因此需要进行额外的验证。

如果我使用的是单个菜单页,这将很好,但由于我使用的是多个菜单页,当我提交一个没有复选框的页面时,它会将值设置为“off”,认为用户取消选中了该框,因为该字段不存在。

我希望只有在提交了该复选框所在的页面时,才能验证该复选框,或者有其他方法可以在复选框值设置不正确的情况下进行验证。

我只想对所有主题的设置使用一个选项数组;不可能为每个页面使用变量。

我正在考虑更改“是/否”下拉列表的复选框,但这并不是一个优雅的解决方案。

1 个回复
SO网友:BioXD

因为我没有得到任何答案,所以我最后使用了一个变通方法,以防有人遇到同样的问题。

我用键作为值为每个复选框添加了一个隐藏字段,然后在清理功能中,我只需检查隐藏字段而不是复选框,这样我就可以判断复选框是否属于某个页面。以下是最终代码:

public function merge_options($input) {

    $options = get_option(THEMEOPTIONS);
    $fields = gosu_adminpanel_fields();

    if(!empty($_POST)):
    foreach($_POST[\'checkbox\'] as $key) {
        if($fields[$key][\'callback\'] == \'gosu_controls_checkbox\') {

            if(!isset($input[$key])) {
                $options[$key] = "off";
            }

        }
    }
    endif;

    foreach($input as $key => $value) {
        $options[$key] = $value;
    }

    return $options;

}
您需要检查POST数组,因为作为回调函数的参数发送的数组会清除所有未注册的变量,并且确实没有必要将字段添加为设置(可能有点不安全,但它可以工作)。

结束

相关推荐

使用jQuery删除存储在wp_Options中的数据

我想知道是否有人能就我的问题给我进一步的建议。我的插件的一部分存储了用于调试的日志文件。我已经使用jquery和wp\\u localise\\u脚本在我的管理页面的(div#log)中成功地显示了它们。我有一个删除这些日志的按钮,但我不确定如何处理。我觉得ajax可能会在这里派上用场,但不确定从哪里开始。以下是我的代码的相关部分:admin_enqueue_scripts (action) $args = array(get_option(\'wow_tweets_log\'));//log files