'array', 'sanitize_callback' => [Limits::class, 'sanitize'], 'default' => Limits::DEFAULTS, ]); } public function registerActions(): void { } public function render(): void { $values = (new Limits())->all(); $bounds = Limits::bounds(); $fields = [ 'upload_mb' => [ __('Maximale Dateigröße', 'wp-lit-mcp'), __('MB', 'wp-lit-mcp'), sprintf( /* translators: 1: maximum value in MB, 2: cap for Base64 transfers in MB */ __('Höchstens %1$d MB; für Base64-Übertragungen höchstens %2$d MB.', 'wp-lit-mcp'), $bounds['upload_mb'][1], Limits::INLINE_MAX_MB ), ], 'log_retention_days' => [ __('Protokoll aufbewahren', 'wp-lit-mcp'), __('Tage', 'wp-lit-mcp'), __('Ältere Einträge im Protokoll werden automatisch gelöscht.', 'wp-lit-mcp'), ], ]; echo '
'; settings_fields(self::GROUP); echo ''; foreach ($fields as $key => [$label, $unit, $description]) { [$min, $max] = $bounds[$key]; printf( ''; } echo ''; // Design system snapshots are not available yet: no visible setting, but keep the saved value. printf( '', esc_attr(Limits::OPTION), (int) $values['snapshot_count'] ); submit_button(); echo '
'; } /** * PHP's own upload_max_filesize/post_max_size (via wp_max_upload_size()) can be lower than * what is configured here – WordPress itself would then refuse a large upload/download before * this limit ever applies. A warning only, since the two are independent knobs. */ private function maybeRenderUploadSizeNotice(int $uploadMb): void { $serverMaxMb = (int) floor(wp_max_upload_size() / (1024 * 1024)); if ($serverMaxMb <= 0 || $uploadMb <= $serverMaxMb) { return; } $message = sprintf( /* translators: 1: configured limit in MB, 2: server limit in MB */ __('%1$d MB übersteigt das Server-Limit von %2$d MB (upload_max_filesize/post_max_size).', 'wp-lit-mcp'), $uploadMb, $serverMaxMb ); printf('

%s

', esc_html($message)); } }