{"id":340980,"date":"2026-07-20T10:15:17","date_gmt":"2026-07-20T10:15:17","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/orange-cat-qr-event-tickets\/"},"modified":"2026-07-20T12:06:11","modified_gmt":"2026-07-20T12:06:11","slug":"orange-cat-qr-event-tickets","status":"publish","type":"plugin","link":"https:\/\/test.wordpress.org\/plugins\/orange-cat-qr-event-tickets\/","author":23533005,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.2.0","stable_tag":"0.2.0","tested":"7.0.4","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"Orange Cat QR Event Tickets","header_author":"The Orange Cat","header_description":"Sell event tickets with WooCommerce, deliver a QR code per attendee, and check them in from any phone camera \u2014 no app required.","assets_banners_color":"eccbac","last_updated":"2026-07-20 12:06:11","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/wordpress.org\/plugins\/orange-cat-qr-event-tickets\/","header_author_uri":"https:\/\/theorangecat.dev","rating":0,"author_block_rating":0,"active_installs":0,"downloads":120,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.2.0":{"tag":"0.2.0","author":"tihomir22","date":"2026-07-20 12:06:11"}},"upgrade_notice":{"0.2.0":"<p>Attendee names are now a free feature; also fixes the text domain and trims translation files from the ZIP.<\/p>","0.1.0":"<p>Initial release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3614681,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3614681,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3614681,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3614681,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.2.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3614681,"resolution":"1","location":"assets","locale":"","width":1280,"height":932},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3614681,"resolution":"2","location":"assets","locale":"","width":1280,"height":1092},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3614681,"resolution":"3","location":"assets","locale":"","width":1280,"height":972},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3614681,"resolution":"4","location":"assets","locale":"","width":1280,"height":1011},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3614681,"resolution":"5","location":"assets","locale":"","width":1280,"height":903},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3614681,"resolution":"6","location":"assets","locale":"","width":1280,"height":761}},"screenshots":{"1":"Event fields on the WooCommerce product edit screen (checkbox, start\/end date, location, sales-close offset).","2":"The \"Your tickets\" email with one embedded QR code per seat.","3":"The check-in page scanning a ticket with the phone camera, showing a green \"valid\" verdict.","4":"An \"already used\" (yellow) verdict with the previous check-in time.","5":"The manual search fallback listing a buyer's tickets with a check-in button.","6":"The upcoming events listing rendered by the <code>[octk_events]<\/code> shortcode."}},"plugin_section":[],"plugin_tags":[27702,27824,1486,1373,286],"plugin_category":[40,45],"plugin_contributors":[272436],"plugin_business_model":[],"class_list":["post-340980","plugin","type-plugin","status-publish","hentry","plugin_tags-check-in","plugin_tags-event-tickets","plugin_tags-events","plugin_tags-qr-code","plugin_tags-woocommerce","plugin_category-calendar-and-events","plugin_category-ecommerce","plugin_contributors-tihomir22","plugin_committers-tihomir22"],"banners":{"banner":"https:\/\/ps.w.org\/orange-cat-qr-event-tickets\/assets\/banner-772x250.png?rev=3614681","banner_2x":"https:\/\/ps.w.org\/orange-cat-qr-event-tickets\/assets\/banner-1544x500.png?rev=3614681","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/orange-cat-qr-event-tickets\/assets\/icon-128x128.png?rev=3614681","icon_2x":"https:\/\/ps.w.org\/orange-cat-qr-event-tickets\/assets\/icon-256x256.png?rev=3614681","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/orange-cat-qr-event-tickets\/assets\/screenshot-1.png?rev=3614681","caption":"Event fields on the WooCommerce product edit screen (checkbox, start\/end date, location, sales-close offset)."},{"src":"https:\/\/ps.w.org\/orange-cat-qr-event-tickets\/assets\/screenshot-2.png?rev=3614681","caption":"The \"Your tickets\" email with one embedded QR code per seat."},{"src":"https:\/\/ps.w.org\/orange-cat-qr-event-tickets\/assets\/screenshot-3.png?rev=3614681","caption":"The check-in page scanning a ticket with the phone camera, showing a green \"valid\" verdict."},{"src":"https:\/\/ps.w.org\/orange-cat-qr-event-tickets\/assets\/screenshot-4.png?rev=3614681","caption":"An \"already used\" (yellow) verdict with the previous check-in time."},{"src":"https:\/\/ps.w.org\/orange-cat-qr-event-tickets\/assets\/screenshot-5.png?rev=3614681","caption":"The manual search fallback listing a buyer's tickets with a check-in button."},{"src":"https:\/\/ps.w.org\/orange-cat-qr-event-tickets\/assets\/screenshot-6.png?rev=3614681","caption":"The upcoming events listing rendered by the <code>[octk_events]<\/code> shortcode."}],"raw_content":"<!--section=description-->\n<p>Orange Cat QR Event Tickets turns any WooCommerce product into an event and handles the whole ticketing flow: sell tickets, email a QR code for every seat, and validate attendees at the door by scanning with a phone \u2014 no dedicated app required.<\/p>\n\n<p>There are no ticket limits: unlimited events, unlimited tickets, no per-ticket fees.<\/p>\n\n<p>Perfect for concerts, workshops, talks, fairs, screenings and meetups \u2014 any event where you sell a seat and check people in at the door.<\/p>\n\n<p><strong>How it works<\/strong><\/p>\n\n<ol>\n<li>Mark a product as an event and set the start date, optional end date and location.<\/li>\n<li>Customers buy tickets through the normal WooCommerce checkout (guest checkout works).<\/li>\n<li>When the order is paid, one QR ticket per seat is generated and emailed, using your store's WooCommerce email design.<\/li>\n<li>At the door, staff open a page with the check-in shortcode and scan tickets with the phone camera. The verdict is instant: green (valid), yellow (already used, with the time), or red (revoked or invalid).<\/li>\n<li>Refunds and cancellations invalidate the affected QR codes automatically and release capacity.<\/li>\n<\/ol>\n\n<p>The check-in page is protected by a capability, not by a secret URL: only logged-in staff with the right role can scan or search. QR payloads are HMAC-signed, and check-in is atomic, so two doors can never validate the same ticket twice.<\/p>\n\n<h3>Features<\/h3>\n\n<ul>\n<li>Unlimited events and QR tickets \u2014 no lifetime caps, no per-ticket fees.<\/li>\n<li>One signed QR code per purchased seat, emailed with your store's WooCommerce email template.<\/li>\n<li>Web-based check-in: scan with the phone camera straight from the browser, no app to install.<\/li>\n<li>Instant visual verdict: valid \/ already used (with time) \/ revoked \/ invalid.<\/li>\n<li>Manual fallback: find tickets by buyer email or order number and check them in with one tap.<\/li>\n<li>Capacity control using native WooCommerce stock management.<\/li>\n<li>Configurable sales close: stop selling a set number of hours before the event starts.<\/li>\n<li>Automatic ticket revocation on full or partial refunds and on cancellations.<\/li>\n<li>Upcoming and past event listings via shortcodes.<\/li>\n<li>Guest-checkout friendly \u2014 customers do not need an account.<\/li>\n<li>WooCommerce High-Performance Order Storage (HPOS) compatible.<\/li>\n<li>Translation-ready; ships with a Spanish (es_ES) translation.<\/li>\n<\/ul>\n\n<h3>Credits<\/h3>\n\n<p>This plugin bundles the following third-party open-source libraries:<\/p>\n\n<ul>\n<li><a href=\"https:\/\/github.com\/chillerlan\/php-qrcode\">chillerlan\/php-qrcode<\/a> (MIT License) \u2014 QR code generation.<\/li>\n<li><a href=\"https:\/\/github.com\/chillerlan\/php-settings-container\">chillerlan\/php-settings-container<\/a> (MIT License) \u2014 dependency of php-qrcode.<\/li>\n<li><a href=\"https:\/\/github.com\/nimiq\/qr-scanner\">qr-scanner<\/a> by nimiq (MIT License) \u2014 in-browser QR code scanning for the check-in page.<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Make sure WooCommerce is installed and active.<\/li>\n<li>Upload the plugin folder to <code>\/wp-content\/plugins\/<\/code>, or install the ZIP from Plugins &gt; Add New &gt; Upload Plugin.<\/li>\n<li>Activate the plugin through the Plugins screen in WordPress.<\/li>\n<li>Create or edit a product, tick \"This is an event\" in the General tab, and set the start date (and optionally end date, location, and how many hours before the start sales should close). Enable \"Manage stock\" to cap capacity.<\/li>\n<li>Create a page with the <code>[octk_checkin]<\/code> shortcode for your door staff, and (optionally) pages with <code>[octk_events]<\/code> and <code>[octk_events past]<\/code> to list upcoming and past events. Serve the check-in page over HTTPS \u2014 browsers require it for camera access.<\/li>\n<li>Assign the \"Event Staff\" role (created on activation) to the users who will validate tickets.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20woocommerce%3F\"><h3>Do I need WooCommerce?<\/h3><\/dt>\n<dd><p>Yes. Orange Cat QR Event Tickets is a WooCommerce extension: events are WooCommerce products and ticket sales go through the WooCommerce checkout. WooCommerce 8.0 or newer is required.<\/p><\/dd>\n<dt id=\"does%20check-in%20work%20without%20an%20app%3F\"><h3>Does check-in work without an app?<\/h3><\/dt>\n<dd><p>Yes. The check-in page runs in any modern mobile browser and uses the phone camera to scan QR codes \u2014 there is nothing to install. The page must be served over HTTPS, because browsers only grant camera access on secure origins. A manual search (by buyer email or order number) is available as a fallback.<\/p><\/dd>\n<dt id=\"do%20the%20qr%20codes%20expire%3F\"><h3>Do the QR codes expire?<\/h3><\/dt>\n<dd><p>No. A ticket's QR code stays valid until the ticket is checked in, or until it is revoked by a refund or cancellation. Codes are HMAC-signed; if you ever need to invalidate every issued code at once, you can regenerate the signing secret from the settings screen.<\/p><\/dd>\n<dt id=\"what%20happens%20with%20refunds%20and%20cancellations%3F\"><h3>What happens with refunds and cancellations?<\/h3><\/dt>\n<dd><p>Cancelling an order or refunding it in full revokes all of its tickets and their QR codes. A partial refund revokes only the refunded quantity for that line, preferring tickets that have not been scanned yet. Capacity is released through WooCommerce's native stock handling.<\/p><\/dd>\n<dt id=\"is%20there%20a%20pro%20version%3F\"><h3>Is there a Pro version?<\/h3><\/dt>\n<dd><p>Yes, a separate Pro add-on extends the free plugin with: ticket types via product variations (e.g. General \/ VIP), a designed per-ticket PDF attached to the email and downloadable from the customer account, offline check-in (validate without a connection and sync later), split staff capabilities with an attendance log of who validated what, and an attendance report screen with CSV export. Named attendees are part of the free plugin, not the add-on. The free plugin is fully functional on its own; the Pro add-on is optional.<\/p><\/dd>\n<dt id=\"is%20the%20plugin%20really%20free%3F\"><h3>Is the plugin really free?<\/h3><\/dt>\n<dd><p>Yes, completely. Unlimited events, unlimited tickets, no per-ticket fees and no time limits \u2014 selling tickets, emailing a signed QR for every seat and checking attendees in all work with the free plugin alone. An optional Pro add-on adds extras (see \"Is there a Pro version?\" above).<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20the%20woocommerce%20block%20checkout%3F\"><h3>Does it work with the WooCommerce block checkout?<\/h3><\/dt>\n<dd><p>Ticket generation, the ticket email and check-in work with both the classic and the block checkout. The optional attendee-name field currently attaches to the classic checkout shortcode (<code>[woocommerce_checkout]<\/code>); block-checkout support for that field is on the roadmap.<\/p><\/dd>\n<dt id=\"which%20themes%20are%20supported%3F\"><h3>Which themes are supported?<\/h3><\/dt>\n<dd><p>Any standard WooCommerce-compatible theme. The check-in page and the event listings ship with their own minimal styles and inherit your theme's typography, so they blend in without configuration.<\/p><\/dd>\n<dt id=\"how%20do%20i%20give%20my%20staff%20access%20to%20check-in%3F\"><h3>How do I give my staff access to check-in?<\/h3><\/dt>\n<dd><p>Activating the plugin creates an \"Event Staff\" role. Assign it to the users who will validate tickets, then share the URL of the page holding the <code>[octk_checkin]<\/code> shortcode. Serve that page over HTTPS \u2014 browsers only allow camera access on secure origins.<\/p><\/dd>\n<dt id=\"can%20i%20customize%20the%20ticket%20email%3F\"><h3>Can I customize the ticket email?<\/h3><\/dt>\n<dd><p>The \"Your tickets\" email uses your store's standard WooCommerce email template, so it inherits the header, footer, colours and logo you set under WooCommerce &rarr; Settings &rarr; Emails.<\/p><\/dd>\n<dt id=\"is%20attendee%20data%20stored%20safely%3F\"><h3>Is attendee data stored safely?<\/h3><\/dt>\n<dd><p>Everything stays on your own site. Attendee names live on the order, QR payloads are HMAC-signed locally with no external service, and uninstalling the plugin removes its table, options, role and capabilities.<\/p><\/dd>\n<dt id=\"does%20it%20work%20on%20wordpress%20multisite%3F\"><h3>Does it work on WordPress multisite?<\/h3><\/dt>\n<dd><p>Yes. Activate it per site, like any other WooCommerce extension.<\/p><\/dd>\n<dt id=\"which%20languages%20are%20included%3F\"><h3>Which languages are included?<\/h3><\/dt>\n<dd><p>English (source) and Spanish (es_ES). The plugin is translation-ready, so additional languages can be added with any standard WordPress translation workflow.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.2.0<\/h4>\n\n<ul>\n<li>Attendee names are now a fully-functional free feature: capture one attendee name per ticket at checkout (opt-in per product), shown on the ticket, the ticket email, and the check-in screen.<\/li>\n<li>Removed an unused email-attachment extension filter that had no functional purpose in the free plugin.<\/li>\n<li>Text domain now matches the assigned wordpress.org slug (orange-cat-qr-event-tickets).<\/li>\n<li>Translation .po\/.mo files are no longer bundled in the plugin ZIP; only the .pot template ships (translations are delivered via translate.wordpress.org).<\/li>\n<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>Initial release: event products, unlimited signed QR tickets by email, web camera check-in with a manual search fallback, capacity via stock, configurable sales close, automatic revocation on cancellation and full\/partial refunds, upcoming\/past event shortcodes, HPOS compatibility, and a Spanish (es_ES) translation.<\/li>\n<\/ul>","raw_excerpt":"Sell event tickets with WooCommerce: unlimited QR tickets by email, web-based camera check-in with no app, capacity via stock, and an event history.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/340980","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=340980"}],"author":[{"embeddable":true,"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/tihomir22"}],"wp:attachment":[{"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=340980"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=340980"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=340980"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=340980"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=340980"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=340980"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}