我的自定义插件管理页面中的复选框冲突

时间:2017-03-04 作者:Css14

我正在尝试为WordPress制作一个带有管理选项页面的自定义插件。

在选项页面中,用户必须能够选中一个选项,如果选中该复选框,插件应该向HTML表单添加一个部分。

我遇到的问题是,第二个复选框没有将其值存储在数据库中,因此我无法对其进行检查。如果更改声明代码顺序,则只有第二个复选框不起作用。

请注意,我的插件选项适用于每个组件,我只在复选框中遇到了这个问题。

这是我插件的复选框部分。是否存在一些冲突?我做错了什么?

function set_options() {
    register_setting( \'checkbox-1-settings\', \'my_checkbox_1_name\' );
    register_setting( \'checkbox-2-settings\', \'my_checkbox_2_name\' );
}

function admin_page(){
    ?>
    <form method="post" action="options.php">
      <?php settings_fields( \'checkbox-1-settings\' ); ?>
      <?php settings_fields( \'checkbox-2-settings\' ); ?>
      <?php do_settings_sections( \'checkbox-1-settings\' ); ?>
      <?php do_settings_sections( \'checkbox-2-settings\' ); ?>
      <table class="form-table">
        <tr valign="top">
          <th scope="row">Option 1</th>
          <td><input type=\'checkbox\' name=\'my_checkbox_1_name\' <?php checked( get_option(\'my_checkbox_1_name\'), 1 ); ?> value=\'1\'></td>
        </tr>
        <tr valign="top">
          <th scope="row">Option 2:</th>
          <td><input type=\'checkbox\' name=\'my_checkbox_2_name\' <?php checked( get_option(\'my_checkbox_2_name\'), 1 ); ?> value=\'1\'></td>
        </tr>
      </table>
      <?php submit_button(); ?>
    </form>
    <?php
}

function my_plugin() {

  $html = \'<form>
  if (get_option(\'my_checkbox_1_name\')) {
    $html .= \'<select name="select1" id="test1">
        <option selected disabled>select1</option>
        <option value="1">1</option>
        <option value="2">2</option>
        <option value="3">3</option>
      </select>\';
  }
  else if (get_option(\'my_checkbox_2_name\')) {
    $html .= \'<select name="select2" id="test2">
        <option selected disabled>select2</option>
        <option value="1">1</option>
        <option value="2">2</option>
        <option value="3">3</option>
      </select>\';
  }
  return $html . \'<input type="submit" value="Go!"></form>\' . $content;
}

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

您正在为设置字段注册两个单独的设置组(&P);问题可能就在这里。

 function set_options() {
    register_setting( \'checkbox-1-settings\', \'my_checkbox_1_name\' );
    register_setting( \'checkbox-2-settings\', \'my_checkbox_2_name\' );
}
因此,仅对这两个字段使用一个设置组,以查看其是否有效。

function set_options() {
    register_setting( \'checkbox-settings\', \'my_checkbox_1_name\' );
    register_setting( \'checkbox-settings\', \'my_checkbox_2_name\' );
}

Update

获取设置API并存储在数组中。

$options = (array) get_option( \'plugin_options\' );
现在$options 是包含所有字段子字段的数组。只需将该键与此数组一起传递,就可以获得任何键的值。

例如,获取值check_2

$check_two = $options[\'check_2\'];