['allowed' => [...], 'default' => ...]] * @return array Array asociativo con valores enum sanitizados */ public static function sanitize_enums($data, $config) { $result = array(); foreach ($config as $key => $settings) { $result[$key] = self::sanitize_enum( $data, $key, $settings['allowed'], $settings['default'] ); } return $result; } /** * Sanitiza un valor entero con valor por defecto * * @param array $data Array de datos * @param string $key Clave del dato * @param int $default Valor por defecto * @return int Entero sanitizado */ public static function sanitize_int($data, $key, $default = 0) { return isset($data[$key]) ? intval($data[$key]) : $default; } /** * Sanitiza múltiples valores enteros * * @param array $data Array de datos * @param array $config Array de configuración [key => default_value] * @return array Array asociativo con enteros sanitizados */ public static function sanitize_ints($data, $config) { $result = array(); foreach ($config as $key => $default) { $result[$key] = self::sanitize_int($data, $key, $default); } return $result; } /** * Sanitiza un valor float con valor por defecto * * @param array $data Array de datos * @param string $key Clave del dato * @param float $default Valor por defecto * @return float Float sanitizado */ public static function sanitize_float($data, $key, $default = 0.0) { return isset($data[$key]) ? floatval($data[$key]) : $default; } /** * Sanitiza múltiples valores float * * @param array $data Array de datos * @param array $config Array de configuración [key => default_value] * @return array Array asociativo con floats sanitizados */ public static function sanitize_floats($data, $config) { $result = array(); foreach ($config as $key => $default) { $result[$key] = self::sanitize_float($data, $key, $default); } return $result; } /** * Sanitiza una URL con valor por defecto * * @param array $data Array de datos * @param string $key Clave del dato * @param string $default Valor por defecto (default: '') * @return string URL sanitizada */ public static function sanitize_url($data, $key, $default = '') { return esc_url_raw($data[$key] ?? $default); } /** * Sanitiza un array de strings * * @param array $data Array de datos * @param string $key Clave del dato * @param array $default Array por defecto * @return array Array de strings sanitizados */ public static function sanitize_array_of_strings($data, $key, $default = array()) { return isset($data[$key]) && is_array($data[$key]) ? array_map('sanitize_text_field', $data[$key]) : $default; } /** * Sanitiza un grupo de campos anidados (custom_styles, dropdown, etc.) * * @param array $data Array de datos completo * @param string $group_key Clave del grupo (ej: 'custom_styles') * @param array $sanitization_rules Reglas de sanitización por campo * Formato: [ * 'campo' => ['type' => 'text|color|int|float|enum|bool', 'default' => valor, 'allowed' => array()] * ] * @return array Array con campos del grupo sanitizados */ public static function sanitize_nested_group($data, $group_key, $sanitization_rules) { $result = array(); $group_data = $data[$group_key] ?? array(); foreach ($sanitization_rules as $field => $rule) { $type = $rule['type']; $default = $rule['default'] ?? null; switch ($type) { case 'text': $result[$field] = self::sanitize_text($group_data, $field, $default ?? ''); break; case 'color': $result[$field] = self::sanitize_color($group_data, $field, $default ?? ''); break; case 'int': $result[$field] = self::sanitize_int($group_data, $field, $default ?? 0); break; case 'float': $result[$field] = self::sanitize_float($group_data, $field, $default ?? 0.0); break; case 'enum': $result[$field] = self::sanitize_enum( $group_data, $field, $rule['allowed'] ?? array(), $default ); break; case 'bool': $result[$field] = self::sanitize_boolean($group_data, $field); break; default: $result[$field] = $group_data[$field] ?? $default; } } return $result; } }