Everything, in the order you will need it.
Written to be read once before your first event and then opened again at the two or three moments something goes sideways. If you have ten minutes rather than an hour, the short tutorial on the plugin page is the same road with fewer stops.
1. Before your first event
What the plugin needs from your site. WordPress 5.8 or later, PHP 7.4 or later, and the GD extension — that is what draws the tickets. Almost every host has it; the system check will tell you if yours does not.
It sends email through WordPress, which means through whatever your site already uses. If your host's mail is unreliable, install an SMTP plugin and connect a real mailbox. The plugin will pick it up with nothing to configure on its side.
Three settings, once. Open Events & Tickets → Settings:
- Currency. What prices are written in.
- The From address. What your guests see the ticket arrive from. Use an address on your own domain; a From address on a domain you do not control is the single most common reason tickets land in spam.
- Payment instructions. The text somebody who is paying by transfer will read. This is not decoration — offline, that text is the payment. Put the account number, the reference to quote, and how long they have.
Then prove it works, before you need it. Tools & data → System check reads the whole path: the database tables, the GD extension, the mail setup, the folder the PDFs are written to. Run it, then send yourself a test ticket from the same screen. Open the email on a phone, not only on a computer.
Do this now. Nearly everything that goes wrong on a first event goes wrong here, and it costs one minute to find out on a quiet afternoon instead of an hour before the doors open.
2. Creating an event: the assistant
Events → New event asks three things first: how guests attend — at a venue, online, or both — the name and the date, and whether it repeats. Then the assistant takes over, and stays with you until the event is open or kept as a draft.
It begins with a drawing rather than a word: fifteen kinds of event, sketched. A standing club night, a banquet of round tables, a theatre, a podium in I, a podium in T, a stadium, a classroom, a transport hall, and the rest. Point at the one that looks like your room.
The archetype fills answers in; it never decides. Everything it pre-fills is yours to change on the next screen, and on every screen after that.
From there, each answer decides which question comes next:
- Are places numbered? This is the fork in the road. A headcount at the door is one branch; knowing who sits where is the other. If you are not sure, ask yourself whether anybody will ever say "you are at table 12". If nobody will, you do not need numbers.
- How is the room laid out? Tables in rows, rows of chairs, or no order at all.
- How big is it? How many rows, how many tables to a row, how many chairs to a table.
- Are there levels? A balcony, a gallery, a terrace. Levels exist so that two blocks that overlap in the plan do not collide in the numbering.
- Which parts are sold, and at what price? This is where zones and price categories are set. See §4.
- How do guests get their place? They buy a ticket, or they reply — free, and confirmed at once. See §13.
- How are you paid? Card, by hand, or both — and what someone paying by transfer should be told.
- When does the ticket leave? Immediately, or once you have assigned the places yourself.
- Who chooses the place? The guest, or you.
- What can one booking take? How many places, and whether each place carries its own name.
The panel on the right draws the room as you describe it, shows the prices the way the booking page will show them, and shows the line the ticket will print.
Two things the assistant will not do. It will not invent a setting of its own — every answer is written into the panel that already owned it, and stays editable there. And it will not rebuild the room of an event that already has bookings, because a table number somebody has been sold has to keep meaning the same table. If you need to change a room that has already sold, add to it rather than re-describing it.
You can leave the assistant at any point and finish in the panels. You can also call it back later: Prices & places has a button for it.
3. Dates that repeat
One event, many dates. A weekly club night, a play that runs for a month, a course every Tuesday: it is one event with several dates, not one event per date. Set the rule under Information & details → Does this event repeat? — every day, week, month or year, on the weekdays you tick, until a date or for a number of dates.
Each date then has its own bookings, its own capacity, its own door and its own online room. The guest picks a date on the booking page, and everything they receive — the emails, the ticket, the calendar file — carries that date.
- The Recurring dates tab lists them. Change one date, this one and the following, or all of them — the three choices every calendar offers.
- A date somebody has booked is never moved with the others. It stays where it is and is named, so you change it on its own, knowing who holds a ticket for it.
- Cancel, delete, detach. A date nobody has booked can be deleted. A booked date is cancelled instead: it stops selling, and its tickets are refused at the door with the reason. Detaching turns a date into an event of its own, with a copy of the room and the ticket categories — for the night that needs another room or other prices. Type
detachto confirm.
The door works one date at a time. A ticket for another date is refused as not tonight, with the date it is for. The Door screen can look at any date; the station at the entrance always scans tonight.
4. The room, zones and prices
The room is an inventory. You say it once — six rows of eight tables, ten chairs to a table, plus a balcony — and the plugin numbers every place in it.
A zone is an interval of that inventory. Tables 1 to 5. Rows A to C. The whole balcony. A zone does not invent places; it claims some of the ones that already exist. Two consequences follow, and they are the reason it works this way: nothing can be sold twice, and whatever no zone has claimed is shown to you as unclaimed instead of vanishing.
A price category is not a zone. A category is a name and a price — Premium, Standard, Student — and several zones can share one: Premium is Premium on the left balcony and on the right.
The booking page sells the categories. The ticket prints the zone. That is not an inconsistency: a guest chooses a price, and the person on the door reads a place.
Each zone says what it controls. Access only — a standing area, where nobody has a seat — or exactly where each person sits. One event can hold both, plus a numbered block, at the same time.
What one person is given is a property of the room, not of the ticket: a seat, a table, a row, or a whole area. It decides what the guest picks, what gets printed, and the word every screen uses — Seat, Table, Row, Area, and Place when a room mixes them.
Drawing instead of describing. The room builder is the other door to the same result. Drag tables and rows onto a plan; rectangle-select a block or shift-click your way through one; align them; space them evenly; nudge with the arrow keys; drop in a stage, a bar, a door. The plan you draw is the plan your guest picks from and the plan you watch on the night.
5. The booking page
Every event already has its page, with the form on it, under the events page (§8). That is the simplest road. To put the form somewhere else, use the shortcode [bitforgenet_registration] on any page.
To point a page at one event rather than letting the guest choose, pass the event: [bitforgenet_registration event="opening-night"].
If no page on your site carries the shortcode, the plugin shows the form itself rather than leaving a dead link — but give it a real page, because that is the address you will be sending people to.
What the guest sees. The event, the categories that are on sale with their prices, and a line per person coming — because a booking for five asks for five names. What is left is shown as they fill it in, recounted when they open a menu, when they change something, when they come back to the tab, and on a slow heartbeat in between.
An option with nothing left is greyed out, not removed. Nobody's choice is ever changed behind their back. If a line loses its category while the form is open, it says so on that line and blocks sending rather than quietly substituting something else.
The browser is never the guarantee. At the moment of writing, the event is locked, the places are recounted, and a booking that no longer fits is refused. Two people can fill the same last table at the same second; only one of them gets it, and the other is told before anything is charged.
6. When a date is full: the waiting list
A full date does not send people away. Under “full”, the page offers Join the waiting list: a name, an email, how many places, and — when only one category has sold out — which one. The agenda and the event page show the same button.
When a place comes free, it is held for the first person in line — after a cancellation, a refund, a payment that ran out, a deleted booking, or a capacity you raised. They get an email with a link that opens the form on their places; nobody else can buy them in the meantime. If they do not book in time, the place goes to the next person.
- How long a place is held: 24 hours by default, in Settings → Booking form, or per event on its Prices & places tab. Close to the date it is half of the time left, never less than an hour.
- A free place goes to the first person it is enough for: somebody waiting for three does not stop the person behind them, waiting for one, from having the one place that came free. They stay first for when three are there.
- Every email of the list leaves in the language the guest joined in. The “take me off” link asks before it removes anybody: mail scanners open links.
Waiting list shows each date: who waits, in which order, for how many, and whose place is held until when. You can offer a place now, take somebody off, or export the list.
7. When a category sells, and how many at once
Each ticket category can have its own sale dates, on the event’s Prices & places tab: an early bird that closes on the 1st, a door price that opens on the day. Times are in the event’s time zone, and the same for every date of a series.
A category outside its dates stays on the page, greyed, with the reason — “sales have ended”, “on sale from…”. When nothing is on sale yet, the page says when sales open instead of showing a form.
Minimum per booking: a table for four, a group rate. A booking that takes the category takes at least that many places of it; the form says so on the row, and the server refuses anything less. A booking you add yourself, by hand, is not held to the dates or the minimum.
8. The events page, and a page for every event
One page shows every event to come, and under its address each event has a page of its own: /events/opening-night/, and for each date of a series /events/opening-night/2026-10-09/. Create that page, or choose one you already have, under Settings → Event pages. It keeps its place in your menus and its look. The address follows your site's language — /evenements/ on a French site, /eventos/ on a Spanish one — and you can change it there.
- The look of an event page. Your theme draws it as any page of your site, in its type and colours. Classic puts the picture, the date and the place at the top, the details beside, and the booking form below, in your brand colour.
- A series lets the guest choose the date on a small calendar: the next dates as buttons, every date in a list, and each date its own page.
- An event on a page of its own. Any page or post can show one event — one you built with the block editor or with Elementor: paste the event's shortcode there. The plugin finds it, and the emails, the tickets, the calendars and the list of events then send guests to that page. Its old address answers with a redirect.
- Links already shared keep working. A booking link from before, a base you have changed since, a renamed category: each answers with a permanent redirect to where the page is now.
The addresses need pretty permalinks. On a site that still uses plain ones, links keep going through the booking page, and everything else works.
9. The agenda your guests see
The agenda shows dates, not events: every date of a series sits in its day, with its own state — open, few places left, sold out, closed, cancelled. Guests switch between four views:
- Compact — a dot a night, and the day you tap underneath.
- Month — the time and the title in each day, and +2 more when a day is full.
- Large — the picture of each night.
- List — day after day, in rows with the picture beside or as a grid of cards.
They can go to a date, keep only the events they care about, or only one category. Every night offers Add to my calendar and Share.
Shaping it. Events → Agenda settings decides the view it opens on, the views on offer, how many nights a day before +2 more, the pictures, the two buttons, your theme's style or its own, and the accent colour. Cards and colours sets the list in rows or as a grid, the size of the pictures, the corners and the colour of each state — with a sample beside that changes as you choose, before you save.
Putting it on a page.
- The events page shows it already.
- On any page: the shortcode
[bitforgenet_agenda]. The same tab writes it for you — a view, this week, this month or this year, one category, one venue, one organizer. - In the block editor: the Events agenda block, with the same choices in the panel on the right, and the real agenda as its preview.
- In Elementor: the Events agenda widget, with the same choices.
Whatever you do not choose follows the settings, so one change there changes every agenda of the site.
10. Your own agenda
Events → Agenda is the calendar of whoever runs the events: every state, drafts included, what the site shows and what it hides, and how full each night is. Year, month, week or list; filters by state, by category and by what the site does not show; a search.
- Drag a night onto another day to move it, at the same time. A night somebody has booked, one that is over, or one that is cancelled does not move from here: change it on the event's dates, knowing who holds a ticket for it.
- Click a night for its panel: its dashboard, its editor, its page, its state, and a date to move it to.
- In the list, tick several nights and change the state of their events at once.
- The + of a day starts a new event on that day.
Under the list of events, the month at a glance does the same in small: each night leads to its dashboard.
11. Categories
Sort your events into families under Events → Categories: a name, a colour, a picture and a few words. A category may sit under another — Jazz under Concerts. Tick them on an event, in the Categories box of its editor; + New category adds one without leaving the event.
Guests then filter the agenda by category, and each category has its own page — /events/category/jazz/, in your site's language — with its picture, its words and only its events. Asking for Concerts shows the jazz nights too. Deleting a category keeps its events; the categories under it move up a level.
12. A page for each venue and each organizer
Every venue and every organizer has a page of its own, with its events to come: /events/venue/la-nave/, /events/organizer/royal-nights/.
- A venue's page shows its address, a button to the map, its website and its picture. In Venues, the block Its page on the site adds a description, a picture and a website; the notes stay private.
- An organizer's page shows its logo, its tagline, its words and the links to its website and its networks — never its email address or its phone.
On the page of an event, the name of its venue and of its organizer lead there. A renamed venue keeps the address already shared.
13. Invitations: guests who reply
A ticket category can be a reply instead of a sale. Under Prices & places, choose how guests get it: a ticket, confirmed once paid; a free reply with a ticket and its QR code; or a free reply that simply puts the name on the list.
A reply is confirmed the moment it is made, and nothing is charged. When every category of an event is a reply, the booking page becomes an invitation — Count me in or I can't make it, and no total. A guest who cannot come says so, you are told, and the place stays free for somebody else.
An evening can mix both — a free reply for the family beside a paid dinner. The assistant asks the question once; the categories keep the answer one by one.
14. Payment
Two ways, and neither is the lesser one. It is a choice per event.
By hand. The booking arrives pending. You confirm it once you have actually been paid — transfer, WhatsApp, cash at the office — and the tickets go out the moment you do. Nothing is ever issued for money you have not received. What the guest is told while they wait is the payment instructions text you wrote, per event.
By card, with Stripe. Put your own Stripe secret key in Settings → Payments and turn card payment on for the events you want it on. The guest pays on a page hosted by Stripe; no card number ever touches your site. Their places are held while they pay and released on their own if they walk away, so the same seat is never sold twice. Stripe tells your site the result in a signed message, and the plugin reads the status back from Stripe before it confirms anything.
The money goes straight from the guest to your own Stripe account. This plugin is never in between and takes nothing per ticket, ever — the only cut is Stripe's own.
Until you enter a key, no connection to Stripe is ever made.
Discount codes live in the same area: a fixed amount or a percentage, limited by date or by number of uses.
15. Tickets
One per guest. Each is drawn at 100 × 250 mm at 300 dpi, with the QR engraved into the artwork, and delivered as a PDF by email — with a download link beside it, because mail servers strip attachments more often than they admit.
The design. Ticket designs will generate one for you in the colour you choose. The studio is there if you would rather bring your own: upload your artwork, generate colour variations of it, and move every printed field where you want it on a visual field map.
When the ticket leaves is a property of the event. Either immediately on confirmation, or after you have assigned the places — which is the right answer whenever you are the one deciding who sits where, because a ticket without a place on it is a ticket somebody will have to be told to ignore.
16. Online and hybrid events
How guests attend is the first question of every event: at a venue, online, or both. Online, nobody is seated and nothing waits for a place; the capacity is the size of your online room. Hybrid, the room people walk into and the online room share one capacity.
Put the meeting link under Information & details. Guests never receive that link itself: each gets a personal link through your site, checked at the moment it is clicked. So the link can be added late or changed at any time and still reach everyone, a cancelled booking stops opening it, and you choose who gets in — anyone who booked, only paid guests, or only once the room opens.
A date of a series can have a link of its own. Online, the first click checks the guest in; hybrid guests are checked in at the door as usual.
17. People and the programme
People are the speakers, performers and hosts you describe once — a photo, a few lines, their links — and put on as many events as you like.
The Programme tab holds the line-up, shown on the booking page and printed on the ticket, and the sessions of the evening: who, what, when and where, day 2 at 00:30 included. On a series, a session can belong to one date only. A line-up typed as text before this existed stays as it is until you choose to turn those names into people.
18. Emails, calendars and search engines
Every email carries your event and your name at the top — the organizer's logo, the title of the event and who is presenting it — in colours worked out to stay readable on your brand colour. The plugin's name appears nowhere, unless you tick the optional credit line in Settings → Email.
Add to my calendar. The thank-you page and the first email offer Apple Calendar and Outlook (a .ics file), Google Calendar and Outlook.com, with the right date and time zone and, online, the link to join.
Search engines. Each event page also tells them what it is — the dates, the venue or the online room, the line-up, the organizer and the prices — in the structured data they read, so the event can be found as an event.
A date of a series says which series it belongs to, and the page of a series lists every date on sale, each with its own address. Category, venue and organizer pages describe themselves too, and every page carries the breadcrumb from the list of events — the path search results can show instead of a bare address.
19. Reminders, and the thank-you after
A guest who is reminded comes. Every confirmed booking gets a reminder the day before and two hours before; a week before and the morning after can be added in Settings → Email. Each event can keep the site’s choice, pick its own, or send none, on its Reminders tab.
- In the language the booking was made in, with the doors, the address, the online link, and a fresh download link for every ticket.
- Once, and only once: each reminder of each booking is written down before it is sent.
- A booking made after a reminder’s moment does not get that one; its confirmation just arrived. Nothing “before” goes out after the start.
- The morning after: a thank-you, the next date when there is one, and — if you give one on the tab — the link where guests can review your event. Never a review of this plugin.
They leave with the five-minute sweep of WordPress, which runs when somebody visits the site. A site nobody visits sends late.
20. Writing to your guests
Messages writes to the people who booked: a change of time, what to bring, a thank-you. Choose the event, one date or all, one category or all, and who — confirmed, waiting for payment, came in, did not come in.
- Plain text, sent as you write it.
{first_name},{event}and{date}become each person’s own. - Preview shows it as the first of them will see it; Send a test sends it to you alone.
- One email per address, in batches your host accepts — the size is in Settings → Email. The history shows what left, address by address.
- Nothing tracks who opens it: no pixel, no rewritten link.
21. Seating, the floor, and the night
The floor is every zone on one screen while the evening fills. It shows three different facts and keeps them apart: sold, seated, and arrived.
- Seat a booking by hand, or let the plugin place it for you.
- A ticket will not print until every guest on it has a place, when the event is set up that way.
- Arrived is not sold. A guest who has scanned at the door turns green, carries a tick, and pulses. A table whose whole party is in wears a green ring. That is the one fact that moves all evening.
- On the plan, a free place is drawn in the colour of its category and a booked one in grey, and every table somebody sits at says how full it is — 4/5, in red once it is full.
Moving somebody who already holds a ticket is a re-issue, not an edit. The screen states the three consequences — the old ticket stops working at the door, a new one is sent, and the place they had is released — and the buttons stay dead until you type edit place. The server checks that phrase again on its side. This is deliberate friction: the hand clicks before the eye reads.
The door station. Door scanner gives you a link and a per-event door code. Open the link on the phone that will be at the door, enter the code, allow the camera. There is no app to install.
One screen answers, per scan: let in, already inside, or not for tonight. Counters update live, and several phones can scan the same event at once — every station checks the same database, so a ticket used at one door is already used at the other.
Opening and closing a station. An agent opens it with the door code. A manager signed in to WordPress opens it on purpose, from the Door screen or with the button on the code screen: being signed in is never enough on its own. Sign this station out closes that phone. Close all stations closes every station of the event, signed-in phones included, and keeps the code, so agents who should carry on type it again; Withdraw the code stops the code as well. With no event chosen, the door opens on tonight’s event, or the next one.
A ticket for another event is refused with the name and date of its event, so you know at once whether the guest is early, at the wrong venue, or the station is on the wrong event. Gates, in the door settings, are only for a venue with more than one way in: each check-in records where the guest came in. A gate never decides who may enter, and with one gate the station does not ask.
The camera needs HTTPS. No browser will open a camera on a plain http:// page. If your site is already on HTTPS and the camera still stays black, a security plugin or your CDN is sending a blanket camera policy over the top of the one the scanner sets; clearing the CDN cache usually settles it. Failing that, the station also takes a photo or a typed ticket number.
Print the roll-call list before you leave for the venue. Every guest, every ticket number, on paper. The night the venue's wifi gives up, you will not be reading this page.
22. After the event
- Export. CSV, bookings or guests, one event or all, with a column picker that remembers what you ticked.
- Archive and clear. Copies every booking, guest, ticket and scan into archive tables and then empties the live ones. Events, venues, organizers and designs are untouched. It asks for a one-time code sent to an address you nominate, so it cannot be run by accident — and everything it cleared stays searchable in the archive.
- Activity log. Who did what, and when.
23. When something does not arrive
Tickets are not arriving at all. Run Tools & data → System check first: it says whether the failure is in the rendering or in the sending, and those have nothing to do with each other. If it is the sending, anything that fixes email for the rest of your site fixes it here — an SMTP plugin and a real mailbox.
The email arrives but the PDF is missing. Your mail server is stripping the attachment. Lower the attachment ceiling in Settings. Every email already carries a download link per guest, so the guest is not stuck either way.
The booking page shows nothing. The shortcode is missing from the page, or the registration window has closed. Both are visible on the event.
A guest says their QR does not work. Ask whether they were moved after the ticket was sent: a re-issue invalidates the old one on purpose, and the new ticket is in a second email.
The camera stays black. See §21 — it is HTTPS, or a policy sent over the top of the scanner's own.
Nobody was told a booking came in. The notification address takes a list, not a single address, and every address on it is really copied in. Check that the list is filled and that those mailboxes are not filtering your own domain.
24. The words the plugin uses
- Place — one unit that can be given to one person. It becomes Seat, Table, Row or Area depending on what the room gives a person, and stays Place when a room mixes them.
- Zone — a named interval of the room: tables 1 to 5, the balcony.
- Price category — a name and a price, shared by one or more zones. What the booking page sells.
- Level — balcony, gallery, terrace. Keeps two overlapping blocks distinct.
- Grain — what one person is given: a seat, a table, a row, or an area.
- Door code — the per-event code that opens the check-in station on a phone.
- Roll call — the printable list of every guest and ticket number, for when the network fails.
- Date — one occurrence of an event. A one-off event has one; a series has many, each with its own bookings and its own door.
- Detach — turn one date of a series into an event of its own, with a copy of its room and categories.
- Reply — a free place, confirmed the moment it is asked for, instead of a sale.
- Events page — the page that lists every event to come, and under whose address each event has its own page.
- Agenda — the calendar of the events: your guests' one on the site, and your own under Events.
- Category — a family of events, with its colour and its own page. Guests filter the agenda by it.
Still stuck
Write to contact@bitforgenet.dev, or ask on the support forum — the answer stays public there, so the next person with the same problem finds it instead of having to ask again. Tell us what you did, what you expected, and what happened instead; the version of the plugin and of WordPress helps more than anything else in the message.