使用Get_Option()作为复选框字段

时间:2018-11-07 作者:Alt C

我正在尝试将检查字段保存到数据库中。它起作用了。但在get\\u选项中,我传递的是默认值。但即使禁用复选框(值0),字段也会显示为勾选。。这是我的密码

<?php     
 $fields_default = array(
                0 => array(
                    \'id\'             => 0,
                    \'checkbox_check\' => \'1\',
                ),
                1 => array(
                    \'id\'             => 1,
                    \'checkbox_check\' => \'0\',
                ));

            $orderdescider = get_option(\'fields_new\', $fields_default);

            foreach ($orderdescider as $checkfieldstatus) {
               if (isset($checkfieldstatus[\'id\'])) {$id = $checkfieldstatus[\'id\'];}
                if (isset($checkfieldstatus[\'checkbox_check\'])) {$checkbox_check = $checkfieldstatus[\'checkbox_check\'];} else { $checkbox_check = \'0\';}
                ?>

                <li class="sortable-item flexit">
                <div class="form-check">
                <input type="checkbox" class="form-check-input" id="exampleCheck1" name="orderdescider[<?php echo $id; ?>][checkbox_check]" value="1"<?php checked(isset($orderdescider[$id][\'checkbox_check\']));?> />
                 </div></li>
                <?php

            }
请帮忙谢谢

2 个回复
最合适的回答,由SO网友:Sally CJ 整理而成

这可能并不能完全回答问题,但让我们看看代码的问题:

如果要以与默认值相同的格式保存数据($fields_default), 然后:

开始您的foreach 像这样:foreach ( $orderdescider as $i => $item ).

然后在里面foreach, $id$checkbox 应始终这样设置和定义:

$id = isset( $item[\'id\'] ) ? $item[\'id\'] : \'\';
$checkbox_check = isset( $item[\'checkbox_check\'] ) ? $item[\'checkbox_check\'] : \'\';
并在字段中使用适当的值name

<input type="hidden" name="orderdescider[<?php echo $i; ?>][id]"
  value="<?php echo $id; ?>">

<input type="checkbox" name="orderdescider[<?php echo $i; ?>][checkbox_check]"
  value="1" ...>
对于checkbox 字段,您可以在写入标记时使用此格式:

<input type="checkbox" value="{value}"<?php // wrapped for clarity
  checked( \'{value}\', \'{current/saved value}\' ) ?> ...>
所以在你的情况下,它看起来是这样的:

<input type="checkbox" name="orderdescider[<?php echo $i; ?>][checkbox_check]"
  value="1"<?php checked( \'1\', $checkbox_check ) ?> ...>
在哪里1{value}, 和$checkbox_check{current/saved value}.

(请参见reference 有关使用checked() 函数。)

希望这会有所帮助,以下是全部内容foreach 我用于测试的代码:(我省略了字段的id, 但请确保使用唯一值)

foreach ($orderdescider as $i => $item) {
    $id = isset( $item[\'id\'] ) ? $item[\'id\'] : \'\';
    $checkbox_check = isset( $item[\'checkbox_check\'] ) ? $item[\'checkbox_check\'] : \'\';
    ?>
    <li class="sortable-item flexit">
        <div class="form-check">
            <input type="hidden" name="orderdescider[<?php echo $i; ?>][id]"
              value="<?php echo $id; ?>">
            <input type="checkbox" name="orderdescider[<?php echo $i; ?>][checkbox_check]"
              value="1"<?php checked( \'1\', $checkbox_check ) ?> class="form-check-input">
        </div>
    </li>
    <?php
}

SO网友:Alt C

我可以通过以下更改代码来解决问题:checked(1 == $orderdescider[$id][\'checkbox_check\']);

结束

相关推荐

是否以编程方式取消序列化WP_OPTIONS选项?

我需要以编程方式取消wp\\U选项的序列化。我正在创建一个Java应用程序来更改数据库信息,例如wp\\u选项上的一些选项,这样我就不需要访问面板来进行更改。如何取消序列化选项,如 a:4:{i:0;s:5:\"posts\";i:1;s:5:\"pages\";i:2;s:4:\"tags\";i:3;s:10:\"categories\";} 或 a:1:{s:12:\"_multiwidget\";i:1;} 更改它们并重新序列化到数据库?谢谢