'webp', 'webp_quality' => 80, 'avif_quality' => 70, 'convert_on_upload' => false, 'keep_original' => true, 'bulk_batch_size' => 5, ); /** * Constructor */ public function __construct() { if (!self::$registered) { self::$registered = true; add_action('admin_init', array($this, 'register_settings')); } } /** * Register settings */ public function register_settings() { register_setting( 'iwac_settings_group', self::OPTION_NAME, array($this, 'sanitize_settings') ); add_settings_section( 'iwac_general_settings', __('General Settings', 'infinico-image-optimizer'), array($this, 'general_settings_callback'), 'iwac_settings' ); add_settings_field( 'default_format', __('Default Output Format', 'infinico-image-optimizer'), array($this, 'default_format_callback'), 'iwac_settings', 'iwac_general_settings' ); add_settings_field( 'webp_quality', __('WebP Quality (1-100)', 'infinico-image-optimizer'), array($this, 'webp_quality_callback'), 'iwac_settings', 'iwac_general_settings' ); add_settings_field( 'avif_quality', __('AVIF Quality (1-100)', 'infinico-image-optimizer'), array($this, 'avif_quality_callback'), 'iwac_settings', 'iwac_general_settings' ); add_settings_field( 'convert_on_upload', __('Convert on Upload', 'infinico-image-optimizer'), array($this, 'convert_on_upload_callback'), 'iwac_settings', 'iwac_general_settings' ); add_settings_field( 'keep_original', __('Keep Original Files', 'infinico-image-optimizer'), array($this, 'keep_original_callback'), 'iwac_settings', 'iwac_general_settings' ); add_settings_field( 'bulk_batch_size', __('Bulk Conversion Batch Size', 'infinico-image-optimizer'), array($this, 'bulk_batch_size_callback'), 'iwac_settings', 'iwac_general_settings' ); } /** * Get settings */ public function get_settings() { return wp_parse_args(get_option(self::OPTION_NAME, array()), $this->defaults); } /** * Get single setting */ public function get_setting($key) { $settings = $this->get_settings(); return isset($settings[$key]) ? $settings[$key] : (isset($this->defaults[$key]) ? $this->defaults[$key] : null); } /** * Set defaults on activation */ public function set_defaults() { if (!get_option(self::OPTION_NAME)) { update_option(self::OPTION_NAME, $this->defaults); } } /** * Sanitize settings */ public function sanitize_settings($input) { $input = is_array($input) ? $input : array(); $sanitized = array(); $default_format = isset($input['default_format']) ? $input['default_format'] : 'webp'; $sanitized['default_format'] = in_array($default_format, array('webp', 'avif'), true) ? $default_format : 'webp'; $sanitized['webp_quality'] = absint(isset($input['webp_quality']) ? $input['webp_quality'] : $this->defaults['webp_quality']); $sanitized['webp_quality'] = max(1, min(100, $sanitized['webp_quality'])); $sanitized['avif_quality'] = absint(isset($input['avif_quality']) ? $input['avif_quality'] : $this->defaults['avif_quality']); $sanitized['avif_quality'] = max(1, min(100, $sanitized['avif_quality'])); $sanitized['convert_on_upload'] = !empty($input['convert_on_upload']) ? 1 : 0; $sanitized['keep_original'] = 1; $sanitized['bulk_batch_size'] = absint(isset($input['bulk_batch_size']) ? $input['bulk_batch_size'] : $this->defaults['bulk_batch_size']); $sanitized['bulk_batch_size'] = max(1, min(50, $sanitized['bulk_batch_size'])); return $sanitized; } /** * General settings callback */ public function general_settings_callback() { echo '

' . esc_html__('Configure the default settings for image conversion.', 'infinico-image-optimizer') . '

'; } /** * Default format callback */ public function default_format_callback() { $settings = $this->get_settings(); ?> get_settings(); ?> get_settings(); ?> get_settings(); ?> /> get_settings(); ?> /> get_settings(); ?>