{"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-02T20:20:09","modified_gmt":"2026-09-02T20:20:09","slug":"bitforgenet-guest-tickets","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/bitforgenet-guest-tickets\/","author":23537276,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.9","stable_tag":"1.0.9","tested":"7.1","requires":"5.8","requires_php":"7.4","requires_plugins":null,"header_name":"BitForgeNet Guest Tickets and Door 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":"12304a","last_updated":"2026-09-02 20:20:09","external_support_url":"","external_repository_url":"","donate_link":"","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":67,"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}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3678116,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3678116,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3678116,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3678116,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.8","1.0.9"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[27702,1486,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-check-in","plugin_tags-events","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=3678116","banner_2x":"https:\/\/ps.w.org\/bitforgenet-guest-tickets\/assets\/banner-1544x500.png?rev=3678116","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/bitforgenet-guest-tickets\/assets\/icon-128x128.png?rev=3678116","icon_2x":"https:\/\/ps.w.org\/bitforgenet-guest-tickets\/assets\/icon-256x256.png?rev=3678116","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>BitForgeNet Guest Tickets runs the evening from the first booking to the last\nguest through the door. It was built for clubs, bars and party promoters \u2014 the\npeople for whom an event is a door, a list, and a queue outside.<\/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>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>Private events, galas and weddings<\/li>\n<li>Associations, schools and community evenings<\/li>\n<li>Anyone taking bookings by transfer, WhatsApp or cash rather than by card<\/li>\n<\/ul>\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<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<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<h4>Payment on your terms<\/h4>\n\n<p>A booking arrives pending. You confirm the payment however you actually take it\n\u2014 bank transfer, WhatsApp, cash at the office \u2014 and the tickets go out the\nmoment you do. Nothing is issued for money you have not received.<\/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>Event editor<\/strong> \u2014 a four-step wizard to create one, six tabs to refine it:\ndates, capacity, price, registration window, description, artwork.<\/li>\n<li><strong>Organizers library<\/strong> \u2014 name, logo, colours, contact. Reused across events.<\/li>\n<li><strong>Venues library<\/strong> \u2014 address, capacity, notes. Reused across events.<\/li>\n<li><strong>Public booking page<\/strong> \u2014 one shortcode, <code>[bitforgenet_registration]<\/code>. Asks\nfor the name of every person coming, respects capacity and the registration\nwindow, and confirms on screen.<\/li>\n<li><strong>Bookings screen<\/strong> \u2014 search, filter by event and status, confirm payment,\nadd an internal note, resend an email, cancel.<\/li>\n<li><strong>Personal QR tickets<\/strong> \u2014 one per guest, rendered as a PDF, sent by email\nwith a download link alongside.<\/li>\n<li><strong>Built-in ticket design<\/strong>, generated in the colour of your choice and\npainted on demand at 300 dpi.<\/li>\n<li><strong>Door check-in station<\/strong> for any phone, opened with a per-event door code,\nwith live counters and multi-station scanning.<\/li>\n<li><strong>Printable roll-call list<\/strong> for the evenings the network fails.<\/li>\n<li><strong>CSV export with a column picker<\/strong> \u2014 bookings or guests, one event or all,\nevery field the plugin holds, and it remembers what you ticked.<\/li>\n<li><strong>Tools and data<\/strong> \u2014 a system check that tells you why a ticket or an email\ndid not arrive, a test-ticket email, a database check, and an\narchive-and-clear that copies every booking into archive tables before\nemptying the live ones, behind a one-time code sent to an address you\nnominate.<\/li>\n<li><strong>Searchable archive<\/strong> of everything that has been cleared.<\/li>\n<li><strong>Activity log<\/strong> \u2014 who did what, and when.<\/li>\n<li><strong>Delete-all-data on uninstall<\/strong>, if you tick it. Off by default.<\/li>\n<\/ul>\n\n<h4>BitForgeNet Pro<\/h4>\n\n<p>Pro is a separate plugin, bought from us and installed alongside this one. It\ndoes not unlock anything here \u2014 this plugin is complete on its own. Pro adds\ncapabilities that are not in it at all:<\/p>\n\n<ul>\n<li><strong>Ticket studio<\/strong> \u2014 bring in your own artwork, generate colour variations of\nit, and move every printed field where you want it with a visual field map.<\/li>\n<li><strong>Seating and tables<\/strong> \u2014 draw the floor, assign a seat or a table to each\nguest, and print it on the ticket.<\/li>\n<li><strong>Price categories<\/strong> \u2014 VIP, table, early bird, member: several prices on one\nevent instead of one.<\/li>\n<li><strong>Discount codes<\/strong> \u2014 fixed or percentage, limited by date or by number of\nuses.<\/li>\n<li><strong>Online card payment<\/strong> \u2014 the booking pays itself and the tickets go out with\nno confirmation step. This is what the first Pro release is being built\naround.<\/li>\n<\/ul>\n\n<p>Pro is announced at https:\/\/bitforgenet.dev\/<\/p>\n\n<h4>Privacy<\/h4>\n\n<p>The plugin stores what a booking needs \u2014 names, email address, phone number \u2014\nin your own database, on your own server. It sends nothing anywhere else. Email\ngoes out through WordPress, which means through whatever mail service your site\nalready uses. There is no external service, no account to create, and no\ntelemetry.<\/p>\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>BitForgeNet Guest Tickets<\/strong>, install and\nactivate. Or upload the ZIP under Plugins -&gt; Add New -&gt; Upload Plugin.<\/li>\n<li>Open <strong>BitForgeNet -&gt; Settings<\/strong> and set your currency, your From address\nand your payment instructions.<\/li>\n<li>Open <strong>BitForgeNet -&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>BitForgeNet -&gt; Events -&gt; New event<\/strong>.<\/li>\n<li>Put the booking form on a page with the shortcode\n   [bitforgenet_registration].<\/li>\n<li>On the night, open <strong>BitForgeNet -&gt; Door scanner<\/strong>, note the door code, and\ngive the link and the code to whoever is on the door.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\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=\"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=\"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=\"can%20i%20take%20payment%20online%3F\"><h3>Can I take payment online?<\/h3><\/dt>\n<dd><p>Not in the free plugin. A booking arrives pending and you confirm it once you\nhave been paid \u2014 by transfer, by WhatsApp, or in cash. Card payment is what\nBitForgeNet Pro is being built around.<\/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=\"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>The free plugin generates its design for you, in the colour you choose.\nBringing in your own artwork and placing the printed fields yourself is what\nthe ticket studio in BitForgeNet Pro does.<\/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=\"is%20it%20translated%3F\"><h3>Is it translated?<\/h3><\/dt>\n<dd><p>Every string in the plugin is translatable. Translations are welcome at\nhttps:\/\/translate.wordpress.org\/projects\/wp-plugins\/bitforgenet-guest-tickets\/<\/p><\/dd>\n<dt id=\"where%20do%20i%20get%20help%3F\"><h3>Where do I get help?<\/h3><\/dt>\n<dd><p>The support forum on this page, or contact@bitforgenet.dev<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.9<\/h4>\n\n<ul>\n<li>The logo printed on the ticket, on the door's code screen and beside an\norganizer with no artwork of its own is the anvil alone. It had been the full\nlockup, wordmark included, which the renderer fits inside its box: a wide\nimage with words in it shrank to a smudge nobody could read<\/li>\n<li>The plugin's page is rewritten. The feature list now says what this plugin\nactually does -- the organizer and venue libraries, the export column picker,\nthe system check and the archive were all shipped and none of them were\nmentioned, while three of them were wrongly described as belonging to Pro.\nThe Pro section says what Pro adds instead of hinting at it, and the FAQ\nanswers fifteen questions rather than five. No code changed for this<\/li>\n<\/ul>\n\n<h4>1.0.8<\/h4>\n\n<ul>\n<li>Every template under admin\/views\/ and public\/views\/ states once, at the top of\nthe file, that the PrefixAllGlobals naming rule does not apply to it. A\ntemplate is included from a method, never at file scope, so its variables\nbelong to that method's scope rather than the global one, and PHPCS -- reading\neach file on its own -- has no way to see where the include happens. No\nvariable was renamed and nothing behaves differently<\/li>\n<\/ul>\n\n<h4>1.0.7<\/h4>\n\n<ul>\n<li>The plugin is renamed. It was submitted as \"2KEvents\", and \"2K\" is a\nregistered trademark of Take-Two Interactive that we have no right to lead a\nname with. The display name, the slug, the text domain, the shortcodes and\nevery PHP prefix now read BitForgeNet \u2014 the name of the site that publishes\nit, bitforgenet.dev<\/li>\n<li>Every stylesheet and script the plugin prints goes out through the enqueue\nAPI. The door station and the two screens around it are their own HTML\ndocuments, served on their own endpoint before the theme runs, so they had\ncarried their CSS and JS inside the page. They now register handles and print\nthem by name, the two runtime values arriving through wp_add_inline_style()\nand wp_add_inline_script()<\/li>\n<li>The admin menu icon is assembled from the mark at runtime and has no file\nbehind it, so it registers a style handle with no source rather than printing\na style tag into the head, and moves to admin_enqueue_scripts<\/li>\n<li>The code prefix is five characters. It was three, which is under the four the\ndirectory asks for<\/li>\n<\/ul>\n\n<h4>1.0.6<\/h4>\n\n<ul>\n<li>Finished the tidy-up the last two releases started: every code-quality\nsuppression in the plugin is now either stated once for a whole file or\nwritten on the single line it covers, and none of them can change the\nmeaning of another one elsewhere in the same file. No behaviour changes<\/li>\n<\/ul>\n\n<h4>1.0.5<\/h4>\n\n<ul>\n<li>Fixed suppression comments that did not cover what they appeared to cover.\nOne kind switched every code-quality rule back on rather than the one it had\nswitched off, quietly undoing notes written elsewhere in the same file; the\nother sat above a nine-line statement instead of around it. No behaviour\nchanges for anyone using the plugin<\/li>\n<\/ul>\n\n<h4>1.0.4<\/h4>\n\n<ul>\n<li>Request input is now read the way it should be read: eight admin screens\napplied the integer cast to the whole expression rather than to the value,\nand the export column list is sanitised where it arrives rather than three\ncalls later<\/li>\n<li>The design proof screen now checks its parameter exists before reading it<\/li>\n<li>Every file that queries the plugin's own tables says so once, at the top,\nwith the reason<\/li>\n<li>Dropped a call asking WordPress to load translations it already loads by\nitself, and closed a hatch that let the QR encoder run outside WordPress<\/li>\n<\/ul>\n\n<h4>1.0.3<\/h4>\n\n<ul>\n<li>Fixed translatable strings that a translator could not have got right. The\nguest counter on an order wrote its two numbers as bare placeholders, which\na language that reorders the words has no way to move, and several strings\ncarrying a placeholder had no note saying what the placeholder holds.<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>The plugin header pointed at a placeholder address. It now points at the\nplugin's own page, and the author is named.<\/li>\n<li>The address authorised to reset the plugin's data shipped with a developer's\nown address already filled in. It now starts empty, and the tool refuses to\nrun until an administrator sets one.<\/li>\n<li>Added the full text of the SIL Open Font License beside the bundled Poppins\nand Lora fonts, as that licence requires.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Fixed the door station refusing every scan with \"Station closed\". The page\nopened and showed the event, but each scan was posted to an address that no\nlonger said which event the station was watching, so the server treated it as\na station that had signed out. Nobody could be checked in<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First release.<\/li>\n<\/ul>","raw_excerpt":"Name every guest, send each one a personal QR ticket as a PDF, and scan them in at the door from a phone. Unlimited events and tickets. No fees.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/361265","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=361265"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/bitforgenet"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=361265"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=361265"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=361265"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=361265"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=361265"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=361265"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}