Проблема была из-за наличия 2 settings_fields в качестве зарегистрированных настроек в Wordpress.Базовая структура была такой:
function cb_t2c_admin_init() {
register_setting('cb_t2c_options', 'cb_t2c_options' /*'cv_t2c_validate_options'*/);
//Define sections and settings
add_settings_section(
//This defined the settings section.
);
add_settings_field(
//This defined the first setting, with a call to a function.
);
add_settings_field(
//This defined the unwanted setting.
);
}
То, чего я хотел достичь с помощью Wordpress, - это иметь раздел вне формы, который бы показывал пользователю выбранные в данный момент параметры в простой таблице HTML.Поэтому я удалил вторую функцию add_settings_field, взял содержимое функции обратного вызова и поместил ее в конец функции, которая рисует страницу параметров.Например,
//Draw the options page
function cb_t2c_plugin_options_page () {
$cb_t2c_remove_all_url = plugin_dir_url( _FILE_ ) . 'remove_all.php';
?>
<div class="wrap">
<?php screen_icon('plugins'); ?>
<h2>Title</h2>
<div id="new-assoc-msg" class="updated"><p>Data was successfully added.</p></div>
<form id="formsavesettings" name="save_settings" action="<?php echo $_SERVER['PHP_SELF'].'?page=the_options_page'; ?>" method="post">
<?php
settings_fields('cb_t2c_options');
do_settings_sections('section_name');
?>
<input name="Submit" type="submit" value="Save Changes" />
</form></div>
<?php
// Here is where I added the PHP code to show my table full of already selected values.
// This is accomplished with 1 settings section and 1 settings field.
// By previously putting the code in a settings field, I was telling Wordpress to pass along the values to the form.
};
Это еще не устраняет уязвимость SQL-инъекций, но объясняет, почему непреднамеренное значение передается в форму.