Add hidden field to checkbox and submit unchecked value I want to submit a value if a checkbox is unchecked (on a node edit form).

Using theme_form_element I can add the hidden field as follows:

$variables['element']['#children'] = '$variables['element']['#name'] . '" value="0" /&gt;' . $variables['element']['#children'];

But on submit, because value 0 is not in the allowed values list, I get the 'An illegal choice has been detected. Please contact the site administrator.' error message.

How can I bypass this validation and/or submit the value 0 for each unchecked checkbox?
Take a look at the answer to Custom validation for a form? This tells you how to add your own validation handler to the form. You will need to implement the form_alter like they show to add your custom validation, but also remove the validation that is throwing the error when the value is 0. (You can do this by unsetting that index in the array.) Then, for your custom validation method, my recommendation is to have a validation handler something like:

function my_custom_validation(&amp;$form, &amp;$form_state) {
  if ($form_state['values']['my_checkbox_field'] !== 0) {
    // Call the validation handler you removed in your form_alter
    // I might set the name of the method to a variable in form_state
    the_validation_handler_you_removed($form, $form_state);
  }
}


where you call the original validation handler from your method if the checkbox value is not the specific value you're looking for, in your case 0.