/** * Validates user input when section-specific options have been saved. * @since 2.0 */ public function validate($output, $input, $defaults) { if (isset($input['opt_type']) && $input['opt_type'] != 'zone-' . $this->zone->id) { return $output; } $output['sections'][$this->id]['enabled'] = ar2_theme_options_validate_checkbox($input['sections'][$this->id]['enabled']); $output['sections'][$this->id]['title'] = isset($input['sections'][$this->id]['title']) ? esc_attr($input['sections'][$this->id]['title']) : $defaults['sections'][$this->id]['title']; $output['sections'][$this->id]['post_type'] = isset($input['sections'][$this->id]['post_type']) && post_type_exists($input['sections'][$this->id]['post_type']) ? $input['sections'][$this->id]['post_type'] : $defaults['sections'][$this->id]['post_type']; $output['sections'][$this->id]['taxonomy'] = isset($input['sections'][$this->id]['taxonomy']) && taxonomy_exists($input['sections'][$this->id]['taxonomy']) ? $input['sections'][$this->id]['taxonomy'] : $defaults['sections'][$this->id]['taxonomy']; $output['sections'][$this->id]['terms'] = isset($input['sections'][$this->id]['terms']) ? ar2_theme_options_validate_terms_input($input['sections'][$this->id]['terms']) : $defaults['sections'][$this->id]['terms']; $output['sections'][$this->id]['type'] = isset($input['sections'][$this->id]['type']) && in_array($input['sections'][$this->id]['type'], array_keys($this->list_display_types())) ? $input['sections'][$this->id]['type'] : $defaults['sections'][$this->id]['type']; if (!$this->settings['use_main_query']) { $output['sections'][$this->id]['count'] = isset($input['sections'][$this->id]['count']) && is_numeric($input['sections'][$this->id]['count']) ? absint($input['sections'][$this->id]['count']) : $defaults['sections'][$this->id]['count']; } return $output; }
/** * Sanitize and validate form input. Accepts an array, return a sanitized array. * @todo: Needs cleaning up. * @since 1.6 */ function ar2_theme_options_validate($input) { $output = ar2_flush_theme_options(); $defaults = ar2_get_default_theme_options(); if (isset($input['reset'])) { // Reset theme options to default settings. ar2_reset_theme_options(); add_settings_error('reset', 'ar2-theme-options-reset', __('Your settings have been reverted to the defaults.', 'ar2'), 'updated'); return $defaults; } else { if (isset($input['import_theme_options']) && $input['import_theme_options'] != '') { // Import theme options from user input. $output = json_decode($input['import_theme_options'], true); add_settings_error('import_theme_options', 'ar2-theme-options-import', __('Your settings have been successfully imported.', 'ar2'), 'updated'); return $output; } else { if (isset($input['submit'])) { /* Validation for theme options page. Refer to WordPress Codex on Data Validation: * http://codex.wordpress.org/Data_Validation */ $setting_fields = ar2_theme_options_default_fields(); unset($input['export_theme_options']); unset($input['import_theme_options']); foreach ($input as $id => $value) { if (isset($setting_fields[$id])) { switch ($setting_fields[$id]['type']) { case 'thumbnail-size': $sanitized_val = array('w' => is_numeric($value['w']) ? absint($value['w']) : 0, 'h' => is_numeric($value['h']) ? absint($value['h']) : 0); break; case 'cat-dropdown': $sanitized_val = ar2_theme_options_validate_terms_input($value); break; case 'taxonomies-dropdown': if (taxonomy_exists($value)) { $sanitized_val = $value; } break; case 'posttype-dropdown': if (post_type_exists($value)) { $sanitized_val = $value; } break; case 'color-switcher': $sanitized_val = $value; // do nothing break; case 'textarea_html': $sanitized_val = esc_html($value); break; case 'wp_editor': $sanitized_val = esc_html($value); break; case 'dropdown': if (in_array($value, array_keys($setting_fields[$id]['options']))) { $sanitized_val = $value; } break; case 'checkbox': $sanitized_val = 1 == $value ? true : false; break; case 'switch': $sanitized_val = 1 == $value ? true : false; break; case 'custom': $sanitized_val = $value; // do nothing break; default: $sanitized_val = esc_attr($value); } $sanitized_val = apply_filters('ar2_theme_options_validate_setting-' . $id, $sanitized_val, $value, $output); $output = ar2_multidimensional_replace($output, $setting_fields[$id]['_id_data']['keys'], $sanitized_val); } } add_settings_error('submit', 'ar2-theme-options-submit', __('Your settings have been successfully saved.', 'ar2'), 'updated'); } else { // Input from WP Customize $output = apply_filters('ar2_theme_customize_validate', $output, $input, $defaults); } } } // Leave for debugging purposes. /* echo '<pre><code>'; print_r( $input ); echo '</code></pre>'; echo '<pre><code>'; print_r( $output ); echo '</code></pre>'; */ return apply_filters('ar2_theme_options_validate', $output, $input, $defaults); }