Umfassender Leitfaden zur SwupJS-Integration für WordPress/Bricks Builder
Technischer Hintergrund
Was ist Swup?
Swup ist eine JavaScript-Bibliothek, die traditionelle Multi-Page-Websites in Erlebnisse verwandelt, die sich wie Single Page Applications (SPAs) anfühlen. Anstatt bei Klicks auf Links vollständige Browser-Seitenreloads durchzuführen, macht Swup Folgendes:
- Fängt Link-Klicks ab – Erfasst Navigationsereignisse, bevor der Browser sie verarbeitet
- Lädt Seiten per AJAX – Lädt neue Seiteninhalte im Hintergrund über die Fetch API
- Ersetzt Inhalte dynamisch – Tauscht nur die festgelegten Inhalts-Container aus und behält den Rest des DOM bei
- Animiert Übergänge – Wendet während des Übergangs CSS-Klassen für flüssige visuelle Effekte an
- Verwaltet den Browser-Verlauf – Nutzt die History API, um korrekte URL-Zustände sowie Zurück-/Vorwärtsnavigation zu erhalten
Warum Swup mit Bricks Builder verwenden?
Bricks Builder erzeugt standardmäßige WordPress-Seiten mit vollständigen HTML-Dokumenten. Ohne Swup führt jede Seitennavigation zu Folgendem:
- Ein vollständiger Browser-Reload wird ausgelöst
- HTML, CSS und JavaScript werden komplett neu eingelesen
- Alle Skripte und Komponenten werden neu initialisiert
- Zwischen Seiten entsteht ein sichtbares „Flackern“
Mit Swup erhält Ihre mit Bricks erstellte Website:
- Verbesserte wahrgenommene Performance – Seiten wirken, als würden sie sofort laden
- Sanfte visuelle Übergänge – Professionelle Fade-, Slide- oder Scale-Effekte
- Reduzierte Serverlast – Zwischengespeicherte Seiten werden aus dem Speicher geladen
- Bessere Benutzererfahrung – App-ähnliches Navigationsgefühl
Wie das Skript funktioniert
Die Datei swup-bricks-integration.js ist eine eigenständige Integration, die:
- Swup und Plugins von einem CDN lädt – Keine npm-Installation erforderlich
- Übergangs-CSS automatisch einfügt – Styles werden dem Dokument-
headhinzugefügt - Alle Optionen zentral konfiguriert – Das Objekt
SWUP_CONFIGbündelt die Einstellungen - WordPress-/Bricks-spezifische Besonderheiten behandelt – Schließt Admin-Links aus, berücksichtigt häufige Plugins
- Hooks zur Reinitialisierung bereitstellt – Die Funktion
reinitializeScriptsbehandelt Skripte von Drittanbietern
Installationsanleitung
Methode 1: Bricks-Einstellungen (empfohlen)
1. Auf Bricks-Einstellungen zugreifen
2. Das Skript hinzufügen
Suchen Sie den Bereich „Body (footer) scripts“
Fügen Sie den gesamten Inhalt von swup-bricks-integration.js ein, umschlossen von <script>-Tags:
3. Einstellungen speichern
Klicken Sie unten auf „Save Settings“
Methode 2: Code-Element im Template
1. Ihr Header-/Footer-Template bearbeiten
Öffnen Sie den Bricks Builder für Ihr Header- oder Footer-Template
Fügen Sie am Ende des Templates ein „Code“-Element hinzu
2. Das Code-Element konfigurieren
Setzen Sie das Rendering auf „Execute Code“
Fügen Sie das Skript mit <script>-Tags ein
3. Speichern und veröffentlichen
Speichern Sie das Template und veröffentlichen Sie die Änderungen
Methode 3: Child Theme (fortgeschritten)
1. functions.php erstellen oder bearbeiten
2. Die Skriptdatei einfügen
<script>
// Fügen Sie hier den gesamten Skriptinhalt ein
</script>
function enqueue_swup_integration() {
wp_enqueue_script(
'swup-bricks',
get_stylesheet_directory_uri() . '/js/swup-bricks-integration.js',
array(),
'1.0.0',
true // Im Footer laden
);
}
add_action('wp_enqueue_scripts', 'enqueue_swup_integration');
Erstellen Sie einen Ordner js in Ihrem Child Theme
Speichern Sie das Skript als swup-bricks-integration.js
Konfigurationsleitfaden
Wesentliche Einstellungen
Inhalts-Container
Die wichtigste Einstellung ist containers. Sie definiert, welche Bereiche der Seite Swup ersetzen soll.
Technische Erklärung:
Swup sucht auf der aktuellen und auf der geladenen Seite nach Elementen, die diesen Selektoren entsprechen, und ersetzt dann das innerHTML des aktuellen Elements durch den neuen Inhalt. Der Standardwert #brx-content ist der Haupt-Content-Wrapper von Bricks.
Wichtige Anforderungen:
- Der Container muss auf jeder Seite Ihrer Website vorhanden sein
- Der Selektor darf pro Seite genau ein Element treffen
- Der Container sollte sich innerhalb von
<body>befinden
Häufige Bricks-Container:
#brx-content– Hauptinhaltsbereich (Standard)#brx-header– Falls sich Ihr Header zwischen Seiten ändert.custom-sidebar– Wenn Sie eine dynamische Sidebar haben
Animations-Selektor
Technische Erklärung:
Dieser CSS-Attributselektor trifft auf jedes Element zu, dessen Klasse transition- enthält. Swup überwacht diese Elemente auf transitionend- und animationend-Events, um zu erkennen, wann Animationen abgeschlossen sind.
Verwendung:
- Fügen Sie
transition-fade,transition-slideodertransition-scaleIhrem Content-Wrapper in Bricks hinzu - Das eingefügte CSS übernimmt die eigentlichen Animationen
- Swup wartet, bis diese Elemente fertig animiert sind, bevor neuer Inhalt angezeigt wird
containers: ['#brx-content'],
animationSelector: '[class*="transition-"]',
Animationseinstellungen
Native View Transitions
Technische Erklärung:
Die View Transitions API ist eine neue Browser-Funktion (Chrome 111+, Edge 111+), die hardwarebeschleunigte Übergänge zwischen Seitenzuständen ermöglicht. Wenn aktiviert:
- Der Browser erstellt eine Momentaufnahme der aktuellen Seite
- Neuer Inhalt wird außerhalb des sichtbaren Bereichs gerendert
- Der Browser animiert GPU-beschleunigt zwischen den Zuständen
Wann aktivieren:
Nur wenn Ihre Zielgruppe überwiegend Chrome/Edge nutzt und Sie flüssigere Animationen möchten.
Animationsbereich
Optionen:
'html'– Animationsklassen (is-changing,is-animatingusw.) werden auf das<html>-Element angewendet'containers'– Klassen werden direkt auf die Container-Elemente angewendet
Empfehlung:
Bei 'html' bleiben, da CSS-Selektoren wie html.is-animating .transition-fade einfacher zu verwenden sind.
Cache-Konfiguration
Cache-TTL (Time-To-Live)
Technische Erklärung:
Swup speichert geladenes Seiten-HTML in einem JavaScript-Map-Objekt im Speicher. Die TTL bestimmt, wie lange zwischengespeicherte Seiten gültig bleiben. Nach Ablauf lädt Swup eine frische Version.
Überlegungen:
- Websites mit dynamischen Inhalten: Niedrige TTL (1–5 Minuten) für aktuellere Inhalte
- Websites mit statischen Inhalten: Höhere TTL (30–60 Minuten) für bessere Performance
- Echtzeit-Inhalte: Auf
0setzen, um Caching vollständig zu deaktivieren
Maximale Cache-Einträge
Technische Erklärung:
Begrenzt die Speichernutzung, indem die ältesten Cache-Einträge entfernt werden, sobald das Limit überschritten wird. Dies wird über den Hook cache:set umgesetzt.
nativeViewTransitions: false,
animationScope: 'html',
cacheTTL: 5 * 60 * 1000, // 5 Minuten in Millisekunden
maxCacheEntries: 20,
Preload-Einstellungen
Wie Preloading funktioniert:
- Hover-Preload: Wenn der Benutzer über einen Link hovert, lädt Swup diese Seite sofort
- Sichtbare Links: Die Intersection Observer API erkennt Links, die in den Viewport kommen
- Throttle: Begrenzung gleichzeitiger Requests, um den Server nicht zu überlasten
Technischer Vorteil:
Bis der Benutzer klickt, liegt die Seite bereits im Cache und die Navigation wirkt sofort.
WordPress-spezifische Einstellungen
Ignore-Selektoren
Technische Erklärung:
Die Funktion buildIgnoreVisit erstellt einen Callback, der jeden Link-Klick gegen diese Selektoren prüft. Passende Links verwenden normale Browser-Navigation statt Swup-Übergänge.
Warum diese ignorieren:
- Admin-Bar: WordPress-Admin-Links sollten immer vollständige Seitenloads auslösen
- WooCommerce Cart/Checkout: Diese Seiten brauchen oft vollständige Reloads für Session-Management
- Login-Seiten: Authentifizierung erfordert typischerweise klassische Formularübermittlung
preloadEnabled: true,
preloadOnHover: true,
preloadVisibleLinks: false,
preloadThrottle: 3,
ignoreSelectors: [
'[data-no-swup]',
'#wpadminbar a',
'a[href*="wp-admin"]',
'a[href*="wp-login"]',
'a[href*="/cart"]',
// ... weitere
],
Übergänge zu Ihrer Bricks-Seite hinzufügen
Schritt 1: Übergangsklasse zum Inhalt hinzufügen
- Öffnen Sie den Bricks Builder in Ihrem Haupttemplate (meist „Single“ oder „Archive“)
- Wählen Sie Ihren Haupt-Content-Wrapper
- Gehen Sie zu Style → CSS Classes
- Fügen Sie die Klasse
transition-fadehinzu
Alternativ können Sie den Standard-Bricks-Content-Wrapper direkt in Ihrem CSS ansprechen:
#brx-content {
/* Dies wird das animierte Element */
}
Und den animationSelector im Skript anpassen:
animationSelector: '#brx-content',
Schritt 2: Übergangsstile anpassen
Das Skript fügt Standard-Styles über die Konstante TRANSITION_CSS ein. Sie können diese in Bricks unter „Custom CSS“ überschreiben:
/* Langsamerer Fade-Übergang */
html .is-changing .transition-fade {
transition: opacity 0.5s ease-in-out;
}
/* Benutzerdefinierte Slide-Richtung */
html .is-leaving .transition-slide {
transform: translateX(-100%);
}
html .is-rendering .transition-slide {
transform: translateX(100%);
}
Schritt 3: Übergänge testen
- Öffnen Sie Ihre Website (nicht im Bricks-Editor)
- Öffnen Sie die Browser-DevTools → Konsole
- Aktivieren Sie den Debug-Modus im Skript:
debug: true,
- Klicken Sie auf Links und beobachten Sie die Konsolenmeldungen zum Übergangsablauf
Umgang mit Drittanbieter-Skripten
Das Reinitialisierungsproblem
Technischer Hintergrund:
Wenn Swup Inhalte ersetzt, wird neues HTML eingefügt, aber JavaScript nicht erneut ausgeführt. Skripte, die:
- das DOM nach Elementen durchsuchen
- Event-Listener anhängen
- Komponenten initialisieren (Slider, Lightboxes usw.)
... funktionieren auf dem neuen Inhalt nicht mehr, da sie nur beim initialen Laden ausgeführt wurden.
Lösung: Die Funktion reinitializeScripts
Die Funktion reinitializeScripts wird nach jedem Seitenübergang aufgerufen:
function reinitializeScripts() {
// Bricks Frontend-JS
if (typeof bricksInit === 'function') {
bricksInit();
}
// Benutzerdefiniertes Event für Ihre Skripte
document.dispatchEvent(new CustomEvent('swup:contentReplaced', {
detail: { swup: window.swup }
}));
// Reinitialisierungen von Drittanbietern...
}
Eigene Reinitialisierungen hinzufügen
Methode 1: Funktion direkt erweitern
function reinitializeScripts() {
// ... bestehender Code ...
// Ihre benutzerdefinierte Initialisierung
if (typeof MyCustomSlider !== 'undefined') {
MyCustomSlider.init();
}
}
Methode 2: Auf ein benutzerdefiniertes Event hören
document.addEventListener('swup:contentReplaced', function(event) {
// Ihre Skripte hier erneut initialisieren
initializeMyComponents();
});
Methode 3: Den onPageView-Callback verwenden
Im Objekt SWUP_CONFIG:
onPageView: function(visit) {
// Wird nach jedem Seitenübergang aufgerufen
console.log('Navigiert zu:', visit.to.url);
// Komponenten neu initialisieren
initializeLightboxes();
initializeSliders();
}
Analytics-Integration
Google Analytics 4
Das Skript enthält GA4-Tracking in onPageView:
if (typeof gtag !== 'undefined') {
gtag('config', 'GA_MEASUREMENT_ID', {
page_path: visit.to.url
});
}
Wichtig:
Ersetzen Sie GA_MEASUREMENT_ID durch Ihre echte Measurement-ID (z. B. G-XXXXXXXXXX).
Matomo/Piwik
Ebenfalls enthalten:
if (typeof _paq !== 'undefined') {
_paq.push(['setCustomUrl', visit.to.url]);
_paq.push(['trackPageView']);
}
Weitere Analytics-Plattformen
Fügen Sie ähnlichen Code in onPageView ein:
// Facebook Pixel
if (typeof fbq !== 'undefined') {
fbq('track', 'PageView');
}
// Plausible
if (typeof plausible !== 'undefined') {
plausible('pageview');
}
Fehlerbehebung
Problem: Harter Seitenreload statt Übergang
Ursachen:
- Container nicht gefunden: Stellen Sie sicher, dass
#brx-contentauf allen Seiten existiert - Link wird ignoriert: Prüfen Sie, ob der Link zu
ignoreSelectorspasst - Externer Link: Swup verarbeitet nur Links derselben Origin
Debug-Schritte:
debug: trueaktivieren- Konsole auf Swup-Logs prüfen
- Prüfen, ob der Container existiert:
document.querySelector('#brx-content')
Problem: Animationen funktionieren nicht
Ursachen:
- Fehlende Übergangsklasse:
transition-fadezum Content-Wrapper hinzufügen - CSS nicht eingefügt: Prüfen, ob das Style-Element
#swup-transitionsim<head>existiert - Animationsselektor stimmt nicht: Sicherstellen, dass Ihre Klasse zum Muster von
animationSelectorpasst
Debug-Schritte:
- Das
<html>-Element während der Navigation auf Klassen wieis-changing,is-animatingprüfen - Die berechneten Styles der Übergangselemente kontrollieren
Problem: Skripte laufen nach Navigation nicht
Ursache:
JavaScript wird nur beim ersten Seitenaufruf ausgeführt.
Lösung:
Reinitialisierungscode in reinitializeScripts ergänzen oder auf das Event swup:contentReplaced hören.
Problem: Formulare werden nicht korrekt abgesendet
Ursache:
Swup verarbeitet standardmäßig keine Formularübermittlungen.
Lösungen:
data-no-swupzum Submit-Link/Button hinzufügen- Das Swup Forms Plugin installieren (zu den CDN-URLs hinzufügen und aktivieren)
Problem: Scroll-Position bei fixiertem Header
Lösung: scrollOffset anpassen:
scrollOffset: 80, // Höhe Ihres fixierten Headers in Pixeln
Performance-Optimierung
Empfohlene Produktionseinstellungen
const SWUP_CONFIG = {
// Debug-Logging deaktivieren
debug: false,
// Caching optimieren
cacheEnabled: true,
maxCacheEntries: 30,
cacheTTL: 10 * 60 * 1000, // 10 Minuten
// Preloading aktivieren
preloadEnabled: true,
preloadOnHover: true,
preloadThrottle: 5,
// Nicht benötigte Plugins deaktivieren
scriptsEnabled: false, // Nur aktivieren, wenn unbedingt nötig
progressBarEnabled: true,
// Native Transitions für unterstützte Browser aktivieren
nativeViewTransitions: true,
};
Auswirkungen messen
Verwenden Sie die Browser-DevTools zum Vergleich von:
- Network Waterfall – Voller Seitenload vs. Swup-Navigation
- Performance-Timeline – Zeit bis zur Interaktivität messen
- Core Web Vitals – LCP, FID, CLS vor und nach der Implementierung beobachten
Erweiterte Anpassung
Benutzerdefinierte Animation pro Link
Verwenden Sie das Attribut data-swup-animation:
<a href="/gallery" data-swup-animation="slide">Galerie ansehen</a>
Dies fügt während des Übergangs die Klasse to-slide zu <html> hinzu. Erstellen Sie dazu passendes CSS:
html.is-changing.to-slide .transition-fade {
transition: transform 0.4s ease;
}
html.is-leaving.to-slide .transition-fade {
transform: translateX(-100%);
}
html.is-rendering.to-slide .transition-fade {
transform: translateX(100%);
}
Programmatische Navigation
Greifen Sie global auf die Swup-Instanz zu:
// Zu einer Seite navigieren
window.swup.navigate('/about');
// Ohne Animation navigieren
window.swup.navigate('/contact', { animate: false });
// Cache leeren
window.swup.cache.clear();
Bestimmte Seiten ausschließen
Seiten dynamisch anhand der URL ignorieren:
ignoreVisit: function(url, { el } = {}) {
// Checkout-Seiten ignorieren
if (url.includes('/checkout/')) return true;
// Bestimmte Seite ignorieren
if (url === '/special-page/') return true;
// Element gegen Ignore-Selektoren prüfen (Standardverhalten)
const { ignoreSelectors } = SWUP_CONFIG;
if (el) {
for (const selector of ignoreSelectors) {
if (el.closest(selector)) return true;
}
}
return false;
}
Dieser Leitfaden deckt die vollständige Einrichtung und Anpassung der SwupJS-Integration für Bricks Builder ab. Bei weiteren Fragen oder Problemen beziehen Sie sich auf die offizielle Swup-Dokumentation oder prüfen Sie die ausführlichen Kommentare in der Datei swup-bricks-integration.js.