Tickets verkopen in WordPress (zonder plugin)

MijnEvent heeft geen WordPress-plugin, en die heb je ook niet nodig. Je haalt de embedcode op in beheer, plakt hem in een blok Aangepaste HTML, en de ticketverkoop staat op je eigen pagina. Met de valkuilen die je in WordPress kunt tegenkomen.

Foto: Christopher Gower / Unsplash

Draait je site op WordPress? Dan is de vraag die we het vaakst krijgen: "is er een plugin?" Het eerlijke antwoord is nee. Er is geen MijnEvent-plugin voor WordPress, en er komt er voorlopig ook geen — omdat je hem niet nodig hebt. Wat er wél is: een embedcode van twee regels die in elke WordPress-site werkt, en een read-only API voor wie zijn agenda zelf wil bouwen. Dit artikel laat zien hoe je dat precies doet, inclusief de dingen die in WordPress mis kunnen gaan.

Waarom geen plugin?

Een plugin moet je installeren, bijwerken en compatibel houden met je thema, je pagebuilder en de WordPress-versie van volgend jaar. Alles wat een plugin zou doen — de ticketverkoop op je pagina zetten — doet de embedcode ook, zonder dat er iets in je WordPress-installatie hoeft te draaien. Verhuis je ooit naar een ander CMS, dan verhuist diezelfde code mee. Minder onderdelen, minder onderhoud.

Stap 1: de code ophalen in beheer

Ga in je beheer naar Integraties. Kies bij Tickets op je eigen website het event, en je krijgt twee varianten:

De script-embed (aanbevolen). Eén div plus één scriptregel:

<div data-mijnevent-event="zomerfeest-2026"></div>
<script src="https://jouwclub.mijnevent.nl/embed.js" async></script>

Het script plaatst de widget en meet de inhoud continu: wordt de ticketlijst langer of klapt de bestelstap open, dan groeit het kader mee. Geen tweede scrollbalk, geen afgeknipte inhoud. Meerdere events op één pagina? Plaats meerdere div's; één scriptregel onderaan bedient ze allemaal.

De iframe (terugvaloptie). Werkt zonder script, maar je zet de hoogte zelf vast:

<iframe src="https://jouwclub.mijnevent.nl/widget/zomerfeest-2026"
        width="100%" height="640" frameborder="0"
        style="border:none;border-radius:12px;" title="Tickets"></iframe>

Bij een lange ticketlijst of de bestelstap wordt de inhoud dan afgeknipt, of je houdt witruimte over. Gebruik dit alleen als je geen script kwijt kunt.

Stap 2: de code in WordPress plakken

Er zijn drie plekken, afhankelijk van hoe je pagina's bouwt.

Blokeditor (Gutenberg). Klik op +, zoek het blok Aangepaste HTML en plak de code in het tekstvak. Klik op Voorbeeld om te controleren of de widget laadt; in de editor zelf zie je alleen de code. Sla op en bekijk de pagina.

Elementor. Sleep de widget HTML naar de plek waar de tickets moeten komen en plak de code in het veld. De widget verschijnt pas in de voorvertoning of op de live pagina, niet in de bouwmodus.

Klassieke editor. Schakel rechtsboven van Visueel naar Tekst (de HTML-modus) en plak de code daar. Ga daarna niet meer terug naar het tabblad Visueel voordat je opslaat — daarover hieronder meer.

Als de widget niet verschijnt

Vier oorzaken verklaren bijna alles wat er misgaat.

  1. De visuele editor heeft je script gestript. WordPress' visuele modus schoont HTML op en verwijdert <script>-tags, zeker bij accounts zonder volledige HTML-rechten en op multisite-installaties. Werk in het blok Aangepaste HTML of in de HTML-modus, en controleer na het opslaan of de scriptregel er nog staat.
  2. Een beveiligingsplug-in blokkeert het. Firewall- en hardening-plug-ins filteren soms externe scripts, of een Content-Security-Policy staat alleen scripts van je eigen domein toe. Zet in dat geval je MijnEvent-subdomein op de toegestane lijst, of gebruik de iframe-variant — daar zit geen script in.
  3. Een cachingplug-in serveert een oude pagina. Leeg de cache van de plug-in én van je browser na het plakken. Let op: alleen de pagina wordt gecachet. De inhoud van de widget wordt live bij MijnEvent opgehaald, dus prijzen en beschikbaarheid blijven actueel, ook op een agressief gecachete pagina.
  4. De pagina staat op HTTP. Een moderne browser weigert een iframe of script van een https-bron in een http-pagina te mengen. Zet je site op HTTPS — dat wil je sowieso.

Afrekenen gebeurt buiten de widget

Bestellen — ticketsoorten kiezen, aantal, naam en e-mailadres — doet de bezoeker in de widget op jouw pagina. Voor de betaling gaat het buiten het kader: de betaalpagina van Mollie stuurt headers mee die framen verbieden, dus als we hem in de iframe zouden laden, kreeg de bezoeker midden in zijn betaling een lege pagina.

In de praktijk merk je daar dit van: bij de ticketwidget en bij een module-etalage neemt de betaalpagina het hoofdvenster over. Lukt dat niet, bijvoorbeeld door een strenge iframe-sandbox, dan verschijnt er een knop naar de betaalpagina. Na betaling komt de bezoeker op de bevestigingspagina van MijnEvent, met een knop terug naar jouw website, en krijgt hij zijn tickets per e-mail.

