Wordpress Plugin | Anwender Handbuch
Das copilot Promotion Plugin verbindet deine WordPress-Website mit der copilot Veranstaltungssoftware. Es zeigt automatisch alle deine Events auf deiner Website an und hält sie immer aktuell.
Das co*pilot Promotion Plugin verbindet deine WordPress-Website mit der co*pilot Veranstaltungssoftware. Es zeigt automatisch alle deine Events auf deiner Website an und hält sie immer aktuell.
Wir können leider keinen Support für das Plugin übernehmen.
Version: 1.0.32
Stand: 23. März 2026
Download & Voraussetzungen
Das Plugin kann hier heruntergeladen werden:
WordPress Promotions Plugin herunterladen
Systemvoraussetzungen
- WordPress 5.0 oder höher
- PHP 8.0 oder höher (empfohlen: PHP 8.3)
- Zugang zur co*pilot GraphQL API (API-URL + Token)
PHP-Version beim Hoster setzen: Bei einigen Hostern lässt sich die PHP-Version über folgenden Eintrag in der .htaccess setzen:
FcgidWrapper "/home/httpd/cgi-bin/php83-fcgi-starter.fcgi" .php
Was kann das Plugin?
- Automatischer Import von Events aus co*pilot
- Verschiedene Darstellungen: Event-Listen, Banner, Einzelansicht
- Intelligente Filter: Nach Künstler, Ort, Stadt, Datum und mehr filtern
- Responsive Design: Sieht auf allen Geräten gut aus
- Anpassbare Templates: Gestalte die Darstellung nach deinen Wünschen
- Automatische Updates: Neue Funktionen mit einem Klick installieren
- SEO: Strukturierte Event-Daten (schema.org) für Suchmaschinen
Installation & Einrichtung
Schritt 1: Plugin installieren
- Lade die Plugin-ZIP-Datei herunter
- Gehe in WordPress zu Plugins → Installieren
- Klicke auf Plugin hochladen
- Wähle die ZIP-Datei aus und klicke Jetzt installieren
- Klicke nach der Installation auf Plugin aktivieren
Schritt 2: WordPress Konfiguration
Damit der konfigurierte Link auf die Detailseite funktioniert, muss unter Einstellungen → Permalinks (/wp-admin/options-permalink.php) unter Permalink-Struktur “Beitragsname” gewählt werden.
Schritt 3: API-Zugangsdaten einrichten
Nach der Aktivierung musst du die Verbindung zu co*pilot einrichten:
- Gehe zu co*pilot → Einstellungen im WordPress-Menü
- Trage folgende Daten ein:
- API URL: Die GraphQL-Endpunkt-URL (z.B.
https://api.copilot.cloud/graphql) - API Token: Dein Zugangstoken
- Operation Name: Name der GraphQL-Operation (meist
PromotionQuery)
- API URL: Die GraphQL-Endpunkt-URL (z.B.
Hinweis: Diese Daten erhältst du von deinem co*pilot Administrator. Der Token kann in der Zugangsverwaltung angelegt werden.
Das Plugin verarbeitet die Daten der co*pilot Promotions, welche über die GraphQL Schnittstelle abgerufen werden. Ein Beispiel GraphQL Schema befindet sich im root des Plugins (./promotion.graphql).
Schritt 4: Cronjob einrichten
Da die co*pilot API durch ein Rate-Limit beschränkt ist, speichert das Plugin die Daten des API Calls in der WordPress Datenbank. Das regelmäßige Aktualisieren der Events muss über einen Cronjob erfolgen.
Option A: Server-Cronjob (empfohlen)
# Stündliche Aktualisierung
0 * * * * /pfad/zum/script/copilot_cronjob.sh
Ein Beispiel-Script und weitere Anweisungen findest du im Source Code des Plugins.
Option B: WordPress Pseudo-Cronjob
Besteht keine Möglichkeit eines server-seitigen Cronjobs (z.B. Shared Hosting), kannst du alternativ den WordPress “pseudo” Cronjob aktivieren:
- Gehe zu co*pilot → Einstellungen
- Setze Cronjob auf “WordPress”
- Speichern
Wichtig: Der WordPress-Cronjob läuft nur, wenn deine Website besucht wird!
Schritt 5: Erste Synchronisation
- Gehe zu co*pilot → Einstellungen
- Klicke auf Jetzt synchronisieren
- Warte, bis der Import abgeschlossen ist
- Gehe zu co*pilot → Events um die importierten Events zu sehen
Plugin verwenden
Es gibt zwei Möglichkeiten, Events auf einer Seite einzubinden:
Methode 1: Gutenberg-Block (empfohlen)
- Erstelle oder bearbeite eine Seite
- Klicke auf + um einen neuen Block hinzuzufügen
- Suche nach “co*pilot”
- Wähle den co*pilot Promotion Block
- Block-Einstellungen (in der rechten Sidebar):
- Template: Wähle die Darstellung
list- Event-Liste mit Filtern (Standard)banner- Banner für einzelnes Event- Leer - Einzelnes Event in Detailansicht
- Pagination: Anzahl der Events pro Seite (Standard: 10)
- Slug: Event-Slug für Einzelansicht oder Banner
- Filter-Anzeige: Wähle, welche Filter angezeigt werden sollen
- Künstler vorauswählen: Filtere die Liste automatisch nach einem Künstler
- Template: Wähle die Darstellung
Methode 2: Shortcode
Alternativ kannst du auch einen Shortcode verwenden. Füge einen Shortcode-Block hinzu und gib ein:
[copilot_promotion]
⚠️ WICHTIG: Alle Shortcode-Parameter müssen in lowercase geschrieben werden!
Alle Shortcode-Parameter
| Parameter | Werte | Default | Beschreibung |
|---|---|---|---|
template | list, banner, leer | list | Darstellungsart |
pagination | Zahl | 10 | Events pro Seite |
slug | Text | - | Event-Slug |
isarchive | true, false | false | Vergangene Events |
showfiltertitle | true, false | true | Textsuche anzeigen |
showfilterdate | true, false | true | Datumsfilter anzeigen |
showfilterartist | true, false | true | Künstler-Dropdown |
showfiltervenue | true, false | true | Venue-Dropdown |
showfiltercity | true, false | true | Stadt-Dropdown |
showfiltermonth | true, false | true | Monats-Dropdown |
preselectedartist | Text | - | Vordefinierter Künstler |
usefacedetection | true, false | false | Gesichtserkennung |
Shortcode-Beispiele
Event-Liste mit mehr Events pro Seite:
[copilot_promotion pagination="25"]
Nur wichtige Filter anzeigen:
[copilot_promotion showfiltervenue="false" showfiltermonth="false"]
Künstler-Seite:
[copilot_promotion preselectedartist="Max Mustermann" showfilterartist="false"]
Event-Banner:
[copilot_promotion template="banner" slug="konzert-max-mustermann-2025"]
Archiv-Seite:
[copilot_promotion isarchive="true" pagination="50"]
Komplett ohne Filter:
[copilot_promotion showfiltertitle="false" showfilterdate="false" showfilterartist="false" showfiltervenue="false" showfiltercity="false" showfiltermonth="false"]
Verschiedene Darstellungen
1. Event-Liste (Template: list)
Die Standard-Darstellung zeigt eine Liste aller kommenden Events mit Filtern, Pagination und responsivem Grid-Layout.
[copilot_promotion template="list" pagination="10"]
2. Event-Banner (Template: banner)
Zeigt ein einzelnes Event als großes Banner mit Hintergrundbild. Optional mit Gesichtserkennung.
[copilot_promotion template="banner" slug="event-slug"]
3. Einzelnes Event (Detailansicht)
Zeigt alle Details zu einem Event (Bilder, Ticketlinks, Venue, Line-Up).
[copilot_promotion slug="event-slug"]
4. Archiv (vergangene Events)
[copilot_promotion isarchive="true"]
Filter-System
Das Plugin bietet verschiedene Filter, um Events zu finden. Alle Filter sind serverseitig und damit sehr schnell.
Verfügbare Filter
- Textsuche (Titel/Künstler) - Freie Suche nach Event-Titel oder Künstlername
- Datumsfilter - Zeige nur Events ab einem bestimmten Datum
- Künstler-Dropdown - Filtere nach einem bestimmten Künstler (zeigt alle Künstler aus dem LineUp)
- Venue-Dropdown - Filtere nach einem bestimmten Veranstaltungsort
- Stadt-Dropdown - Filtere nach einer bestimmten Stadt
- Monats-Dropdown - Zeige nur Events aus einem bestimmten Monat
Filter kombinieren
Du kannst mehrere Filter gleichzeitig verwenden. Alle aktiven Filter werden in der URL gespeichert und können geteilt oder als Lesezeichen gespeichert werden:
/veranstaltungen/?filter_artist=Max+Mustermann&filter_month=2025-12
Filter zurücksetzen
Sobald du Filter gesetzt hast, erscheint ein Reset-Button (⟲). Bei vordefinierten Filtern wird nur auf die Vorauswahl zurückgesetzt.
Vordefinierter Künstler-Filter
Du kannst eine Seite erstellen, die automatisch nach einem Künstler gefiltert ist. Wähle dazu im Block den Künstler unter “Künstler vorauswählen” oder verwende den Shortcode:
[copilot_promotion preselectedartist="Max Mustermann" showfilterartist="false"]
Filter ein-/ausblenden
In den Block-Einstellungen kannst du unter “Filter-Anzeige” jeden Filter einzeln ein- oder ausschalten.
Templates
Das Plugin verwendet Handlebars-Templates für die Darstellung. Auf Basis dieser Vorlagen und den Event-Daten wird die Ausgabe generiert. Daten werden mittels Platzhalter übergeben, die in {{ }} eingeschlossen sind. In der Ausgabe steht Bootstrap 5 zur Verfügung.
Template-Editor
- Gehe zu co*pilot → Templates im WordPress-Menü
- Wähle ein Template zum Bearbeiten:
- events.html - Event-Liste (Daten sind ein Array, iteriere mit
{{#each .}}...{{/each}}) - singleEvent.html - Einzelne Event-Ansicht (Daten sind ein einzelnes Event-Objekt)
- banner.html - Event-Banner (Daten sind ein einzelnes Event-Objekt)
- events.html - Event-Liste (Daten sind ein Array, iteriere mit
Template-Priorität: Die Templates werden in folgender Reihenfolge gesucht:
- In der Datenbank gespeichert (über Template-Editor)
src/custom/templates/[name].html(Custom Templates, überleben Updates)src/templates/[name].html(Standard-Templates)
Template zurücksetzen: Gehe zu co*pilot → Templates und klicke auf Template zurücksetzen.
Verfügbare Event-Daten
Folgende Daten stehen in den Templates pro Event zur Verfügung:
{
slug: string // URL-Slug des Events
title: string // Titel
subtitle?: string // Untertitel
start: string // Startdatum/-zeit (ISO Date)
end?: string // Enddatum/-zeit
doors?: string // Einlass-Zeit
description?: string // Beschreibung (Markdown/HTML)
category?: string // Kategorie (z.B. "Live", "Party")
soldOut: boolean // Ob ausverkauft
status?: string // "scheduled", "postponed", "rescheduled", "cancelled"
presaleLink?: string // Link zum Ticketkauf
presaleInfo?: string // Vorverkaufs-Info (Markdown/HTML)
boxOfficeInfo?: string // Abendkassen-Info (Markdown/HTML)
artist?: { // Erster Künstler
name: string
program?: string
description?: string
}
lineUps?: [{ // Alle Künstler im LineUp
name: string
program?: string
description?: string
origin?: string
}]
room?: { // Veranstaltungsraum
name: string
location: {
name: string // Venue-Name
address: {
street: string
zip: string
city: string
}
}
}
wordpressImages?: { // WordPress-Bilder (Ausgabe über wpImage Helper)
eventImage?: ImageData
eventBanner?: ImageData
artistImage?: ImageData
}
organizer?: { name, homepage?, logo? }
sponsor?: { name, homepage?, logo? }
youtube?: string
instagram?: string
facebook?: string
soundcloud?: string
rawEvent?: any // Rohdaten (für Spezialfelder)
}
Im rawEvent stehen alle ungeparsten Daten des API-Requests zur Verfügung. Im singleEvent-Template gibt es zusätzlich navigation.prev und navigation.next für die Event-Navigation.
Tipp: Daten in der Konsole anzeigen
Über den Handlebars Helper log kannst du dir ein Datenobjekt in der JavaScript-Konsole anzeigen lassen:
{{ log this.rawEvent }}
Handlebars-Helper
Zu den Standard Handlebars Helpern (if, each, unless, log) wurden folgende zusätzliche Helper implementiert:
| Name | Parameter | Beispiel | Bemerkung |
| formatDate | date: Date, pattern: string | {{formatDate start "P"}} | "P" → 01.02.2025, "p" → 19:00, "E P" → Sa. 01.02.2025, "EEEE" → Samstag, "HH:mm" → 19:00Siehe date-fns Format |
| isPast | date: Date (Block-Helper) | {{#isPast start}}Vergangen{{else}}Kommend{{/isPast}} | Prüft ob ein Datum in der Vergangenheit liegt. Funktioniert mit start, end, doors. |
| ifEquals | arg1: any, arg2: any (Block-Helper) | {{#ifEquals status "cancelled"}}Abgesagt{{/ifEquals}} | Vergleicht zwei Werte |
| md2Html | mdValue?: string | {{md2Html description}} | Wandelt Markdown in HTML um |
| wpImage | imageData: ImageData, imageSizeType: string | {{wpImage wordpressImages.eventImage "MEDIUM_LARGE"}} | Gibt ein <img>-Tag aus. Größen: "THUMBNAIL", "MEDIUM", "MEDIUM_LARGE", "LARGE", "FULL"Siehe auch: Bilder |
| formatEuro | cents: number | {{formatEuro 1990}} | Wandelt Cent-Beträge in Euro: 1990 → 19,90 € |
| jsonStringify | data: any | {{jsonStringify this.rawEvent}} | Gibt JSON-Daten als formatierten String aus (zum Debuggen) |
| youtubeIFrameFromUrl | url: string | {{youtubeIFrameFromUrl youtube}} | Extrahiert die Video-ID und zeigt ein YouTube-iFrame an |
| spotifyPlaylist | url: string | {{spotifyPlaylist this.href}} | Extrahiert die Playlist-ID und zeigt einen Spotify-Embed an |
| spotifyTrack | url: string | {{spotifyTrack this.href}} | Extrahiert die Track-ID und zeigt einen Spotify-Embed an |
| eventNavigationLink | event, direction, format, arrowType?, baseUrl? | {{eventNavigationLink navigation.next "next" "{start}: {title}" "double"}} | Navigation zum vorherigen/nächsten Event. Platzhalter: {title}, {artistName}, {venueName}, {venueCity}, {start}. Pfeile: "standard" (← →), "single" (< >), "double" (« ») |
Custom Parser (für Entwickler)
Soll ein alternatives co*pilot Promotions Schema implementiert werden, kann im Verzeichnis src/custom/eventParser.ts ein Custom Parser angelegt werden:
import { EventFromDB, ParsedRawEvent } from "../parser/promotionApiTypes";
export function parseEvent(event: EventFromDB) {
try {
const e: ParsedRawEvent = JSON.parse(event.rawEvent);
const parsedEvent: any = {
slug: event.slug,
title: e.title?.value?.label,
// ... weitere Felder
};
return parsedEvent;
} catch (e) {
console.error("Failed to parse event:", e);
return null;
}
}
Templates mit KI erstellen
Im Plugin-Verzeichnis befindet sich die Datei TEMPLATE-KI-PROMPT.md mit einem fertig formulierten Prompt. Damit können deine Kunden sich mithilfe von KI-Tools (z.B. ChatGPT, Claude) eigene Templates generieren lassen. Einfach den Prompt kopieren und am Ende die gewünschte Beschreibung einfügen.
Bilder & Gesichtserkennung
Beim Import und der Aktualisierung speichert das Plugin alle Bilder in der WordPress Mediathek. Falls du Änderungen an einem Bild vornimmst, beachte, dass das Bild beim Aktualisieren der Events wieder überschrieben wird, sollte sich die URL geändert haben.
Folgende Bilder stehen im Event-Objekt zur Verfügung:
- Event-Bild:
wordpressImages.eventImage - Banner:
wordpressImages.eventBanner - Künstler-Bild:
wordpressImages.artistImage(Bild des 1. Künstlers)
Bilder werden über den wpImage Helper ausgegeben:
// Mittlere Auflösung des Event-Bildes
{{wpImage wordpressImages.eventImage "MEDIUM"}}
// Hohe Auflösung des Künstler-Bildes
{{wpImage wordpressImages.artistImage "LARGE"}}
// Verfügbare Größen: THUMBNAIL, MEDIUM, MEDIUM_LARGE, LARGE, FULL
Gesichtserkennung
Für Bannerbilder kann über die Google Vision API eine Gesichtserkennung erfolgen. Hierfür musst du:
- Einen Google API Key anlegen (1000 Abfragen pro Monat kostenlos)
- Den Key in den Plugin-Einstellungen eintragen
- Die Gesichtserkennung auf der Seite einschalten, wo du das Banner einbindest
SEO
Auf Event-Detailseiten werden automatisch strukturierte Eventdaten nach schema.org/Event ausgegeben. Das verbessert die Darstellung in Suchmaschinen (Rich Results).
Die Inhalte können hier geprüft werden: Google Rich Results Test
Updates
Das Plugin kann in den Settings aktualisiert werden. Wenn ein Update verfügbar ist, siehst du eine Benachrichtigung in der Plugin-Liste und in den Einstellungen.
Update installieren
Automatisch (empfohlen):
- Gehe zu co*pilot → Einstellungen
- Klicke auf “Update installieren”
- Das Plugin wird automatisch neu aktiviert
Manuell: Altes Plugin deaktivieren → löschen → neue Version installieren → aktivieren.
Was passiert beim Update?
- ✅ Einstellungen bleiben erhalten
- ✅ Angepasste Templates bleiben erhalten (im Template-Editor)
- ✅ Custom Templates bleiben erhalten (im custom/ Ordner)
- ✅ Event-Daten bleiben erhalten
- ⚠️ Änderungen in Plugin-Dateien gehen verloren
Häufig gestellte Fragen (FAQ)
Allgemein
Q: Wie oft werden die Events aktualisiert?
A: Das hängt von deinem Cronjob ab. Empfohlen wird stündlich. Du kannst auch manuell synchronisieren unter co*pilot → Einstellungen.
Q: Kann ich mehrere Event-Listen auf einer Seite haben?
A: Ja! Du kannst beliebig viele Blöcke oder Shortcodes auf einer Seite verwenden.
Q: Werden auch vergangene Events gespeichert?
A: Ja, alle Events werden gespeichert. Mit dem Archiv-Modus kannst du auch vergangene Events anzeigen.
Technisch
Q: Meine Events werden nicht angezeigt. Was tun?
A: Prüfe: 1) Sind die API-Zugangsdaten korrekt? 2) Wurde die erste Synchronisation durchgeführt? 3) Gibt es Events unter co*pilot → Events? 4) Sind die Filter zu restriktiv?
Q: Der Cronjob funktioniert nicht.
A: Prüfe die Cronjob-Konfiguration, teste die manuelle Synchronisation, oder verwende alternativ den WordPress Pseudo-Cronjob.
Q: Können Sonderzeichen in Künstlernamen Probleme machen?
A: Nein, das Plugin behandelt Sonderzeichen korrekt (z.B. “AC/DC”, “Frank Turner & The Sleeping Souls”).
Filter & Suche
Q: Warum sehe ich bestimmte Künstler/Venues nicht im Dropdown?
A: Die Dropdowns zeigen nur Künstler/Venues, die Events in der Zukunft haben.
Q: Was ist der Unterschied zwischen Textsuche und Künstler-Dropdown?
A: Textsuche: Freie Suche in Titel UND Künstlername. Künstler-Dropdown: Exakte Filterung nach einem bestimmten Künstler.
Templates & Design
Q: Werden meine Template-Änderungen bei Updates überschrieben?
A: Nein! Templates im Template-Editor werden in der Datenbank gespeichert und bleiben erhalten.
Q: Kann ich das Design anpassen?
A: Ja! Bearbeite die Templates unter co*pilot → Templates oder erstelle eigene CSS-Regeln in deinem Theme.
Weitere Informationen
- co*pilot Allgemein: https://ov2b.de/
- GraphQL API: /docs/graphql/
ov2b GmbH
Die Organisations-Software für Locations, Veranstalter:innen und Agenturen zur Vernetzung der Kulturbranche.
Es wird kein offizieller Support angeboten. Diese Dokumentation soll bei der Verwendung des Plugins helfen.
*Version: 1.0.32
Letzte Aktualisierung: 23. März 2026*