使用WordPress设置API保存多个复选框

时间:2019-02-14 作者:John Cook

使用WordPress设置api保存多个复选框时遇到问题。我可以添加多个值,但只保存最后一个复选框。

这就是我现在拥有的

function uwcc_checkbox_field_1_render(  ) { 

$options = get_option( \'uwcc_settings\' );
?>
<input type=\'checkbox\' name=\'uwcc_settings[uwcc_checkbox_field_1]\' <?php checked( $options[\'uwcc_checkbox_field_1\'], Mastercard ); ?> value=\'Mastercard\'>
    <label>Mastercard</label>
<input type=\'checkbox\' name=\'uwcc_settings[uwcc_checkbox_field_1]\' <?php checked( $options[\'uwcc_checkbox_field_1\'], Visa ); ?> value=\'Visa\'>
   <label>Visa</label>
<input type=\'checkbox\' name=\'uwcc_settings[uwcc_checkbox_field_1]\' <?php checked( $options[\'uwcc_checkbox_field_1\'], Amex ); ?> value=\'Amex\'>
   <label>Amex</label>
<?php

}
我确实尝试将[]放在所有uwcc\\U设置[uwcc\\U checkbox\\u field\\u 1]的末尾,如下所示,但没有保存任何设置。

    <input type=\'checkbox\' name=\'uwcc_settings[uwcc_checkbox_field_1][]\' <?php checked( $options[\'uwcc_checkbox_field_1\'], Mastercard ); ?> value=\'Mastercard\'>
<label>Mastercard</label>
如何保存所有字段?

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

字段名称应为uwcc_settings[uwcc_checkbox_field_1][], i、 e.将字段转换为数组。

其次,当保存为数组时,应该使用in_array() 以及checked() 作用但首先,让我们把uwcc_checkbox_field_1 将选项的值转换为变量:

$uwcc_checkbox_field_1 = isset( $options[\'uwcc_checkbox_field_1\'] ) ?
  (array) $options[\'uwcc_checkbox_field_1\'] : [];
现在你打电话checked() 像这样&mdash;这个1, 例如,在第一行中,表示默认值(如<input value="Mastercard" type="checkbox".../>) 是Mastercard:

checked( in_array( \'Mastercard\', $uwcc_checkbox_field_1 ), 1 )
checked( in_array( \'Visa\', $uwcc_checkbox_field_1 ), 1 )
checked( in_array( \'Amex\', $uwcc_checkbox_field_1 ), 1 )
完整代码,已尝试(&T);测试工作:(为清晰起见,重新缩进)

function uwcc_checkbox_field_1_render() {

    $options = get_option( \'uwcc_settings\', [] );

    $uwcc_checkbox_field_1 = isset( $options[\'uwcc_checkbox_field_1\'] )
        ? (array) $options[\'uwcc_checkbox_field_1\'] : [];
    ?>
    <input type=\'checkbox\' name=\'uwcc_settings[uwcc_checkbox_field_1][]\' <?php checked( in_array( \'Mastercard\', $uwcc_checkbox_field_1 ), 1 ); ?> value=\'Mastercard\'>
        <label>Mastercard</label>
    <input type=\'checkbox\' name=\'uwcc_settings[uwcc_checkbox_field_1][]\' <?php checked( in_array( \'Visa\', $uwcc_checkbox_field_1 ), 1 ); ?> value=\'Visa\'>
       <label>Visa</label>
    <input type=\'checkbox\' name=\'uwcc_settings[uwcc_checkbox_field_1][]\' <?php checked( in_array( \'Amex\', $uwcc_checkbox_field_1 ), 1 ); ?> value=\'Amex\'>
       <label>Amex</label>
    <?php

}
不要忘记引用复选框值;e、 g。\'Mastercard\' 而不是Mastercard.见下文,假设Mastercard 不是PHP常量:

checked( $options[\'uwcc_checkbox_field_1\'], Mastercard )   // bad
checked( $options[\'uwcc_checkbox_field_1\'], \'Mastercard\' ) // good

checked( in_array( Mastercard, $uwcc_checkbox_field_1 ), 1 )   // bad
checked( in_array( \'Mastercard\', $uwcc_checkbox_field_1 ), 1 ) // good

相关推荐