Meer dan tickets: module-etalages

Gebruik je meer dan alleen ticketverkoop, dan kun je onder Integraties → Module-embed dezelfde loader gebruiken voor een complete module-etalage. Beschikbaar voor de modules die bij jouw organisatie aanstaan: verhuur & reserveren, webshop, foodtrucks, parkeren & kamperen, lidmaatschappen, cursussen en doneren.

<div data-mijnevent-module="courses"></div>
<script src="https://jouwclub.mijnevent.nl/embed.js" async></script>

Zelfde principe, zelfde automatische hoogte. Zo staat je cursusaanbod of je webshop op een gewone WordPress-pagina, met de bestelling en de administratie in MijnEvent.

Je eigen agenda bouwen: de events-API

Wil je de events in je eigen thema tonen — jouw kaarten, jouw opmaak, jouw filters — dan is er een read-only API op je subdomein:

  • GET https://jouwclub.mijnevent.nl/api/events — de gepubliceerde, komende events met datum, locatie en vanaf-prijs.
  • GET https://jouwclub.mijnevent.nl/api/events/{slug} — één event met zijn ticketsoorten en beschikbaarheid.

Je hebt er geen sleutel voor nodig. Haal het op vanaf je WordPress-server met wp_remote_get() en bewaar het antwoord kort in een transient, zodat je niet bij elke paginaweergave opnieuw ophaalt. Verkopen doe je vervolgens via de widget of via een link naar de eventpagina.

Wees eerlijk over wat deze API is en niet is: hij is alleen lezen. Er zijn geen schrijfoperaties, geen webhooks en geen API-tokens waarmee je vanuit WordPress het beheer aanstuurt. Wil je meer dan lezen, gebruik dan de widget.

Ledenprijzen vanaf je WordPress-server

Heeft je site een ledenlogin, dan kan WordPress per aankoop doorgeven dat iemand lid is. Je server ondertekent met de geheime sleutel uit Integraties een kortlevend HS256-token en zet dat op de div:

// In functions.php, als shortcode: [mijnevent_tickets]
add_shortcode('mijnevent_tickets', function () {
    $token = is_user_logged_in() ? mijnevent_member_token(wp_get_current_user()) : '';

    return sprintf(
        '<div data-mijnevent-event="zomerfeest-2026" data-member-token="%s"></div>'
        .'<script src="https://jouwclub.mijnevent.nl/embed.js" async></script>',
        esc_attr($token)
    );
});

MijnEvent controleert het token bij het tonen én bij het afrekenen, en past dan de ledenprijs of de besloten ticketsoort toe. Is het token leeg, ongeldig of verlopen, dan wordt de bezoeker gewoon als betalende externe behandeld — er breekt niets. De ondertekening zelf, met een werkend PHP-voorbeeld, staat in Ticketverkoop koppelen aan je bestaande website.

Kort samengevat

Geen plugin, geen installatie, geen updates: twee regels code in een blok Aangepaste HTML en je verkoopt tickets vanaf je eigen WordPress-pagina. Werkt het niet meteen, dan is het bijna altijd de visuele editor, een beveiligingsplug-in of de cache. Een breder overzicht van de integratiemogelijkheden staat in Ticketverkoop integreren: embed, API en ledenkoppeling; de rest vind je in de kennisbank.

Veelgestelde vragen

Veelgestelde vragen

Heeft MijnEvent een WordPress-plugin?

Nee. Er is geen plugin en die is ook niet nodig: je plakt een embedcode van twee regels in je pagina. Dat werkt in de blokeditor, in Elementor en in de klassieke editor, ongeacht je thema.

Mijn embedcode verdwijnt zodra ik de pagina opsla. Hoe los ik dat op?

Dan haalt de visuele editor of een beveiligingsplug-in het script eruit. Gebruik het blok Aangepaste HTML (of de HTML-modus), en lukt het dan nog niet, plak dan de iframe-variant uit beheer — daar zit geen script in.

Kan de bezoeker in de widget afrekenen?

Bestellen doet de bezoeker in de widget op jouw pagina. De betaalpagina van Mollie weigert in een iframe te laden en opent daarom buiten de widget: bij de ticketwidget in een nieuw tabblad, bij een module-etalage in het hoofdvenster.
Terug naar blog
MijnEvent

Lege stadspasjes achteraf vullen: zo zet je tegoed op een hele stapel tegelijk

Laat lege pasjes gratis drukken en zet er later zelf tegoed op: een reeks volgnummers uit een partij, of losse pasjes via hun pascode. De fee komt op je maandfactuur.

Modules zelf aanvragen vanuit je beheeromgeving

Wil je verhuur, cursussen of relatiekaarten erbij? Vink de modules aan in je beheeromgeving, vertel kort wat je ermee wilt doen en verstuur je aanvraag. Binnen 24 uur hoor je of de module voor je aan staat.

Relatiekaarten scannen en afrekenen met je partners

Aan de deur scan je een relatiekaart als elk ander ticket, en de scanner laat zien van welke partner de gast komt. Na afloop telt MijnEvent per partner wat er te verrekenen valt.