{"id":361265,"date":"2026-09-02T13:56:18","date_gmt":"2026-09-02T13:56:18","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/2kevents-event-tickets-and-door-check-in\/"},"modified":"2026-09-29T20:30:11","modified_gmt":"2026-09-29T20:30:11","slug":"bitforgenet-guest-tickets","status":"publish","type":"plugin","link":"https:\/\/cy.wordpress.org\/plugins\/bitforgenet-guest-tickets\/","author":23537276,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.12.18","stable_tag":"1.12.18","tested":"7.1.2","requires":"5.8","requires_php":"7.4","requires_plugins":null,"header_name":"Events and Tickets with QR Check-in","header_author":"BitForge Network","header_description":"Professional event, registration, ticketing and door check-in system. Custom events with organizers, venues and line-ups, per-event registration, manual or automated payment validation, unique QR tickets rendered onto designer templates, PDF delivery by email, and live access control at the gate.","assets_banners_color":"6c727a","last_updated":"2026-09-29 20:30:11","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/ko-fi.com\/bitforgenet","header_plugin_uri":"https:\/\/bitforgenet.dev\/plugins\/bitforgenet-guest-tickets\/","header_author_uri":"https:\/\/bitforgenet.dev\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":475,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.8":{"tag":"1.0.8","author":"bitforgenet","date":"2026-09-02 13:56:00","revision":3678117},"1.0.9":{"tag":"1.0.9","author":"bitforgenet","date":"2026-09-02 20:20:09","revision":3678620},"1.10.0":{"tag":"1.10.0","author":"bitforgenet","date":"2026-09-14 19:05:09","revision":3695814},"1.10.1":{"tag":"1.10.1","author":"bitforgenet","date":"2026-09-16 22:36:21","revision":3699294},"1.11.0":{"tag":"1.11.0","author":"bitforgenet","date":"2026-09-20 12:56:01","revision":3704270},"1.12.18":{"tag":"1.12.18","author":"bitforgenet","date":"2026-09-29 20:30:11","revision":3719808},"1.2.0":{"tag":"1.2.0","author":"bitforgenet","date":"2026-09-05 14:52:39","revision":3682551},"1.2.1":{"tag":"1.2.1","author":"bitforgenet","date":"2026-09-05 15:12:40","revision":3682567},"1.2.2":{"tag":"1.2.2","author":"bitforgenet","date":"2026-09-07 17:37:11","revision":3685341},"1.8.7":{"tag":"1.8.7","author":"bitforgenet","date":"2026-09-12 23:43:59","revision":3693196},"1.9.0":{"tag":"1.9.0","author":"bitforgenet","date":"2026-09-13 01:24:51","revision":3693236},"1.9.1":{"tag":"1.9.1","author":"bitforgenet","date":"2026-09-13 21:33:28","revision":3694209}},"upgrade_notice":{"1.12.18":"<p>A large update: dates that repeat, online events, invitations, a programme,\ncalendars, and a door that works one date at a time. The database is updated\non the spot; back it up first, as for any update. Open door stations ask for\ntheir code once more.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3697091,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3697091,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500-ar.png":{"filename":"banner-1544x500-ar.png","revision":3704268,"resolution":"1544x500","location":"assets","locale":"ar","width":1544,"height":500},"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3704268,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250-ar.png":{"filename":"banner-772x250-ar.png","revision":3704268,"resolution":"772x250","location":"assets","locale":"ar","width":772,"height":250},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3704268,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.8","1.0.9","1.10.0","1.10.1","1.11.0","1.12.18","1.2.0","1.2.1","1.2.2","1.8.7","1.9.0","1.9.1"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3694201,"resolution":"1","location":"assets","locale":"","width":1520,"height":639},"screenshot-10.png":{"filename":"screenshot-10.png","revision":3719801,"resolution":"10","location":"assets","locale":"","width":1568,"height":677},"screenshot-11.png":{"filename":"screenshot-11.png","revision":3719801,"resolution":"11","location":"assets","locale":"","width":1280,"height":900},"screenshot-12.png":{"filename":"screenshot-12.png","revision":3719801,"resolution":"12","location":"assets","locale":"","width":1280,"height":960},"screenshot-13.png":{"filename":"screenshot-13.png","revision":3719801,"resolution":"13","location":"assets","locale":"","width":1568,"height":676},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3694201,"resolution":"2","location":"assets","locale":"","width":1520,"height":639},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3694201,"resolution":"3","location":"assets","locale":"","width":1520,"height":639},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3694201,"resolution":"4","location":"assets","locale":"","width":1520,"height":639},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3694201,"resolution":"5","location":"assets","locale":"","width":1520,"height":479},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3694201,"resolution":"6","location":"assets","locale":"","width":1520,"height":639},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3694201,"resolution":"7","location":"assets","locale":"","width":1520,"height":639},"screenshot-8.png":{"filename":"screenshot-8.png","revision":3694201,"resolution":"8","location":"assets","locale":"","width":1552,"height":660},"screenshot-9.png":{"filename":"screenshot-9.png","revision":3694201,"resolution":"9","location":"assets","locale":"","width":1552,"height":651}},"screenshots":{"1":"The event assistant. Fifteen kinds of night, drawn rather than listed \u2014 pick the one that looks like your room, and every answer from there decides the next question. The panel on the right builds the room as you go, and shows the prices the booking page will show and the line the ticket will print. It refuses to rebuild a room that already has bookings.","2":"The room builder. Describe the room in numbers \u2014 rows, tables to a row, chairs to a table, levels \u2014 or draw it: drag a stage in, rectangle-select a whole row, shift-click, align, space evenly, nudge with the arrow keys. The plan you draw is the plan the guest picks from and the one you watch on the night.","3":"Prices &amp; places, on one panel. What a ticket will say, how places are given out, the levels, and each part of the room with the price category it is sold as and the first places it hands out. The capacity is counted from the room, not typed beside it.","4":"The booking page. One shortcode on any page. It asks for the name of every person coming \u2014 five names for a booking of five \u2014 and it knows what is left while the form is being filled in, counting the lines above and the other people booking at the same moment.","5":"The floor, on the night. Every part of the room on one screen, filling in real time, with three facts kept apart: sold, seated, and arrived. The pale bar is what has been sold; the solid one inside it is who has walked in.","6":"The door check-in station. A web page on any phone, opened with a per-event door code \u2014 no app to install. Camera, photo or keypad, a live count of who is inside, and one screen per scan: let in, already inside, or not for tonight.","7":"Every ticket issued. One per guest, with its own serial and its own QR code, the place it carries, and whether that guest has walked through the door \u2014 with the minute and the entrance they came in by.","8":"The control room. Every event, what has sold, what is still waiting on a payment, who has arrived \u2014 and the shortcode for the event you are looking at, ready to paste.","9":"Help, inside the plugin. The whole guide on the screen where you are stuck: a first event in ten minutes, then the assistant, the room, payment, tickets, the night, and what to do when something does not arrive. Every step links to the screen it talks about.","10":"Dates that repeat. One event, every Friday: each date keeps its own bookings, capacity and door. Change one date, this one and the following, or all of them \u2014 a date somebody has booked is never moved with the others.","11":"The guest chooses the date. A series shows its dates on the booking page, and the one chosen travels to the emails, the ticket and the calendar file.","12":"The door works one date at a time. A ticket for another Friday is refused as \"Not tonight\", and the screen says which date it is for.","13":"Online and hybrid events. Every guest gets a personal join link that goes through your site and is checked when clicked, so the meeting link can change at any time. You choose who gets it, and when the room opens."}},"plugin_section":[],"plugin_tags":[1486,99,1373,4772,4771],"plugin_category":[40,58],"plugin_contributors":[278878],"plugin_business_model":[],"class_list":["post-361265","plugin","type-plugin","status-publish","hentry","plugin_tags-events","plugin_tags-multilingual","plugin_tags-qr-code","plugin_tags-ticketing","plugin_tags-tickets","plugin_category-calendar-and-events","plugin_category-user-management","plugin_contributors-bitforgenet","plugin_committers-bitforgenet"],"banners":{"banner":"https:\/\/ps.w.org\/bitforgenet-guest-tickets\/assets\/banner-772x250.png?rev=3704268","banner_2x":"https:\/\/ps.w.org\/bitforgenet-guest-tickets\/assets\/banner-1544x500.png?rev=3704268","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/bitforgenet-guest-tickets\/assets\/icon-128x128.png?rev=3697091","icon_2x":"https:\/\/ps.w.org\/bitforgenet-guest-tickets\/assets\/icon-256x256.png?rev=3697091","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/bitforgenet-guest-tickets\/assets\/screenshot-1.png?rev=3694201","caption":"The event assistant. Fifteen kinds of night, drawn rather than listed \u2014 pick the one that looks like your room, and every answer from there decides the next question. The panel on the right builds the room as you go, and shows the prices the booking page will show and the line the ticket will print. It refuses to rebuild a room that already has bookings."},{"src":"https:\/\/ps.w.org\/bitforgenet-guest-tickets\/assets\/screenshot-2.png?rev=3694201","caption":"The room builder. Describe the room in numbers \u2014 rows, tables to a row, chairs to a table, levels \u2014 or draw it: drag a stage in, rectangle-select a whole row, shift-click, align, space evenly, nudge with the arrow keys. The plan you draw is the plan the guest picks from and the one you watch on the night."},{"src":"https:\/\/ps.w.org\/bitforgenet-guest-tickets\/assets\/screenshot-3.png?rev=3694201","caption":"Prices &amp; places, on one panel. What a ticket will say, how places are given out, the levels, and each part of the room with the price category it is sold as and the first places it hands out. The capacity is counted from the room, not typed beside it."},{"src":"https:\/\/ps.w.org\/bitforgenet-guest-tickets\/assets\/screenshot-4.png?rev=3694201","caption":"The booking page. One shortcode on any page. It asks for the name of every person coming \u2014 five names for a booking of five \u2014 and it knows what is left while the form is being filled in, counting the lines above and the other people booking at the same moment."},{"src":"https:\/\/ps.w.org\/bitforgenet-guest-tickets\/assets\/screenshot-5.png?rev=3694201","caption":"The floor, on the night. Every part of the room on one screen, filling in real time, with three facts kept apart: sold, seated, and arrived. The pale bar is what has been sold; the solid one inside it is who has walked in."},{"src":"https:\/\/ps.w.org\/bitforgenet-guest-tickets\/assets\/screenshot-6.png?rev=3694201","caption":"The door check-in station. A web page on any phone, opened with a per-event door code \u2014 no app to install. Camera, photo or keypad, a live count of who is inside, and one screen per scan: let in, already inside, or not for tonight."},{"src":"https:\/\/ps.w.org\/bitforgenet-guest-tickets\/assets\/screenshot-7.png?rev=3694201","caption":"Every ticket issued. One per guest, with its own serial and its own QR code, the place it carries, and whether that guest has walked through the door \u2014 with the minute and the entrance they came in by."},{"src":"https:\/\/ps.w.org\/bitforgenet-guest-tickets\/assets\/screenshot-8.png?rev=3694201","caption":"The control room. Every event, what has sold, what is still waiting on a payment, who has arrived \u2014 and the shortcode for the event you are looking at, ready to paste."},{"src":"https:\/\/ps.w.org\/bitforgenet-guest-tickets\/assets\/screenshot-9.png?rev=3694201","caption":"Help, inside the plugin. The whole guide on the screen where you are stuck: a first event in ten minutes, then the assistant, the room, payment, tickets, the night, and what to do when something does not arrive. Every step links to the screen it talks about."},{"src":"https:\/\/ps.w.org\/bitforgenet-guest-tickets\/assets\/screenshot-10.png?rev=3719801","caption":"Dates that repeat. One event, every Friday: each date keeps its own bookings, capacity and door. Change one date, this one and the following, or all of them \u2014 a date somebody has booked is never moved with the others."},{"src":"https:\/\/ps.w.org\/bitforgenet-guest-tickets\/assets\/screenshot-11.png?rev=3719801","caption":"The guest chooses the date. A series shows its dates on the booking page, and the one chosen travels to the emails, the ticket and the calendar file."},{"src":"https:\/\/ps.w.org\/bitforgenet-guest-tickets\/assets\/screenshot-12.png?rev=3719801","caption":"The door works one date at a time. A ticket for another Friday is refused as \"Not tonight\", and the screen says which date it is for."},{"src":"https:\/\/ps.w.org\/bitforgenet-guest-tickets\/assets\/screenshot-13.png?rev=3719801","caption":"Online and hybrid events. Every guest gets a personal join link that goes through your site and is checked when clicked, so the meeting link can change at any time. You choose who gets it, and when the room opens."}],"raw_content":"<!--section=description-->\n<p><strong>Events &amp; Tickets<\/strong> runs the evening from the first booking to the last guest\nthrough the door. It was built for clubs, bars and party promoters \u2014 the people\nfor whom an event is a door, a list, and a queue outside \u2014 and it has since been\nused for seated dinners, concerts, conferences and weddings, because they are\nthe same problem wearing different clothes.<\/p>\n\n<p>Nothing is capped and nothing is metered. There is no per-ticket fee, no\nexternal service to sign up for, no account to create, and no telemetry. Your\nguest list lives in your own database, on your own server.<\/p>\n\n<h4>It speaks seven languages, and it brought them with it<\/h4>\n\n<p>English, French, Spanish, Portuguese, German, Italian and <strong>Arabic<\/strong> \u2014 not a\npromise that somebody will translate it one day, but seven finished catalogues in\nthe download.\nInstall it and it is already in your language.<\/p>\n\n<p><strong>It works the language out for itself.<\/strong> Whatever WordPress is set to, the\nplugin follows \u2014 and it follows by language rather than by locale, so <code>pt_BR<\/code>,\n    pt_PT and <code>pt<\/code> all land on Portuguese and <code>ar_DZ<\/code>, <code>ar_MA<\/code> and <code>ar_SA<\/code> all land\non Arabic. A site in a language it does not have falls back to French rather than\nserving a screen that is half one language and half another. If you would rather\nsay it outright, there is one setting: <em>Settings \u2192 Language<\/em>.<\/p>\n\n<p><strong>Everything is translated, not just the buttons.<\/strong> The booking form the guest\nfills in, the emails they receive, the words printed on the ticket itself, the\ndoor station held at the entrance, and the admin screens you work in. Dates too \u2014\nthe month and the weekday come out of the plugin's own catalogue rather than\nWordPress's, so a French ticket does not print <em>September<\/em> under a French\nheading on an English site.<\/p>\n\n<p><strong>Arabic really is Arabic.<\/strong> The screens, the emails and the booking form read\nright to left. And the ticket \u2014 which is a drawn image, not a web page \u2014 is drawn\nwith an Arabic typeface that travels with the plugin, with the letters joined the\nway Arabic joins them and the line put in reading order. A time, a price, a table\nnumber or a ticket reference still runs the other way inside the sentence, as it\nshould. Most plugins that claim Arabic print a row of disconnected letters\nbackwards on the one thing the guest actually holds.<\/p>\n\n<p><strong>The language travels with the booking.<\/strong> A guest who booked in Spanish gets\ntheir ticket in Spanish \u2014 including a ticket re-sent months later, from a screen\nyou are reading in French. And your own words stay yours: event titles, venue\nnames, payment instructions and the success message are your text, and the plugin\nwill not rewrite them.<\/p>\n\n<h4>Who it is for<\/h4>\n\n<ul>\n<li>Clubs, bars and late-night venues<\/li>\n<li>Party and concert promoters<\/li>\n<li>Seated dinners, galas and weddings<\/li>\n<li>Conferences, seminars and school evenings<\/li>\n<li>Associations and community groups<\/li>\n<li>Anyone taking bookings by card, by transfer, by WhatsApp or in cash<\/li>\n<\/ul>\n\n<h4>Set an event up by answering questions<\/h4>\n\n<p>Creating an event asks three things first: how guests attend \u2014 at a venue,\nonline, or both \u2014 what it is called and when, and whether it repeats. Then an\nassistant takes over, and it is the shortest way to describe a night that\nexists. It starts with a drawing rather than a form:\nfifteen kinds of event, from a standing club night to a banquet, a theatre, a\npodium in I or in T, a stadium, a classroom. You point at the one that looks\nlike your room.<\/p>\n\n<p>From there every answer decides the next question, and nothing is asked twice.\nAre seats numbered? Then how is the room laid out \u2014 tables in rows, rows of\nchairs, or no order at all? How many rows, how many tables to a row, how many\nchairs to a table? Are there levels \u2014 a balcony, a terrace, a gallery? Which\nparts are sold at which price? Do guests buy a ticket, or simply reply? How\nare you paid, and what should somebody who\npays by transfer be told? Does the ticket leave immediately, or once you have\nassigned the places yourself? Who chooses the place \u2014 the guest, or you?<\/p>\n\n<p>The panel on the right draws the room while you answer, and shows the prices as\nthe booking page will show them and the line the ticket will print. When you\nfinish, the event is ready to sell: places, zones, prices, payment, delivery.<\/p>\n\n<p><strong>The assistant owns nothing.<\/strong> It adds no setting of its own and keeps no\ncolumn of its own \u2014 it fills in the panels that already held each answer, and\nevery one of them stays editable field by field afterwards. An assistant that\nknows something the editor does not is a second source of truth, and this\nplugin has already paid that bill. For the same reason it refuses to rebuild\nthe room of an event that already has bookings: it will not renumber a table\nsomebody has already been sold.<\/p>\n\n<h4>The room is an inventory, and a zone is an interval of it<\/h4>\n\n<p>Say the room once \u2014 six rows of eight tables, ten chairs a table, plus a\nbalcony \u2014 and the plugin numbers every place in it. A zone then claims a slice\nof that inventory: <em>tables 1 to 5<\/em>, <em>rows A to C<\/em>, <em>the whole balcony<\/em>. It\ninvents nothing, so nothing can be sold twice and nothing is quietly lost:\nwhatever no zone claims is named on screen as unclaimed rather than forgotten.<\/p>\n\n<p>A price category is not a zone. A category has a name and a price, and several\nzones can share it \u2014 Premium is Premium on the left balcony and on the right.\n<strong>The booking page sells the categories; the ticket prints the zone<\/strong>, because\nthe zone is what somebody reads at the door.<\/p>\n\n<p>Each zone also says what it controls: access only \u2014 a standing area where\nnobody has a seat \u2014 or exactly where each person sits. One event can hold all\nthree at once: a standing floor, a seated balcony, and a numbered block.<\/p>\n\n<p>And if you want to draw the room instead of describing it, the builder is\nthere: drag tables and rows onto a plan, rectangle-select or shift-click,\nalign, space evenly, nudge with the arrow keys, place a stage, a bar, a door.\nThe plan you draw is the plan the guest picks from, and the plan you watch on\nthe night.<\/p>\n\n<h4>One event, many dates<\/h4>\n\n<p>A weekly club night, a play that runs for a month, a course every Tuesday: one\nevent with several dates, not one event per date. Set the rule once \u2014 every\nday, week, month or year, on the weekdays you tick, until a date or for a\nnumber of dates \u2014 and each date gets its own bookings, its own capacity, its\nown door and its own online room. The guest picks a date on the booking page,\nand everything they receive carries that date: the emails, the ticket, the\ncalendar file.<\/p>\n\n<p>Changing dates works the way every calendar has taught everybody: this date,\nthis one and the following, or all of them. A date somebody has booked is never\nmoved with the others \u2014 it is named, so you change it knowing who holds a\nticket for it. A booked date is cancelled rather than deleted, and its tickets\nare refused at the door with the reason. A date that needs another room or\nother prices can be detached into an event of its own, taking a copy of the\nroom and the ticket categories with it.<\/p>\n\n<p>At the door, a ticket for another date is refused as <em>not tonight<\/em>, with the\ndate it is for.<\/p>\n\n<h4>Online, at the venue, or both<\/h4>\n\n<p>How guests attend is the first question of every event. Online, nobody is\nseated and nothing waits for a place: the capacity is the size of your online\nroom. Hybrid, the room people walk into and the online room share one capacity.<\/p>\n\n<p>Guests never receive the meeting link itself. Each gets a personal link through\nyour site, checked the moment it is clicked \u2014 so the link can be added late or\nchanged at any time and still reach everyone, a cancelled booking stops opening\nit, and you decide who gets in: anyone who booked, only paid guests, or only\nonce the room opens. Each date of a series can have a link of its own.<\/p>\n\n<h4>Invitations as well as tickets<\/h4>\n\n<p>Any ticket category can be a reply instead of a sale: free, confirmed the\nmoment the guest answers, with a ticket and its QR code or simply with their\nname on the list. When every category of an event is a reply, the booking page\nbecomes an invitation \u2014 <em>count me in<\/em> or <em>I can't make it<\/em>, and no total. A\nguest who cannot come says so, you are told, and the place stays free. One\nevening can mix both: a free reply for the family beside a paid dinner.<\/p>\n\n<h4>Speakers, performers and the programme<\/h4>\n\n<p>Describe the people who appear once \u2014 a photo, a few lines, their links \u2014 and\nput them on as many events as you like. Each event has a line-up, shown on the\nbooking page and printed on the ticket, and a programme of sessions: who, what,\nwhen and where, day 2 at 00:30 included. On a series, a session can belong to\none date only.<\/p>\n\n<h4>In the calendar, and in search engines<\/h4>\n\n<p>The thank-you page and the first email offer the date to Apple Calendar and\nOutlook (a .ics file), Google Calendar and Outlook.com \u2014 with the right time\nzone and, online, the way in. And every event page tells search engines what it\nis, in the structured data they read: the dates, the venue or the online room,\nthe line-up, the organizer and the prices.<\/p>\n\n<h4>Your emails carry your name<\/h4>\n\n<p>The top of every email is your event: the organizer's logo, the title of the\nevent and who is presenting it, in colours worked out to stay readable on your\nbrand colour. The plugin's name appears nowhere in what your guests receive. If\nyou would like to credit it, one box in <em>Settings \u2192 Email<\/em> adds a small line at\nthe bottom \u2014 off unless you switch it on.<\/p>\n\n<h4>Every guest is a person, not a number<\/h4>\n\n<p>A booking for five asks for five names, and each one gets their own ticket with\nits own QR code. One code cannot let five people in, and the door knows who is\nstanding in front of it.<\/p>\n\n<p>The booking form also knows what is left <strong>while it is being filled in<\/strong> \u2014\ncounted against what the page was rendered with, what the lines above it have\nalready taken, and what somebody else is taking in another browser at the same\nmoment. An option with nothing left is greyed out rather than removed, so\nnobody's choice is ever changed behind their back. The real guarantee is not in\nthe browser, where it could never be: the event is locked, the places are\nrecounted and the booking is refused at the moment of writing.<\/p>\n\n<h4>Tickets that look like tickets<\/h4>\n\n<p>Each one is drawn at 100 x 250 mm, 300 dpi, with the QR engraved into the\nartwork, and delivered as a PDF by email. Mail servers strip attachments more\noften than they admit, so every message also carries a download link for each\nguest.<\/p>\n\n<p>The ticket studio takes your own artwork if you have some \u2014 upload it, generate\ncolour variations, and move every printed field where you want it on a visual\nfield map \u2014 and generates a design for you in the colour of your choice if you\nwould rather not think about it.<\/p>\n\n<h4>The door works<\/h4>\n\n<p>Open the check-in station on any phone \u2014 no app to install. Point it at a\nticket and it answers in one screen: valid, already used, or not for tonight.\nCounters update live, several phones can scan the same event at once, and when\nthe venue's wifi gives up \u2014 it will \u2014 there is a printable roll-call list with\nevery guest and every ticket number on it.<\/p>\n\n<p>The plan says who is actually in the room. A place that has been sold and a\nplace whose guest has walked through the door are two different facts, and only\none of them moves all evening: a guest who has scanned turns green, carries a\ntick and pulses, and a table whose whole party has arrived wears a green ring.<\/p>\n\n<h4>Payment on your terms<\/h4>\n\n<p>Two ways, and neither is the lesser one.<\/p>\n\n<p>Take the money yourself: a booking arrives pending, you confirm it however you\nactually get paid \u2014 bank transfer, WhatsApp, cash at the office \u2014 and the\ntickets go out the moment you do. Nothing is ever issued for money you have not\nreceived. What the guest is told about paying is your own text, written per\nevent, because offline that text <em>is<\/em> the payment.<\/p>\n\n<p>Or let the card do it: add your own Stripe key and the guest pays on Stripe's\npage, comes back confirmed, and gets their tickets without you touching\nanything. Their places are held while they pay and released on their own if\nthey walk away, so the same seat is never sold twice. The money goes straight\nfrom the guest to your own Stripe account \u2014 this plugin is never in between,\nand takes nothing.<\/p>\n\n<h4>What the free plugin does<\/h4>\n\n<p>Everything below is in this plugin. There is nothing to unlock.<\/p>\n\n<ul>\n<li><strong>Unlimited events and unlimited tickets.<\/strong> No cap, no per-ticket fee.<\/li>\n<li><strong>Seven languages in the box<\/strong> \u2014 English, French, Spanish, Portuguese, German,\nItalian and Arabic, detected from your site or chosen in one setting, covering the\nadmin, the booking form, the emails, the ticket artwork and the door station,\nwith right-to-left layout and real Arabic shaping on the printed ticket.<\/li>\n<li><strong>Event assistant<\/strong> \u2014 how guests attend first, then fifteen drawn\narchetypes, one question at a time, and a live preview of the room, the\nprices and the printed line \u2014 all the way to the day the event opens.<\/li>\n<li><strong>Event editor<\/strong> \u2014 panels for each part of an event: information and\ndetails, recurring dates, programme, prices and places, rules and terms,\npayment, ticket and link.<\/li>\n<li><strong>Recurring events<\/strong> \u2014 every day, week, month or year; each date with its own\nbookings, capacity, door and online room; change one date, the following ones\nor all; cancel, delete or detach a date.<\/li>\n<li><strong>Online and hybrid events<\/strong> \u2014 a personal, checked join link for every guest,\nfour access rules, a link per date, check-in on the first click.<\/li>\n<li><strong>RSVP<\/strong> \u2014 free  &hellip;<\/li>\n<\/ul>\n\n<!--section=installation-->\n<h4>Requirements<\/h4>\n\n<ul>\n<li>WordPress 5.8 or later<\/li>\n<li>PHP 7.4 or later<\/li>\n<li>The GD extension, for rendering the tickets<\/li>\n<li>A working mail setup on the site \u2014 an SMTP plugin if your host's mail is\nunreliable<\/li>\n<\/ul>\n\n<h4>Steps<\/h4>\n\n<ol>\n<li>Plugins -&gt; Add New, search for <strong>Events and Tickets<\/strong>, install and activate.\nOr upload the ZIP under Plugins -&gt; Add New -&gt; Upload Plugin.<\/li>\n<li>Open <strong>Events &amp; Tickets -&gt; Settings<\/strong> and set your currency, your From\naddress and your payment instructions.<\/li>\n<li>Open <strong>Events &amp; Tickets -&gt; Tools &amp; data<\/strong>, run the system check, then send\nyourself a test ticket. Do this before your first real booking, not after.<\/li>\n<li>Create your first event with <strong>Events &amp; Tickets -&gt; Events -&gt; New event<\/strong>.\nThe assistant opens on its own and asks what kind of night it is.<\/li>\n<li>Put the booking form on a page with the shortcode\n   [bitforgenet_registration].<\/li>\n<li>On the night, open <strong>Events &amp; Tickets -&gt; Door scanner<\/strong>, note the door code,\nand give the link and the code to whoever is on the door.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"the%20name%20keeps%20changing.%20is%20it%20the%20same%20plugin%3F\"><h3>The name keeps changing. Is it the same plugin?<\/h3><\/dt>\n<dd><p>Yes. Same plugin, same folder, same settings, same data, same updates \u2014 only\nthe name shown on screen has changed. It was <em>BitForgeNet Guest Tickets and\nDoor Check-in<\/em>, briefly <em>Tickets &amp; Events<\/em>, and it is now <strong>Events and Tickets\nwith QR Check-in<\/strong> in the directory and <strong>Events &amp; Tickets<\/strong> on your own\nscreens. Nothing to reinstall and nothing to reconfigure. It is still published\nby BitForge Network, which is what the Author line says.<\/p><\/dd>\n<dt id=\"is%20there%20a%20limit%20on%20events%2C%20guests%20or%20tickets%3F\"><h3>Is there a limit on events, guests or tickets?<\/h3><\/dt>\n<dd><p>No. Nothing in this plugin is capped or metered, and there is no per-ticket\nfee. What your server can hold is the limit.<\/p><\/dd>\n<dt id=\"is%20there%20a%20paid%20version%3F\"><h3>Is there a paid version?<\/h3><\/dt>\n<dd><p>Not today. Everything this plugin can do is in the plugin you installed \u2014 the\nassistant, the room builder, the ticket studio, the price categories, the\ndiscount codes and card payment included. No screen ends in an offer.<\/p><\/dd>\n<dt id=\"do%20guests%20need%20an%20account%3F\"><h3>Do guests need an account?<\/h3><\/dt>\n<dd><p>No. A guest fills in the form, receives their tickets by email, and shows the\nQR code at the door.<\/p><\/dd>\n<dt id=\"can%20an%20event%20repeat%3F\"><h3>Can an event repeat?<\/h3><\/dt>\n<dd><p>Yes. Under <em>Information &amp; details<\/em>, set it to repeat every day, week, month or\nyear, on the weekdays you choose, until a date or for a number of dates. It\nstays one event: each date has its own bookings, capacity and door, and the\nguest chooses the date when booking. The <em>Recurring dates<\/em> tab lets you change\none date, the following ones or all of them.<\/p><\/dd>\n<dt id=\"can%20i%20run%20an%20online%20or%20hybrid%20event%3F\"><h3>Can I run an online or hybrid event?<\/h3><\/dt>\n<dd><p>Yes. Choose <em>Online<\/em> or <em>Both<\/em> as the first answer when you create the event,\nand put your meeting link in <em>Information &amp; details<\/em>. Every guest receives a\npersonal link through your site rather than the meeting link itself, so you can\nchange the link at any time, and a cancelled booking stops opening it.<\/p><\/dd>\n<dt id=\"can%20guests%20just%20reply%2C%20without%20paying%3F\"><h3>Can guests just reply, without paying?<\/h3><\/dt>\n<dd><p>Yes. Set a ticket category to RSVP: the place is free and confirmed the moment\nthe guest replies, with a QR ticket or simply their name on the list. When every\ncategory is an RSVP, the booking page becomes an invitation with <em>count me in<\/em>\nand <em>I can't make it<\/em>.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%27s%20name%20appear%20in%20my%20guests%27%20emails%3F\"><h3>Does the plugin's name appear in my guests' emails?<\/h3><\/dt>\n<dd><p>No. The top of every email shows your event and its organizer. There is an\noptional credit line in <em>Settings \u2192 Email<\/em>, off by default.<\/p><\/dd>\n<dt id=\"does%20it%20need%20woocommerce%3F\"><h3>Does it need WooCommerce?<\/h3><\/dt>\n<dd><p>No. It has its own booking form and its own bookings screen, and it works on a\nsite with no shop on it.<\/p><\/dd>\n<dt id=\"do%20i%20have%20to%20use%20the%20assistant%3F\"><h3>Do I have to use the assistant?<\/h3><\/dt>\n<dd><p>No. It opens when you create an event because that is the fastest way through,\nand you can leave it at any point: every answer it writes is a field you can\nopen and change afterwards. It owns no setting of its own.<\/p><\/dd>\n<dt id=\"how%20do%20i%20describe%20a%20room%20that%20is%20not%20a%20grid%3F\"><h3>How do I describe a room that is not a grid?<\/h3><\/dt>\n<dd><p>Two ways, and they end in the same place. Describe it in numbers \u2014 rows, tables\nto a row, chairs to a table, levels \u2014 or draw it in the builder: drop tables,\nrows, a stage and a bar on a plan, select several at once, align them, space\nthem evenly, nudge them with the arrow keys. Either way the plugin numbers\nevery place and hands them out.<\/p><\/dd>\n<dt id=\"can%20one%20event%20have%20standing%20room%20and%20numbered%20seats%3F\"><h3>Can one event have standing room and numbered seats?<\/h3><\/dt>\n<dd><p>Yes. Each zone says for itself whether it controls access only or where each\nperson sits, so a standing floor, a seated balcony and a numbered block can all\nbelong to the same night.<\/p><\/dd>\n<dt id=\"what%20is%20the%20difference%20between%20a%20zone%20and%20a%20price%20category%3F\"><h3>What is the difference between a zone and a price category?<\/h3><\/dt>\n<dd><p>A zone is a piece of the room \u2014 <em>tables 1 to 5<\/em>, <em>the balcony<\/em>. A category is a\nname and a price, and several zones can share one: Premium is Premium on the\nleft balcony and on the right. The booking page sells the categories; the\nticket prints the zone, because that is what somebody reads at the door.<\/p><\/dd>\n<dt id=\"can%20i%20change%20the%20room%20after%20people%20have%20booked%3F\"><h3>Can I change the room after people have booked?<\/h3><\/dt>\n<dd><p>You can add to it and change prices. You cannot rebuild it: the assistant\nrefuses to renumber a room that already has bookings, because a table number\nsomebody has already been sold has to keep meaning the same table.<\/p><\/dd>\n<dt id=\"two%20people%20booked%20the%20last%20table%20at%20the%20same%20moment.%20what%20happens%3F\"><h3>Two people booked the last table at the same moment. What happens?<\/h3><\/dt>\n<dd><p>One of them gets it and the other is told, before anything is charged. The form\nshows what is left while it is being filled in \u2014 including what somebody else\nis taking in another browser \u2014 but the guarantee is not in the browser: the\nevent is locked, the places are recounted and the booking is refused at the\nmoment it is written.<\/p><\/dd>\n<dt id=\"can%20i%20move%20somebody%20who%20already%20has%20their%20ticket%3F\"><h3>Can I move somebody who already has their ticket?<\/h3><\/dt>\n<dd><p>Yes, and the plugin treats it as what it is: a re-issue, not an edit. The\nscreen states the three consequences, the buttons stay dead until you type\n    edit place, and then the old ticket stops working at the door and a second\nemail goes out with the new one.<\/p><\/dd>\n<dt id=\"can%20i%20take%20payment%20online%3F\"><h3>Can I take payment online?<\/h3><\/dt>\n<dd><p>Yes, with Stripe. Put your own Stripe secret key in Settings \u2192 Payments and\nturn card payment on for the events you want it on. The guest pays on a page\nhosted by Stripe, no card number touches your site, and the money goes straight\nto your own Stripe account: this plugin is never in between and takes nothing\nper ticket, ever.<\/p>\n\n<p>Until you enter a key, nothing changes and no connection to Stripe is made. A\nbooking arrives pending and you confirm it once you have been paid \u2014 by\ntransfer, by WhatsApp, or in cash \u2014 exactly as before.<\/p><\/dd>\n<dt id=\"do%20i%20have%20to%20make%20guests%20pay%20by%20card%3F\"><h3>Do I have to make guests pay by card?<\/h3><\/dt>\n<dd><p>No. It is a choice per event, and you can also let a guest reserve now and pay\nlater: they get both buttons. If you would rather nothing be reserved until it\nis paid for, there is a single setting for that. What a guest who pays offline\nis told is your own text, written per event \u2014 offline, that text is the\npayment.<\/p><\/dd>\n<dt id=\"does%20one%20booking%20give%20one%20qr%20code%20for%20everybody%3F\"><h3>Does one booking give one QR code for everybody?<\/h3><\/dt>\n<dd><p>No, and that is the point. A booking for five produces five tickets with five\ndifferent codes, each carrying the name of the person it belongs to.<\/p><\/dd>\n<dt id=\"can%20more%20than%20one%20of%20us%20be%20told%20when%20a%20booking%20arrives%3F\"><h3>Can more than one of us be told when a booking arrives?<\/h3><\/dt>\n<dd><p>Yes. The notification address takes a list, and every address on it is really\ncopied in.<\/p><\/dd>\n<dt id=\"the%20tickets%20are%20not%20arriving.\"><h3>The tickets are not arriving.<\/h3><\/dt>\n<dd><p>The plugin sends through WordPress, so anything that fixes email for the rest\nof your site fixes it here. Run <strong>Tools &amp; data -&gt; System check<\/strong> first: it says\nwhether the failure is in the rendering or in the sending. If your host's mail\nis unreliable, install an SMTP plugin and connect a real mailbox \u2014 it will be\npicked up automatically.<\/p><\/dd>\n<dt id=\"the%20email%20arrives%20but%20the%20pdf%20is%20missing.\"><h3>The email arrives but the PDF is missing.<\/h3><\/dt>\n<dd><p>Your mail server is stripping the attachment. Lower the attachment ceiling in\nSettings; every email already carries a download link per guest, so the guest\nstill gets their ticket.<\/p><\/dd>\n<dt id=\"does%20the%20door%20scanner%20need%20internet%3F\"><h3>Does the door scanner need internet?<\/h3><\/dt>\n<dd><p>It needs to reach your own website, the same as any other page. For the\nevenings when the venue's wifi is not to be trusted, print the roll-call list\nfirst: it carries every guest and every ticket number, and it works on paper.<\/p><\/dd>\n<dt id=\"do%20i%20need%20to%20install%20an%20app%20on%20the%20door%20phone%3F\"><h3>Do I need to install an app on the door phone?<\/h3><\/dt>\n<dd><p>No. The station is a web page. Open the link in the phone's browser, enter the\ndoor code, and allow the camera.<\/p><\/dd>\n<dt id=\"can%20two%20people%20scan%20at%20once%3F\"><h3>Can two people scan at once?<\/h3><\/dt>\n<dd><p>Yes. Every station checks the same database, so a ticket used at one door is\nalready used at the other.<\/p><\/dd>\n<dt id=\"the%20camera%20stays%20black%20on%20the%20door%20phone.\"><h3>The camera stays black on the door phone.<\/h3><\/dt>\n<dd><p>The page must be served over HTTPS \u2014 browsers refuse the camera otherwise. If\nthe site is already on HTTPS, a security plugin or your CDN is probably sending\na blanket camera policy; the scanner screen re-states its own, so clearing the\nCDN cache usually settles it.<\/p><\/dd>\n<dt id=\"can%20i%20use%20my%20own%20ticket%20artwork%3F\"><h3>Can I use my own ticket artwork?<\/h3><\/dt>\n<dd><p>Yes. The plugin will generate a design for you in the colour you choose if you\nwould rather not think about it, and the ticket studio on the <strong>Ticket designs<\/strong>\nscreen takes your own artwork instead: upload it, generate colour variations of\nit, and move every printed field where you want it on a visual field map.<\/p><\/dd>\n<dt id=\"can%20i%20clear%20the%20test%20bookings%20before%20going%20live%3F\"><h3>Can I clear the test bookings before going live?<\/h3><\/dt>\n<dd><p>Yes. <strong>Tools &amp; data -&gt; Archive and clear<\/strong> copies every booking, guest, ticket\nand scan into archive tables and then empties the live ones. Events, venues,\norganizers and designs are untouched. It asks for a one-time code sent to an\naddress you set, so it cannot be run by accident.<\/p><\/dd>\n<dt id=\"what%20languages%20does%20it%20come%20in%3F\"><h3>What languages does it come in?<\/h3><\/dt>\n<dd><p>Seven, finished and in the download: English, French, Spanish, Portuguese,\nGerman, Italian and Arabic. Nothing to install and nothing to wait for.<\/p><\/dd>\n<dt id=\"how%20does%20it%20know%20which%20one%20to%20use%3F\"><h3>How does it know which one to use?<\/h3><\/dt>\n<dd><p>It reads the language WordPress is set to, and it reads it by language rather\nthan by locale \u2014 pt_BR, pt_PT and pt all get Portuguese; ar_DZ, ar_MA and ar_SA\nall get Arabic. A site in an eighth language falls back to French rather than\nshowing you half a translation. You can also say it outright under <strong>Settings \u2192\nLanguage<\/strong>, which is the answer when your site is in one language and your guests\nread another.<\/p><\/dd>\n<dt id=\"does%20it%20change%20the%20language%20of%20my%20site%3F\"><h3>Does it change the language of my site?<\/h3><\/dt>\n<dd><p>No. It moves this plugin and nothing else. WordPress, your theme and every other\nplugin keep the language they had.<\/p><\/dd>\n<dt id=\"is%20the%20ticket%20itself%20translated%2C%20or%20only%20the%20screens%3F\"><h3>Is the ticket itself translated, or only the screens?<\/h3><\/dt>\n<dd><p>The ticket itself. A ticket is a drawn image rather than a web page, so it is the\npiece that usually gets left behind \u2014 here the words on it, the date written out\nin full, and the line that says which table or seat all come out in the guest's\nlanguage.<\/p><\/dd>\n<dt id=\"does%20arabic%20work%20properly%2C%20including%20on%20the%20ticket%3F\"><h3>Does Arabic work properly, including on the ticket?<\/h3><\/dt>\n<dd><p>Yes, and that is a real question rather than a polite one. Arabic letters change\nshape depending on what is beside them, and the line reads right to left; the\nimage library that draws tickets does neither by itself, which is why Arabic on a\nticket usually comes out as a row of disconnected letters in the wrong order. The\nplugin joins the letters and orders the line before anything is drawn, and carries\nan Arabic typeface to draw them with. Numbers inside the sentence \u2014 a time, a\nprice, a table number, a ticket reference \u2014 still run the other way, as they\nshould. The screens, the booking form, the emails and the door station are laid\nout right to left too.<\/p><\/dd>\n<dt id=\"a%20guest%20booked%20in%20one%20language%20and%20i%20work%20in%20another.%20which%20one%20do%20they%20get%3F\"><h3>A guest booked in one language and I work in another. Which one do they get?<\/h3><\/dt>\n<dd><p>Theirs. The language a guest booked in is kept with their booking, so their\nticket and their emails go out in it \u2014 including a ticket re-sent months later\nfrom a screen you are reading in French.<\/p><\/dd>\n<dt id=\"are%20my%20own%20event%20titles%20translated%3F\"><h3>Are my own event titles translated?<\/h3><\/dt>\n<dd><p>No, and they should not be. Your event titles, venue names, payment instructions\nand success message are your words; the plugin translates its own and leaves\nyours alone. A venue selling to guests in two languages writes those lines in\nboth.<\/p><\/dd>\n<dt id=\"can%20i%20correct%20or%20add%20a%20translation%3F\"><h3>Can I correct or add a translation?<\/h3><\/dt>\n<dd><p>Yes. The catalogues are ordinary .po files in the plugin's <code>languages<\/code> folder,\nand the template is there beside them. Better still, put the correction on\nhttps:\/\/translate.wordpress.org\/projects\/wp-plugins\/bitforgenet-guest-tickets\/ \u2014\na language pack from there is loaded ahead of the plugin's own files, so your\nwording wins and everybody gets it.<\/p><\/dd>\n<dt id=\"where%20do%20i%20get%20help%3F\"><h3>Where do I get help?<\/h3><\/dt>\n<dd><p>There is a <strong>Help<\/strong> screen in the plugin itself \u2014 the whole guide, one click from\nwherever you are stuck. The same text is at\nhttps:\/\/bitforgenet.dev\/plugins\/bitforgenet-guest-tickets\/help\/ \u2014 it walks\nthrough a first event, the room, the door and the night itself. Beyond that,\nthe support forum on this page, or contact@bitforgenet.dev<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.12.18<\/h4>\n\n<p>The biggest release since the first: events that repeat, online events,\ninvitations, people and a programme, calendars \u2014 and a door that knows which\nnight it is.<\/p>\n\n<ul>\n<li><strong>Events that repeat.<\/strong> Every day, week, month or year, on the weekdays you\ntick, until a date or for a number of dates. Each date keeps its own\nbookings, capacity, room and door. Change one date, this one and the\nfollowing, or all of them; a date somebody has booked is never moved with\nthe others. Cancel, delete or detach a date \u2014 a detached date takes a copy\nof its room and categories with it.<\/li>\n<li><strong>Guests choose their date<\/strong> on the booking page, and everything they\nreceive \u2014 the emails, the ticket, the calendar file \u2014 carries it.<\/li>\n<li><strong>The door works one date at a time.<\/strong> A ticket for another date is refused\nas \"Not tonight\"; one for another event names its event. The Door screen\nopens on tonight's event. \"Close all stations\" closes every station,\nincluding phones signed in to WordPress, and gates are asked only where\nthere are several.<\/li>\n<li><strong>Online and hybrid events.<\/strong> Every guest gets a personal join link that\ngoes through your site and is checked when clicked, so the meeting link can\nchange at any time. You choose who gets in, and when.<\/li>\n<li><strong>Invitations (RSVP).<\/strong> Any ticket category can be a free reply instead of\na sale, confirmed at once \u2014 with a QR ticket, or just a name on the list.\nAn event made only of replies becomes an invitation page.<\/li>\n<li><strong>People and the programme.<\/strong> Speakers and performers described once and\nused on any event; a line-up on the page and on the ticket; sessions placed\ninside their date.<\/li>\n<li><strong>Add to my calendar, and found by search engines.<\/strong> Apple, Outlook and\nGoogle Calendar from the thank-you page and the first email; every event\npage describes itself in the structured data search engines read.<\/li>\n<li><strong>One assistant.<\/strong> How guests attend comes first, then the name, the date\nand whether it repeats; an online event skips the room.<\/li>\n<li><strong>Your emails, your name.<\/strong> Every email carries your event and its\norganizer, in colours computed to stay readable on your brand colour. The\nplugin's name appears only in an optional credit line.<\/li>\n<li><strong>Seating that holds.<\/strong> Rooms on several named levels keep every place, the\nplan writes \"4\/5\" on every table, and \"Place them for me\" reports what was\nreally saved.<\/li>\n<li><strong>Seven languages, completely.<\/strong> Every screen, email and ticket in English,\nFrench, Spanish, Portuguese, German, Italian and Arabic \u2014 Arabic with its\nsix plural forms.<\/li>\n<li><strong>Fixes<\/strong>, among them: tickets on hosts without mbstring, online events\nsending their tickets, Arabic room and category names, screens saved\nwithout changes changing nothing, the places left on a booking for a later\ndate of a series, and the door's \"Next guest\" button, now full width.<\/li>\n<li><strong>Copyright and licence stated<\/strong>: a copyright notice in the plugin header,\nand the full text of the GNU GPL in <code>LICENSE.txt<\/code>.<\/li>\n<\/ul>\n\n<h4>1.11.0<\/h4>\n\n<ul>\n<li><strong>Italian, the seventh language.<\/strong> A complete catalogue in the download \u2014\nadmin screens, booking form, emails, door station, dates and the words printed\non the ticket. it_IT, it_CH and it all land on Italian.<\/li>\n<li><strong>Settings \u2192 Language<\/strong> lists Italian, and the other six catalogues name it in\ntheir own language.<\/li>\n<li>Directory banners updated to show the seven languages.<\/li>\n<\/ul>\n\n<h4>1.10.1<\/h4>\n\n<ul>\n<li>Removed <code>admin\/views\/event\/pricing.php<\/code>, a tombstone left from the retired\nPricing tab that nothing has called since 1.9.0.<\/li>\n<li>Refreshed the two brand images shipped with the plugin.<\/li>\n<li>Added a donate link to the directory listing. Nothing appears inside\nWordPress: no screen in this plugin ends in an offer, and that has not\nchanged.<\/li>\n<\/ul>\n\n<h4>1.10.0<\/h4>\n\n<ul>\n<li><strong>Six languages, in the download.<\/strong> English, French, Spanish, Portuguese,\nGerman and Arabic. Every screen, the booking form, the emails, the door\nstation and the words printed on the ticket.<\/li>\n<li><strong>The language is worked out from your site<\/strong>, by language rather than by\nlocale: pt_BR, pt_PT and pt all land on Portuguese, ar_DZ, ar_MA and ar_SA all\nland on Arabic. A site in a language the plugin does not have falls back to\nFrench rather than serving half a translation.<\/li>\n<li><strong>New setting: Settings \u2192 Language.<\/strong> Leave it on <em>Follow the site<\/em>, or name\nthe language outright \u2014 for a site in one language selling to guests who read\nanother. The screen says what your site is set to and what the plugin will\nspeak, so there is nothing to guess at.<\/li>\n<li><strong>The language travels with the booking.<\/strong> A guest who booked in Spanish is\nanswered in Spanish, including a ticket re-sent months later from an admin\nscreen in another language, or issued by cron in the middle of the night.<\/li>\n<li><strong>Dates are translated too<\/strong>, out of the plugin's own catalogue rather than\nWordPress's \u2014 so a French ticket does not print \"September\" under a French\nheading on an English site, and a site that has never installed French still\ngets French months.<\/li>\n<li><strong>Arabic is drawn properly on the ticket.<\/strong> The ticket is an image, and the\nlibrary that draws it neither joins Arabic letters nor puts the line in\nreading order. The plugin now does both before drawing, and carries an Arabic\ntypeface to draw with. A time, a price, a table number or a ticket reference\nstill runs the other way inside the sentence.<\/li>\n<li><strong>Right-to-left layout<\/strong> for the admin screens, the booking form, the emails\nand the door station \u2014 the plugin's own containers only, so the rest of your\nsite is untouched. A seating plan is not mirrored: table 1 stays where table 1\nactually is.<\/li>\n<li>The plugin's catalogues are loaded after any language pack from\ntranslate.wordpress.org, so a translator's work always wins over ours.<\/li>\n<\/ul>\n\n<h4>1.9.1<\/h4>\n\n<ul>\n<li><strong>Renamed, and this time for the search rather than for the branding.<\/strong> The\ndirectory ranks the words of a title, so the title is now\n<strong>Events and Tickets with QR Check-in<\/strong> \u2014 the words somebody actually types.\nOn your own screens and in the admin menu it is <strong>Events &amp; Tickets<\/strong>, two\nwords that fit a sidebar. The brand leaves the title: the Author line already\nsays BitForge Network, and a name is not the place to sign your work twice.<\/li>\n<li>The slug, the text domain, the shortcodes, the option keys, the database\ntables and the update path are untouched, exactly as in 1.9.0. Nothing to\nreinstall, nothing to reconfigure.<\/li>\n<\/ul>\n\n<h4>1.9.0<\/h4>\n\n<ul>\n<li>Renamed on screen. The slug, the text domain, the shortcodes, the option\nkeys, the database tables and the update path were all untouched: a label,\nnot a new plugin. (1.9.1, the same day, renamed it again \u2014 see above.)<\/li>\n<li>New icon and new directory banners: a ticket and a QR code, which is what the\nplugin actually is. The QR in the artwork is a real one.<\/li>\n<li>The directory page shows the screens again \u2014 eight of them, from the\nassistant to the door station \u2014 and the description finally covers what was\nadded between 1.2.2 and 1.8.7: the assistant, the room builder, zones as\nintervals of an inventory, price categories, live availability in the booking\nform, arrivals on the plan, re-issuing a place, and team notifications.<\/li>\n<li>The FAQ was rewritten around the questions the last two months produced.<\/li>\n<li><strong>New: a Help screen inside the plugin.<\/strong> The whole guide \u2014 setup, the\nassistant, the room and its zones, payment, tickets, seating, the door, and\nwhat to do when something does not arrive \u2014 on the screen where somebody is\nactually stuck, linking to the screens each sentence talks about. It reads\nnothing and writes nothing, and it needs no capability beyond being able to\nopen the plugin: help only an administrator can read is help the person who\nneeded it could not reach.<\/li>\n<li>Nothing else changes: no database change, no stored setting touched, and no\nexisting screen behaves differently.<\/li>\n<\/ul>\n\n<h4>1.8.7<\/h4>\n\n<p><strong>The team notification field takes more than one address.<\/strong> A team is more than\none person. Separate them however you like \u2014 a comma, a semicolon, a space, one\nper line \u2014 and everybody on the list is copied on guest emails and alerted on\nevery new booking. Before, only the first address was ever used.<\/p>\n\n<p><strong>An empty reply-to now follows WordPress.<\/strong> Left blank it means \"whatever this\nsite uses\" rather than \"nobody\", so replies land in the site's own\nadministration inbox without anybody having to think about it. The from address\nbehaves the same way, and both boxes show you the address they would fall back\nto.<\/p>\n\n<p><strong>Fixed: typing an answer in the assistant left <em>Continue<\/em> greyed out.<\/strong> Every\nkeystroke repainted the panel, but only a full redraw ever drew the buttons \u2014 so\nafter typing the payment instructions the only way to move on was to step back\nand forward again. The answer and the button are drawn together now.<\/p>\n\n<p><strong>The floor plan says who is actually in the room.<\/strong> A seat that is sold and a\nseat whose guest has walked through the door are two different facts, and only\none of them changes all evening. A guest who has scanned their ticket turns\n<strong>green<\/strong>, carries a <strong>tick<\/strong>, and breathes gently; a table whose whole party\nhas arrived wears a green ring. There is an <strong>Already in<\/strong> filter, a key under\nthe plan explaining every colour, and the same story in the simple list for\nanyone who never opens the drawing. The movement stops for anyone whose system\nasks for less motion \u2014 the colour and the tick still say everything.<\/p>\n\n<p><strong>Moving a guest who already has a ticket is no longer an ordinary save.<\/strong> It\nis a reissue, and it does three things at once: the tickets they are holding are\n<strong>voided<\/strong> \u2014 the door refuses those QR codes from that moment \u2014 new tickets are\ndrawn with the new places, and a second email goes out. If they have already\nshown somebody the first one, that is the copy that stops working. So the screen\nnow says all of that in plain words, and the buttons stay dead until you type\n    edit place into the box beside them. Not a checkbox, which the hand ticks\nbefore the eye reads; not a browser dialog, which is dismissed by reflex. The\nsame sentence is checked again on the server, because a rule that only lives in\na browser is not a rule.<\/p>\n\n<h4>1.8.6<\/h4>\n\n<p><strong>The booking form now knows what is left while somebody is filling it in.<\/strong>\nThree things have to agree, and until now only the first was ever asked: the\nnumber the page was drawn with, <strong>the guest rows above this one<\/strong>, and whoever\nelse is booking at the same moment somewhere else. Choose VIP for five guests in\na room that has five, and the sixth row greys VIP out as you reach it \u2014 instead\nof letting you type eight names and refusing the lot at the end.<\/p>\n\n<p><strong>It asks again at the moments a decision is being made<\/strong>: a menu opening, a\nchoice changing, the quantity changing, the tab coming back to the front \u2014 and\non a slow tick in between, never while the tab is hidden. One function answers,\nfor the page and for the live refresh alike, so the two can never disagree. It\nis cached for five seconds and thrown away the instant a booking is written, so\nthe next person to open a menu sees the seat go.<\/p>\n\n<p><strong>The quantity stepper stops at what exists<\/strong>, and a line above the guest rows\nsays how many places are still for sale, counting down as they go.<\/p>\n\n<p><strong>A category that sells out under you is said out loud<\/strong>, on the row it affects,\nand the booking cannot be sent until you have picked another. Your choice is\nnever changed behind your back \u2014 first come, first served, and being told so.<\/p>\n\n<p><strong>Fixed \u2014 and this was the hole underneath all of it: a booking held no place in\nits category until somebody had been sat down.<\/strong> The seat count could only see\nguests who already had a place written against them, and where the organizer\nseats people by hand nobody has one until they do it \u2014 hours or days after the\nguest paid. A VIP zone of forty still reported forty places left after forty\npeople had bought it. Every booking now holds its places from the moment it is\nwritten, whether or not anybody has decided where those people are sitting.<\/p>\n\n<p><strong>None of this is the guarantee, and it does not pretend to be.<\/strong> The booking\nitself is still taken under a lock on the event, counted again, and refused with\na plain sentence if the last place went a second ago. The live form exists so\nthat you are told <em>before<\/em> you have typed eight names rather than after.<\/p>\n\n<h4>1.8.5<\/h4>\n\n<p><strong>Fixed: your event was not selling the price categories you gave the room.<\/strong>\nEvery event is handed a \"Standard admission\" ticket category the moment it is\ncreated, and the room only spoke up when nothing else had \u2014 so you could name\nthree price categories in the assistant, see all three on every screen in the\nadmin, and have the booking page sell one. <strong>The room now decides what an event\nsells whenever it describes it<\/strong>, because it is the thing that actually holds\nthe people. A room category you left at zero borrows the price of the ticket\ncategory of the same name, so nothing silently drops to the base price.<\/p>\n\n<p><strong>The ticket-categories list stops competing.<\/strong> With a room in place it folds\naway on <em>Prices &amp; places<\/em> under <strong>Offers that are not places<\/strong> \u2014 early bird,\nmember, child: a price about <em>when<\/em> or <em>who<\/em> rather than <em>where<\/em>. That is the\njob it is actually for.<\/p>\n\n<p><strong>Fixed: the WordPress footer printed across two tabs.<\/strong> One stray closing tag\nat the foot of two templates closed WordPress's own content wrapper early,\nwhich dropped \"Merci de faire de WordPress votre outil de cr\u00e9ation de contenu\"\ninto the middle of the Ticket and Payment tabs. The test bench now counts\nopening and closing tags in every template, because nobody reads a closing tag\nat the foot of a 120-line file and a machine counts them in a millisecond.<\/p>\n\n<p><strong>The floor plan builder can select more than one thing.<\/strong> Drag a rectangle over\nthe floor and it picks up every part it touches; shift-click adds one;\nCtrl+A takes the lot. Then move them together, line them\nup \u2014 left, centre, right, even gaps \u2014 duplicate them or remove them in one go.\nBefore this, the <em>only<\/em> rectangle gesture in the builder struck seats out: the\nobvious way to grab a row of tables quietly crossed out every chair inside it.\nA rectangle now means whatever the tool means, and striking seats out lives\nwith the strike-out tool where it belongs.<\/p>\n\n<p><strong>The stage is picked up like anything else.<\/strong> It needed its own tool before,\nwhich is not something anybody guesses.<\/p>\n\n<p><strong>More of the builder<\/strong>: arrow keys nudge a selection by 10 cm, or a metre with\nShift. Ctrl+D duplicates,\nDelete removes. The panel now opens on <strong>what you have selected<\/strong>\ninstead of on the template gallery, so clicking a table no longer scrolls its\nown settings out of sight. A part has a <strong>Level<\/strong> field, and the room has a\nname field in the builder.<\/p>\n\n<p><strong>The name of the room is asked at the top of the assistant<\/strong>, where you already\nknow it, instead of sitting in a box at the bottom of a tab.<\/p>\n\n<p><strong>Fixed:<\/strong> the Category column of a guest list showed a dash for every guest who\nbooked a part of the room, because it looked in one module's own table instead\nof asking the question properly.<\/p>\n\n<h4>1.8.4<\/h4>\n\n<p><strong>The assistant describes a room the way you would describe it out loud.<\/strong> You\nsay how many rows of tables and how many tables to a row \u2014 that lays the hall\nout once and numbers every table \u2014 and then each zone claims a stretch of it:\n<em>\"the VIP zone runs from table 1 to table 5.\"<\/em> A zone no longer invents places\nof its own, which is what makes the rest possible: the same table can never end\nup in two zones, and a table you left out of every zone is named on screen\nrather than quietly dropped off the sale.<\/p>\n\n<p><strong>A price category is no longer the same thing as a zone.<\/strong> A category has its\nown name and its own price, and several zones can share one \u2014 Premium is\nPremium whether it is the left balcony or the right. The booking page sells the\ncategories; the ticket prints the <strong>zone<\/strong>, because the zone is what somebody\nactually reads at the door.<\/p>\n\n<p><strong>The payment question is now the whole story.<\/strong> As well as how people pay and\nwhen the ticket goes out, the assistant asks what to tell a guest paying off the\nsite, how many places one booking may take, and whether you need a name for\nevery place or one name for the booking. All four are written into the event.<\/p>\n\n<p><strong>Prices &amp; places shows the room instead of asking for it again.<\/strong> The four\nbuttons \u2014 no places, one gauge, zones, a plan \u2014 and the <em>\"What one person is\ngiven\"<\/em> radio group are gone. Both asked what the assistant had just asked, and\nthe two screens could contradict each other: answer \"tables\" in the assistant,\ntick \"a chair\" here, and the plugin starts selling chairs at a table nobody\nbooked. The tab now <strong>draws the room that exists<\/strong>, says in a sentence what a\nticket will print, and gives you the two ways back \u2014 run the assistant again, or\nopen the builder on what it built.<\/p>\n\n<p><strong>The capacity is counted, not typed.<\/strong> With a room in place, the capacity box\nis replaced by the room's own total. Two boxes for one number always ends the\nsame way: one of them is believed at the door.<\/p>\n\n<p><strong>Fixed: a balcony forgot it was a balcony.<\/strong> A block's level and its control\nwere saved to the database and never read back, so both were lost the first time\nthe room was loaded again.<\/p>\n\n<p><strong>Fixed: a hall of tables came back sold chair by chair.<\/strong> The floor plan\nbuilder never sent the room's grain back when you saved, so a room built around\nwhole tables was rewritten as a room of single seats.<\/p>\n\n<h4>1.8.3<\/h4>\n\n<p><strong>Fixed: finishing the assistant broke the site.<\/strong> It wrote its entry to the\nactivity log with the wrong number of arguments, which PHP answers with a fatal\nerror \u2014 so the last click of the assistant produced a white screen. The test\nbench now reads every logging call in the plugin and checks it passes what the\nlog actually asks for.<\/p>\n\n<p><strong>The assistant walks you through it now.<\/strong> It showed every question at once and\nleft you to work out where the end was. It asks <strong>one question at a time<\/strong>, with\n<strong>Back<\/strong> and <strong>Continue<\/strong> at the bottom and a row of steps along the top showing\nwhere you are, what is behind you, and what is still to come. Continue stays\ngreyed out, with a reason, until the question in front of you has an answer \u2014 a\nbutton that disappears just leaves you looking for it.<\/p>\n\n<h4>1.8.2<\/h4>\n\n<p><strong>Fixed: finishing the assistant said \"Security check failed\".<\/strong> Its form was\nsigned with the name of a different action, which is the same as not signing it\nat all \u2014 so the one button that mattered died at the last step. Every form is now\nchecked against the action it posts, by the test bench, so this cannot come back\nquietly.<\/p>\n\n<h4>1.8.1<\/h4>\n\n<p><strong>The creation wizard stops asking what the assistant asks.<\/strong> It had a \"Tickets\"\nstep wanting a price and a capacity, and then the assistant wanted the same two\nnumbers again \u2014 with the zones and the room that give them meaning. One number\nasked on two screens is how two screens end up disagreeing about it. Creating an\nevent is now three steps, and the last button says what happens next: <em>Set up\nplaces and prices<\/em>.<\/p>\n\n<h4>1.8.0<\/h4>\n\n<p><strong>An assistant that sets up an event by asking about it.<\/strong> Prices, zones,\ncapacity and the moment a ticket goes out are one decision described on four\nscreens, and nobody arriving for the first time can know that. So the assistant\nhas the conversation instead \u2014 starting from a picture of the kind of room you\nare filling, not a word for it \u2014 and writes the answers into the tabs.<\/p>\n\n<ul>\n<li>It opens by itself after you create an event, and there is a button for it on\n<strong>Prices &amp; places<\/strong> whenever you want to run it again.<\/li>\n<li><strong>Every answer decides the next question, and the panel beside it shows the\nconsequence<\/strong>: the room being drawn, the prices a guest will see, and what the\nticket will actually print.<\/li>\n<li>It tells you what each answer settles and why \u2014 <em>\"the ticket carries the table,\nso the chair number is not asked: at a round table it tells nobody anything.\"<\/em><\/li>\n<li><strong>It owns nothing.<\/strong> It adds no setting of its own; everything it decides is\nstill there, field by field, on the tab that always owned it.<\/li>\n<li>It will not quietly rebuild a room for an event that already has bookings \u2014\na place is printed on a ticket the moment it is given out.<\/li>\n<\/ul>\n\n<h4>1.7.0<\/h4>\n\n<p><strong>One tab for money, capacity and places.<\/strong> The price and the capacity lived on\none screen and the room on another, so you could set a capacity of 500 and then\ndescribe a room holding 380 \u2014 and nothing said so until somebody was turned away\nat the door. They are one decision, so they are now one tab: <strong>Prices &amp; places<\/strong>.\nA place there is whatever your event hands out: a seat, a table, a row, or a\nwhole area.<\/p>\n\n<ul>\n<li><strong>Pricing &amp; capacity is gone.<\/strong> The price, the currency and the capacity moved\nto Prices &amp; places, along with the price categories and the zones.<\/li>\n<li><strong>When &amp; where is now Information &amp; details<\/strong>, and holds what a guest is told\nbefore booking \u2014 including <em>this event serves food or drinks<\/em> and the sponsor\nstrip.<\/li>\n<li>Old links to the removed tab land on Prices &amp; places instead of dropping you\nback at the start.<\/li>\n<\/ul>\n\n<p><strong>Fixed: the back button brought a finished booking form back to life.<\/strong> After\nbooking, pressing Back showed the form still filled in, with the submit button\nstill greyed out and the countdown frozen \u2014 a page that looked broken. A booking\ncould never have been made twice (the server has refused that since 1.3.0), but\nthe page now reloads itself, with an empty form, a live clock and a working\nbutton.<\/p>\n\n<h4>1.6.1<\/h4>\n\n<p><strong>Fixed: named zones were all sold at the price of the event.<\/strong> Give three zones\nthree prices and the booking page offered three zones \u2014 at one price. Worse, the\nbooking was charged that price too, so a zone priced higher than the event was\nsold short and one priced lower was overcharged. The room hands the booking form\na zone carrying its own price; the form then asked a separate question \u2014 <em>what\ndoes this cost?<\/em> \u2014 that nothing was answering for a zone. It answers now.<\/p>\n\n<p><strong>Fixed: deleting a zone moved the bookings of the one below it.<\/strong> Zone\nreferences were rebuilt from their position on every save, so removing the first\nzone renamed the second into it, and a booking already sold pointed at a zone its\nguest never bought. Each zone now carries its own reference.<\/p>\n\n<p><strong>Fixed: a zone of 25 places sold 40.<\/strong> A capacity that did not divide evenly\ninto rows was rounded up to fill the last row, silently. The surplus places are\nnow held back, and a zone holds the number you typed.<\/p>\n\n<h4>1.6.0<\/h4>\n\n<p><strong>Four capabilities that used to be withheld are now in the plugin.<\/strong><\/p>\n\n<ul>\n<li><strong>The ticket studio.<\/strong> Bring in your own artwork, generate colour variations\nof it, and place every printed field yourself on a visual field map, on the\nDesigns screen.<\/li>\n<li><strong>The floor plan editor.<\/strong> Draw the room: the stage, curved rows, round\ntables, standing areas and aisles, with numbering that runs whichever way\nyour venue counts \u2014 and a guest who picks their own seat on the plan.<\/li>\n<li><strong>Price categories.<\/strong> VIP, table, early bird, member: several prices on one\nevent instead of one.<\/li>\n<li><strong>Discount codes.<\/strong> Fixed or percentage, limited by date or by number of\nuses.<\/li>\n<\/ul>\n\n<p>Nothing was removed and nothing changed shape: existing events, designs, rooms\nand settings are read exactly as before. If you never open these screens, the\nplugin behaves as it did.<\/p>\n\n<h4>1.2.1<\/h4>\n\n<p>Two security fixes, both reported responsibly by <strong>Alik<\/strong>, who tested 1.0.9 in\nan isolated environment and sent a clear, accurate write-up of each. Both were\nreal. Thank you.<\/p>\n\n<p><strong>Bookings for one event now happen one at a time.<\/strong> Counting the free seats\nand taking one were two separate steps, and between two steps another request\nfits: two people clicking at the same instant could both be told there was one\nseat left, and both take it. The capacity check was never wrong -- it was just\non the wrong side of a gap. That gap is now closed with a lock held for the\nlength of a booking, per event, so a busy night with four events does not queue\ninto one line. Every capacity rule is now inside it: the event's own capacity,\neach price category, and each area of the room. (CWE-362.)<\/p>\n\n<p><strong>Forwarding headers are no longer believed by default.<\/strong> The plugin recognises\na visitor by their address in order to count how often they book. It used to\nread CF-Connecting-IP, X-Real-IP or X-Forwarded-For if they were present --\nbut those are written by whoever is making the request, so anybody could invent\none and get a fresh allowance. Only the address the connection actually came\nfrom is used now. If your site really is behind Cloudflare or a reverse proxy,\nsay so under Settings \u2192 Anti-abuse, and the panel shows you what your server is\nactually sending so the choice is not a guess. Naming your proxies in\nwp-config.php as BFNET_TRUSTED_PROXIES narrows it further. Where a list of\nforwarded addresses is read, the plugin now takes the entry the nearest proxy\nwrote rather than the one at the front, which is the one a visitor can invent.\n(CWE-799.)<\/p>\n\n<p><strong>Also<\/strong>: a second booking limit counted per email address, so getting around\nthe per-connection one is no longer enough on its own.<\/p>\n\n<h4>1.2.0<\/h4>\n\n<p>Everything below arrived since 1.0.9. It was built and tested over several\ninternal builds; this is the first of them anyone is offered, because a version\nthat was superseded the same week is not a version worth installing.<\/p>\n\n<p><strong>Rooms and places.<\/strong> An event can now describe where people sit. Three levels,\nand nobody is made to climb them: a plain capacity, named zones with a capacity\nand a price each, or -- with Pro -- a drawn floor plan. Seats are worked out\nfrom a rule rather than stored, so a four thousand seat auditorium is twenty\nrows in your database and not four thousand. The numbering runs whichever way\nyour venue counts: left to right, right to left, odd and even out from the\ncentre, alternating by row. It can skip row I and O, skip 13, start anywhere,\nand carry a prefix.<\/p>\n\n<p><strong>Card payment with Stripe.<\/strong> Set your own secret key and a guest can pay on\nStripe's own page. No card number reaches your site. A payment is confirmed by\nreading it back from Stripe and by a signed message Stripe sends your site --\nnever by the browser that came back. Your places are held for the length of the\npayment session and released on their own if nobody finishes, so the same seat\ncannot be sold twice. Card payment is optional, per event: an evening paid at\nthe door works exactly as it did before.<\/p>\n\n<p><strong>When the ticket goes out, per event.<\/strong> Acknowledge the booking now and send\nthe ticket once you have decided where somebody sits, or -- when the event has\na room -- send it straight away with the place printed on it.<\/p>\n\n<p><strong>The booking page no longer depends on a page.<\/strong> If a direct link to an event\nhas nowhere to open, the plugin renders the booking form itself inside your\ntheme. It also creates the booking page for you, once, rather than leaving a\nlink that opens nothing.<\/p>\n\n<p><strong>Fixed<\/strong><\/p>\n\n<ul>\n<li>A booking link opened an empty page on sites that had never added the\nshortcode themselves.<\/li>\n<li>Guest rows two and after on the manual booking screen were greyed out instead\nof hidden, because the plugin's own stylesheet beat the browser's rule.<\/li>\n<li>The Reserve button was clipped by themes with their own line height.<\/li>\n<li>Sold-out categories were still offered for booking; a category is now closed\nby the room as well as by its own capacity, and the last place is re-counted\nat the moment the booking is written rather than only when the page was\ndrawn.<\/li>\n<li>Reverting a booking to awaiting payment cleared the check-ins but kept them\nin the history, named.<\/li>\n<\/ul>\n\n<p><strong>Also added<\/strong><\/p>\n\n<ul>\n<li>Add a guest by hand, for the bookings that arrive by phone.<\/li>\n<li>A live floor view of the evening -- what is taken, what has arrived, and what\nis full -- with the room drawn as the organizer drew it.<\/li>\n<li>The confirmation screen says which address the email went to,  &hellip;<\/li>\n<\/ul>","raw_excerpt":"Name every guest, send each a QR ticket as a PDF, scan them in at the door. Seven languages, Arabic included. Unlimited events. No fees.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/cy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/361265","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/cy.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/cy.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=361265"}],"author":[{"embeddable":true,"href":"https:\/\/cy.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/bitforgenet"}],"wp:attachment":[{"href":"https:\/\/cy.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=361265"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/cy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=361265"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/cy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=361265"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/cy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=361265"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/cy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=361265"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/cy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=361265"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}