easy_svg_max_mb_ceiling
Heb die höchste SVG-Größe in Megabyte an oder senke sie, die Admins unter Icons, Einstellungen wählen können. Feld, Regler und gespeicherter Wert folgen.
Filter · Easy SVG · Status: Stabil
Unter Icons → Einstellungen wählt ein Administrator die "Maximale SVG-Größe (MB)". Diese Wahl hat ein oberes Ende, standardmäßig 20 MB, damit niemand einen Wert setzt, mit dem eine einzelne Datei den Server ausbremst. Dieser Filter verschiebt das obere Ende: Feld, Schieberegler und der tatsächlich gespeicherte Wert folgen ihm.
Verwendung
apply_filters( 'easy_svg_max_mb_ceiling', int $ceiling )
Wird in includes/settings.php innerhalb von easy_svg_max_mb_ceiling() angewendet. Das Ergebnis wird in eine Ganzzahl umgewandelt und auf mindestens 1 angehoben.
Wann du es brauchst
- Deine Website braucht wirklich SVGs über 20 MB (große technische Zeichnungen, detaillierte Karten), und der Administrator der Website soll die genaue Größe im Einstellungsbildschirm festlegen.
- Du betreust Kunden-Websites und willst die höchste Wahl senken, etwa auf 5 MB, damit niemand aus Versehen mehr einstellt.
- Du baust ein Add-on, das größere Dateien als Funktion anbietet. Mach das von
EASY_SVG_PANEL_APIabhängig, denn dieser Filter gehört zum Panel-Vertrag.
Lass es bleiben, wenn:
- du die Grenze selbst aus dem Code setzen willst. Die Obergrenze entscheidet nur, was man wählen kann. Für die wirksame Grenze nimm
easy_svg_max_bytes. - du weniger als 1 MB brauchst. Die Einstellung kennt nur ganze Megabyte ab 1, egal wie die Obergrenze aussieht.
Parameter
Der höchste Wert in ganzen Megabyte, den die Einstellung halten darf. Standard 20.
Rückgabewert
Die neue Obergrenze in Megabyte. Der Wert läuft durch (int), aus 2.5 wird also 2. Alles unter 1 (auch 0, negative Zahlen und null) gilt als 1.
Standardwert
20
Beispiele
Bis zu 50 MB erlauben
/**
* Administratoren dürfen unter Icons, Einstellungen bis zu 50 MB wählen.
*/
function mysite_svg_max_mb_ceiling( $ceiling ) {
return 50;
}
add_filter( 'easy_svg_max_mb_ceiling', 'mysite_svg_max_mb_ceiling' );
Danach reichen Feld und Regler im Tab Einstellungen bis 50, und der Hilfetext sagt "Erlaubt: 1 bis 50 MB."
Kunden-Websites auf höchstens 5 MB festlegen
function mysite_svg_max_mb_ceiling_client( $ceiling ) {
return min( (int) $ceiling, 5 );
}
add_filter( 'easy_svg_max_mb_ceiling', 'mysite_svg_max_mb_ceiling_client', 20 );
min() verhindert, dass ein anderes Plugin den Wert wieder anhebt, solange dein Callback später läuft (Priorität 20).
Im Add-on, nur wo das Plugin es versteht
function myaddon_raise_svg_ceiling( $ceiling ) {
return max( (int) $ceiling, 100 );
}
function myaddon_boot() {
if ( ! defined( 'EASY_SVG_PANEL_API' ) ) {
return; // Easy SVG fehlt oder ist zu alt: nichts anzuheben.
}
add_filter( 'easy_svg_max_mb_ceiling', 'myaddon_raise_svg_ceiling' );
}
add_action( 'plugins_loaded', 'myaddon_boot' );
max() respektiert eine Website, die die Obergrenze schon höher gesetzt hat, als dein Add-on es würde.
So funktioniert es
Die Obergrenze wird an drei Stellen gelesen:
- Bei jedem Lesen der Einstellungen.
easy_svg_settings()schickt die gespeicherte Option durcheasy_svg_sanitize_settings(), dasmax_mbauf den Bereich 1 bis Obergrenze begrenzt. Das passiert bei jedem Seitenaufruf, auf dem Easy SVG eine Einstellung prüft, und jedes Mal, wenn die Größengrenze gebraucht wird. - Beim Speichern. Der Tab Einstellungen speichert über
POST /wp-json/easy-svg/v1/settings. Eine Zahl über der Obergrenze wird nicht abgelehnt, sondern begrenzt und gespeichert, und das Panel zeigt "Das Größen-Limit wurde als 50 MB gespeichert, dem nächsten erlaubten Wert (1 bis 50)." Eine Zahl unter 1 lehnt die Route mit einem Fehler 400 ab. - Beim Laden des Icons-Bildschirms. Der Wert geht als
maxMbCeilingans Panel, damit Zahlenfeld, Schieberegler und der Text "Erlaubt: 1 bis N MB." genau dort enden, wo der Server begrenzt.
Die Obergrenze begrenzt nur die Einstellung. Der Filter easy_svg_max_bytes läuft danach und wird nicht begrenzt, Code kann also weiterhin jede Grenze in Bytes setzen.
Stolperfallen
- Senken senkt auch, was schon gespeichert ist, und zwar sofort. Die Begrenzung läuft bei jedem Lesen. Eine Website mit gespeicherten 50 MB arbeitet mit 20 MB, sobald dein anhebender Filter weg ist, etwa weil das Add-on, das ihn mitbringt, deaktiviert wurde.
- Wieder anheben kann den alten Wert zurückbringen. In der Datenbank stehen weiter 50, bis jemand den Tab Einstellungen speichert. Aktivierst du das Add-on vor dem nächsten Speichern wieder, ist die Website zurück bei 50 MB. Nach einem Speichern steht der begrenzte Wert in der Datenbank.
- Registriere ihn bei jeder Anfrage, nicht nur im Backend. Das Panel speichert über die REST-API, und dort ist
is_admin()false. Ein Callback inif ( is_admin() )fehlt beim Speichern, und der Wert wird wieder auf 20 begrenzt. Dasselbe gilt für Uploads aus dem Block-Editor, die auch über die REST-API laufen. - Er läuft oft. Jedes Lesen der Einstellungen wendet den Filter an. Halte den Callback billig: keine Anfragen nach außen, keine schweren Datenbankabfragen.
- Die Server-Grenze gilt weiter. Eine Obergrenze von 100 MB hilft nichts, wenn
upload_max_filesizein PHP bei 8 MB liegt.
easy_svg_max_use_tags, easy_svg_max_php_tags) auf ihren Standardwerten.