GLB-Dateien in WordPress hochladen.
„Aus Sicherheitsgründen ist dieser Dateityp nicht erlaubt.“ — die erste Hürde, wenn man ein 3D-Modell in die WordPress-Mediathek laden will. Hier steht, warum das passiert, wie man GLB-Dateien sicher erlaubt, warum es trotzdem manchmal nicht klappt und wie die Modelle danach schnell ausgeliefert werden.
WordPress lässt nur Dateitypen zu, die in einer internen Liste stehen — GLB gehört nicht dazu. Mit dem Filter upload_mimes wird der Typ ergänzt, idealerweise nur für Administratoren. Weil der Server GLB-Dateien beim Prüfen oft als allgemeine Binärdatei erkennt, braucht es häufig zusätzlich den Filter wp_check_filetype_and_ext. Am Webserver sollte außerdem der MIME-Typ model/gltf-binary gesetzt werden.
Warum WordPress GLB-Dateien ablehnt.
WordPress prüft jede hochgeladene Datei in zwei Stufen. Zuerst schaut es auf die Dateiendung und vergleicht sie mit einer Liste erlaubter Typen — Bilder, PDFs, Office-Dokumente, Audio und Video. 3D-Formate wie GLB, glTF oder USDZ fehlen darin.
Danach prüft WordPress bei vielen Dateitypen zusätzlich den tatsächlichen Inhalt: Es fragt den Server, was für eine Datei das „wirklich“ ist, und vergleicht das mit der Endung. Dieses Vorgehen verhindert, dass jemand zum Beispiel ein Skript als Bild tarnt.
Das Ergebnis: Selbst wenn man die Endung erlaubt, kann die zweite Prüfung scheitern, weil der Server eine GLB-Datei nicht kennt und sie als application/octet-stream meldet — also als „irgendeine Binärdatei“. Deshalb funktionieren viele Anleitungen im Netz bei manchen Hostern und bei anderen nicht.
Schritt 1: Dateityp erlauben.
Der Code gehört in ein eigenes kleines Plugin oder in ein Code-Snippets-Plugin — nicht in die functions.php des Themes, weil er sonst bei einem Theme-Wechsel verschwindet und damit auch die Uploads nicht mehr funktionieren.
<?php
/**
* Plugin Name: 3D-Dateien in der Mediathek
*/
add_filter( 'upload_mimes', function ( $mimes ) {
// Nur Benutzer, die Plugins verwalten duerfen
if ( ! current_user_can( 'manage_options' ) ) {
return $mimes;
}
$mimes['glb'] = 'model/gltf-binary';
$mimes['gltf'] = 'model/gltf+json';
$mimes['usdz'] = 'model/vnd.usdz+zip';
return $mimes;
} );Die Einschränkung auf manage_options ist Absicht: Autoren und Redakteure können so keine 3D-Dateien hochladen. Soll die Redaktion Modelle selbst pflegen, eine passende eigene Berechtigung verwenden statt den Filter für alle zu öffnen.
Schritt 2: Wenn es trotzdem nicht klappt.
Erscheint nach Schritt 1 weiterhin „Dieser Dateityp ist nicht erlaubt“, scheitert die Inhaltsprüfung. Der Server meldet die GLB-Datei als allgemeine Binärdatei, und WordPress verwirft den Upload. Die Lösung ist, WordPress für genau diese Endungen mitzuteilen, welcher Typ gemeint ist — und dabei zu prüfen, dass die Datei tatsächlich wie eine GLB-Datei aussieht.
GLB-Dateien haben dafür ein eindeutiges Merkmal: Sie beginnen mit den vier Bytes glTF. Diese Prüfung ist deutlich sicherer als blind jede Datei mit der Endung .glb durchzulassen.
<?php
add_filter( 'wp_check_filetype_and_ext', function ( $data, $file, $filename, $mimes ) {
$ext = strtolower( pathinfo( $filename, PATHINFO_EXTENSION ) );
if ( 'glb' !== $ext || ! current_user_can( 'manage_options' ) ) {
return $data;
}
// Echte GLB-Dateien beginnen mit den Bytes "glTF"
$kopf = file_get_contents( $file, false, null, 0, 4 );
if ( 'glTF' !== $kopf ) {
return $data; // keine GLB-Datei -> WordPress lehnt ab
}
return [
'ext' => 'glb',
'type' => 'model/gltf-binary',
'proper_filename' => $data['proper_filename'],
];
}, 10, 4 );glTF-Dateien (.gltf) sind Text im JSON-Format und verweisen meist auf separate .bin- und Bilddateien. Für WordPress ist GLB fast immer die bessere Wahl, weil alles in einer einzigen Datei steckt.
Schritt 3: MIME-Typ und Cache am Server.
Nach dem Upload liegt die Datei unter /wp-content/uploads/. Jetzt kommt es darauf an, wie der Webserver sie ausliefert. Zwei Punkte sind wichtig:
Der richtige Typ: Kennt der Server die Endung nicht, liefert er die Datei als application/octet-stream aus. Die meisten 3D-Viewer laden sie trotzdem, aber manche Browser, CDNs und Sicherheitseinstellungen verhalten sich dann anders. Sauber ist model/gltf-binary.
Lange Cache-Zeiten und Kompression: Ein 3D-Modell ändert sich selten. Der Browser sollte es nach dem ersten Besuch aus dem Cache laden, statt es jedes Mal neu herunterzuladen. Zusätzlich kann der Server die Datei beim Übertragen komprimieren — besonders bei unkomprimierter Geometrie spart das spürbar.
# 3D-Dateitypen korrekt ausliefern
<IfModule mod_mime.c>
AddType model/gltf-binary .glb
AddType model/gltf+json .gltf
AddType model/vnd.usdz+zip .usdz
</IfModule>
# Lange Cache-Zeit fuer Modelle
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType model/gltf-binary "access plus 1 year"
ExpiresByType model/gltf+json "access plus 1 year"
</IfModule>
# Uebertragung komprimieren (GLB ist binaer, profitiert aber oft trotzdem)
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE model/gltf-binary model/gltf+json
</IfModule>Das gilt für Apache-Server, wie sie bei vielen deutschen Hostern im Einsatz sind. Auf Nginx wird der Typ in der Server-Konfiguration eingetragen — das übernimmt meist der Hoster. Bei einem Jahr Cache-Zeit sollte eine geänderte Datei einen neuen Dateinamen bekommen, sonst sehen wiederkehrende Besucher die alte Version.
Sicherheit.
WordPress beschränkt Dateitypen nicht ohne Grund. Wer Uploads freigibt, sollte das bewusst tun:
- Nur für vertrauenswürdige Rollen: Den Upload auf Administratoren oder eine eigene Berechtigung beschränken, nie für alle Benutzer — schon gar nicht, wenn Besucher sich registrieren können.
- Inhalt prüfen, nicht nur Endung: Die Prüfung auf die Kennung glTF am Dateianfang verhindert, dass beliebige Dateien umbenannt und hochgeladen werden.
- Keine pauschalen „alle Dateitypen erlauben“-Plugins: Sie öffnen deutlich mehr als nötig.
- Keine Ausführung im Upload-Ordner: Viele Hoster verhindern das bereits. Es schadet nicht, zu prüfen, dass PHP-Dateien in
/uploads/nicht ausgeführt werden.
Eine GLB-Datei selbst enthält keine ausführbaren Skripte. Das Risiko liegt nicht im Format, sondern darin, die Upload-Prüfung zu großzügig zu öffnen.
Alternativen zur Mediathek.
Die Mediathek ist nicht immer der beste Ort für 3D-Modelle:
- Im Plugin-Ordner: Gehören die Modelle fest zu einem Konfigurator, liegen sie am besten im Plugin selbst. Sie werden mit dem Plugin versioniert und können nicht versehentlich gelöscht werden.
- Über ein CDN: Bei vielen oder großen Modellen und internationalem Publikum lohnt sich die Auslieferung über ein Content Delivery Network. Datenschutz beachten.
- Per FTP oder SSH: Für Einzelfälle ohne Redaktionsbedarf reicht es, die Datei direkt auf den Server zu laden und die URL zu verwenden.
Die Mediathek ist dann die richtige Wahl, wenn Redakteure Modelle selbst austauschen sollen — etwa für eine 3D-Produktansicht in WooCommerce oder einen eigenen 3D-Block.
Checkliste vor dem Hochladen.
- Format GLB statt glTF mit Einzeldateien
- Texturen auf 1K–2K verkleinert, Geometrie komprimiert
- Maßstab in Metern, Ursprung am Boden
- Dateiname sprechend und ohne Umlaute, bei Änderungen mit Versionsnummer
- Upload-Größenlimit des Hostings geprüft — viele Tarife begrenzen Uploads auf wenige Megabyte
- Nach dem Upload im Browser die Datei-URL aufrufen und prüfen, ob sie geladen wird
Wie man die Datei vorher verkleinert und im Browser anzeigt, steht in 3D-Modell auf Website einbinden. Wird das Modell mit Draco komprimiert, braucht der Viewer einen passenden Decoder — sonst bleibt die Szene leer.
Die Horizont-Baureise läuft eingebettet in einer WordPress-Website. Die übrigen Demos laufen als eigenständige Three.js-Anwendungen — technisch dieselbe Grundlage, die sich genauso in WordPress einbinden lässt. Die Markennamen sind überwiegend erfundene Showcases.
Nicht glauben — ausprobieren.
Alle Demos laufen live im Browser, auch auf dem Smartphone.
FAQ — GLB-Dateien in WordPress hochladen.
Warum kann ich keine GLB-Dateien in WordPress hochladen?
WordPress erlaubt nur Dateitypen aus einer internen Liste, zu der 3D-Formate wie GLB nicht gehören. Zusätzlich prüft WordPress den tatsächlichen Dateiinhalt. Weil viele Server GLB-Dateien nicht kennen und als allgemeine Binärdatei melden, kann der Upload auch nach dem Erlauben der Endung noch scheitern.
Wie erlaube ich GLB-Dateien in der Mediathek?
Mit dem Filter upload_mimes wird die Endung glb mit dem Typ model/gltf-binary ergänzt, idealerweise nur für Administratoren. Scheitert der Upload trotzdem, wird zusätzlich über den Filter wp_check_filetype_and_ext der richtige Typ gesetzt, nachdem geprüft wurde, dass die Datei mit der Kennung glTF beginnt.
Ist es unsicher, GLB-Uploads zu erlauben?
Eine GLB-Datei selbst enthält keine ausführbaren Skripte. Das Risiko liegt darin, die Upload-Prüfung zu großzügig zu öffnen. Deshalb sollte der Upload auf vertrauenswürdige Rollen beschränkt und der Dateiinhalt geprüft werden, statt pauschal alle Dateitypen zu erlauben.
Welchen MIME-Typ hat eine GLB-Datei?
GLB-Dateien haben den Typ model/gltf-binary, glTF-Dateien model/gltf+json. Auf Apache-Servern lässt sich das per AddType in einer .htaccess-Datei setzen, auf Nginx in der Server-Konfiguration.
Soll ich GLB oder glTF in WordPress verwenden?
In fast allen Fällen GLB. Es enthält Geometrie, Materialien und Texturen in einer einzigen Datei. glTF verweist meist auf separate Binär- und Bilddateien, die einzeln hochgeladen werden müssten und deren Pfade in der Mediathek leicht brechen.
Wo lege ich 3D-Modelle am besten ab?
Gehören Modelle fest zu einem Konfigurator, am besten im Plugin-Ordner. Sollen Redakteure Modelle selbst austauschen, in der Mediathek. Bei vielen großen Modellen und internationalem Publikum kann ein CDN sinnvoll sein.
Warum lädt mein Modell nach dem Upload nicht im Viewer?
Häufige Ursachen sind ein zu kleines Upload-Limit des Hostings, ein falscher Maßstab, eine fehlende Decoder-Einbindung bei Draco-komprimierten Dateien oder ein Caching- beziehungsweise Optimierungs-Plugin, das die Viewer-Skripte verändert.
Das bin ich – rechts im BildErzähl mir, was du zeigen willst.
Ich sage dir ehrlich, ob sich 3D für dein Vorhaben lohnt — und wenn nicht, was stattdessen mehr bringt.
Antwort meist innerhalb von 24 Stunden · hallo@manuelkillert.de

