easy_svg_respect_network_filetypes
Entscheidet, ob die Netzwerk-Einstellung Upload-Dateitypen einer Multisite SVG von einer Site fernhält, auch wenn die Site SVG-Uploads in Easy SVG erlaubt.
Filter · Easy SVG · Status: Stabil
In einem Multisite-Netzwerk legt der Netzwerk-Admin unter Upload-Dateitypen fest, welche Dateien eine Site hochladen darf. Easy SVG hält sich standardmäßig daran: Steht svg nicht in der Liste, kann eine einzelne Site SVG-Uploads nicht für sich einschalten. Mit diesem Filter änderst du diese Regel, für alle Sites oder nur für einige.
Verwendung
apply_filters( 'easy_svg_respect_network_filetypes', bool $respect )
add_filter( 'easy_svg_respect_network_filetypes', '__return_false' );
Wann du es brauchst
- Du verwaltest das Netzwerk und willst SVG auf ein paar Sites erlauben, ohne es unter Upload-Dateitypen für alle freizugeben.
- In deinem Netzwerk ist jeder Site-Betreiber vertrauenswürdig, und der Schalter in Easy SVG soll pro Site allein entscheiden.
Lass es bleiben:
- Auf einer Einzel-Installation. Dort wird der Filter nie angewendet.
- Wenn SVG auf jeder Site des Netzwerks erlaubt sein soll. Trag
svgdann unter Upload-Dateitypen ein, damit die Netzwerk-Einstellung stimmt. - Um einen Netzwerk-Admin auszuhebeln, der SVG bewusst weggelassen hat. Das ist seine Entscheidung.
Parameter
true (Standard) heißt, die Netzwerk-Liste entscheidet: SVG gibt es nur, wenn Upload-Dateitypen svg enthält. false heißt, die Netzwerk-Liste wird für SVG ignoriert und der Schalter in Easy SVG auf der jeweiligen Site entscheidet. Der Wert wird nur auf wahr oder falsch geprüft, 0, '' und null zählen also als false.
Rückgabewert
true, um die Liste Upload-Dateitypen des Netzwerks zu beachten, false, um svg trotzdem hinzuzufügen.
Standardwert
true. Eingeführt mit Easy SVG 5.0.0. Davor hat das Plugin svg auf jeder Site zu den erlaubten Typen hinzugefügt, egal was das Netzwerk erlaubt.
Beispiele
Jede Site selbst entscheiden lassen
// mu-plugins/myplugin-svg-policy.php
add_filter( 'easy_svg_respect_network_filetypes', '__return_false' );
Ein Must-Use-Plugin ist im Netzwerk der richtige Ort: Es wird auf jeder Site geladen, und kein Site-Admin kann es deaktivieren.
SVG nur auf ausgewählten Sites erlauben
/**
* Die Netzwerk-Liste nur auf einigen Sites für SVG ignorieren.
*
* @param bool $respect Ob die Netzwerk-Einstellung gilt.
* @return bool
*/
function myplugin_svg_network_policy( $respect ) {
$sites_with_svg = array( 3, 7, 12 );
if ( in_array( get_current_blog_id(), $sites_with_svg, true ) ) {
return false;
}
return $respect;
}
add_filter( 'easy_svg_respect_network_filetypes', 'myplugin_svg_network_policy' );
Der Filter bekommt keine Site übergeben. Er läuft in upload_mimes, während WordPress eine Anfrage für genau eine Site bearbeitet, get_current_blog_id() ist also die richtige Site. Auf diesen Sites muss in Easy SVG trotzdem SVG-Uploads in der Mediathek erlauben eingeschaltet sein.
Stattdessen die Netzwerk-Einstellung ändern
Sollen die meisten Sites SVG bekommen, änderst du besser die Regel selbst, statt sie zu übergehen. Mit WP-CLI:
# Ansehen, was das Netzwerk heute erlaubt (durch Leerzeichen getrennt).
wp site option get upload_filetypes
# Die Liste mit svg am Ende zurückschreiben. Alle bisherigen Typen bleiben drin.
wp site option update upload_filetypes "$(wp site option get upload_filetypes) svg"
Dieselbe Liste findest du in der Netzwerkverwaltung unter Einstellungen, Netzwerk-Einstellungen, Upload-Dateitypen.
Mit false setzt du eine Entscheidung außer Kraft, die ein Netzwerk-Admin bewusst getroffen hat. Jede Site, die SVG-Uploads einschaltet, nimmt dann SVG-Dateien an, und die Upload-Rechte dieser Site entscheiden, wer sie hinzufügen darf. Easy SVG bereinigt weiterhin jede Datei, aber der Netzwerk-Admin bestimmt nicht mehr, wo SVG möglich ist.
So funktioniert es
Der Filter wird in esw_add_support() angewendet (easy-svg.php, Zeile 812), dem Callback von Easy SVG auf upload_mimes:
Was daraus im Code folgt:
esw_add_support()ist nur eingehängt, solange auf der Site SVG-Uploads in der Mediathek erlauben eingeschaltet ist. Ist die Einstellung aus, fügt niemandsvghinzu, egal was dieser Filter zurückgibt.- Die Einstellung wird gelesen, wenn Easy SVG lädt. Eine Änderung wirkt also ab der nächsten Anfrage.
- Die Netzwerk-Option wird kleingeschrieben und an Leerraum getrennt.
SVGundsvgzählen beide,svg,png(mit Komma) enthält aber keinsvg. - Die Multisite-Prüfung von Core läuft auf demselben Hook vor Easy SVG. Gibst du
falsezurück, fügt Easy SVGsvgalso hinzu, nachdem Core die Liste schon gefiltert hat. Deshalb greift die Ausnahme. - Ohne
svgin den erlaubten Typen lehnt die Upload-Prüfung von Easy SVG eine Datei mit der Endung.svgab: „Diese SVG-Datei ist aus Sicherheitsgründen leider nicht erlaubt.“ esw_add_support()ist austauschbar (pluggable). Gibt es vor Easy SVG schon eine Funktion mit diesem Namen, definiert und hängt Easy SVG seine eigene nicht ein, und dieser Filter wird nie angewendet.
Stolperfallen
- Einzel-Sites ignorieren ihn. Zuerst wird
is_multisite()geprüft, auf einer Einzel-Site wird der Filter gar nicht aufgerufen. - Er schaltet SVG nicht ein. Er nimmt nur das Veto des Netzwerks weg. Die Site braucht trotzdem die Upload-Einstellung von Easy SVG.
- Kommas machen die Netzwerk-Liste unlesbar. WordPress erwartet unter Upload-Dateitypen Leerzeichen. Ein Wert mit Kommas versteckt
svgvor dieser Prüfung. - Die Icon-Bibliothek ist nicht betroffen. Icons unter Icons, Icon-Bibliothek anzulegen läuft nicht über
upload_mimes. Weder die Netzwerk-Liste noch dieser Filter begrenzen das. Icons haben ihre eigene Berechtigung (Administratoren). - Am Bereinigen ändert sich nichts. Egal was dieser Filter zurückgibt, jedes SVG, das in die Mediathek gelangt, wird bereinigt, und die Prüfung neuer Anhänge läuft auf jeder Site, auf der Easy SVG aktiv ist.