{"id":319266,"date":"2026-06-01T17:04:48","date_gmt":"2026-06-01T17:04:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/chit-download-codes-for-woocommerce\/"},"modified":"2026-08-10T21:24:43","modified_gmt":"2026-08-10T21:24:43","slug":"chit-download-codes-for-woocommerce","status":"publish","type":"plugin","link":"https:\/\/ky.wordpress.org\/plugins\/chit-download-codes-for-woocommerce\/","author":23507262,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.1","stable_tag":"1.1","tested":"7.0.3","requires":"6.4","requires_php":"7.4","requires_plugins":null,"header_name":"Chit - Download codes for WooCommerce","header_author":"Jack Gleeson","header_description":"Generate redemption codes for physical sales that unlock WooCommerce digital downloads.","assets_banners_color":"cbcbc9","last_updated":"2026-08-10 21:24:43","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/inneoin.com\/chit.html","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":176,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0":{"tag":"1.0","author":"jpgleeson","date":"2026-06-01 17:04:35"},"1.1":{"tag":"1.1","author":"jpgleeson","date":"2026-08-10 21:24:43"}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3557076,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3557076,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3557076,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3557076,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3557076,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0","1.1"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[2445,5440,265362,35576,286],"plugin_category":[45],"plugin_contributors":[265363],"plugin_business_model":[],"class_list":["post-319266","plugin","type-plugin","status-publish","hentry","plugin_tags-codes","plugin_tags-downloads","plugin_tags-redemption","plugin_tags-voucher","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-jpgleeson","plugin_committers-jpgleeson"],"banners":{"banner":"https:\/\/ps.w.org\/chit-download-codes-for-woocommerce\/assets\/banner-772x250.png?rev=3557076","banner_2x":"https:\/\/ps.w.org\/chit-download-codes-for-woocommerce\/assets\/banner-1544x500.png?rev=3557076","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/chit-download-codes-for-woocommerce\/assets\/icon.svg?rev=3557076","icon":"https:\/\/ps.w.org\/chit-download-codes-for-woocommerce\/assets\/icon.svg?rev=3557076","icon_2x":false,"generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p><strong>Chit<\/strong> bridges your physical sales and your WooCommerce digital downloads. Print a code on a card, sticker, leaflet, or receipt; the customer enters the code on your site to receive access to the product's downloadable files. Picture this for selling in person at a market - you're selling your books but normally through webstore orders people get a PDF download too. This squares the circle.<\/p>\n\n<p>It plugs into WooCommerce's existing download system rather than reinventing it. When a code is redeemed, Chit creates a real (zero-total) WooCommerce order for the customer, marks it complete, and WooCommerce grants the download permissions exactly as it would for a paid order. The redemption appears in the customer's <strong>My Account \u2192 Downloads<\/strong> page and in <strong>WooCommerce \u2192 Orders<\/strong> with a note explaining its origin.<\/p>\n\n<h4>What you get<\/h4>\n\n<ul>\n<li><strong>Batch generation<\/strong> \u2014 generate any number of codes for a product in one go, with optional batch notes (e.g. \"Christmas flyer 2025\" or \"Games day 2026\") so you can find them later.<\/li>\n<li><strong>Configurable code format<\/strong> \u2014 set your own prefix (or none) and the code body (e.g. 2 groups of 4, 3 groups of 4, 2 groups of 6) under <strong>Chit \u2192 Settings<\/strong>, with a live preview. Defaults to <code>CHIT-XXXX-XXXX<\/code>.<\/li>\n<li><strong>Crockford-base32 characters<\/strong> \u2014 no ambiguous characters (no 0\/O, 1\/I\/L, or U\/V confusion) so codes are easy to read off prints.<\/li>\n<li><strong>Admin code browser<\/strong> \u2014 list table with status, batch, and product filters; sortable columns; per-row Revoke action; pagination.<\/li>\n<li><strong>Customer-facing redemption page<\/strong> \u2014 auto-created on activation with the <code>[chit_redeem]<\/code> shortcode. Requires login (codes are tied to user accounts so customers can re-download anytime).<\/li>\n<li><strong>CSV import<\/strong> \u2014 migrate codes you issued elsewhere, including their redemption state, under <strong>Chit \u2192 Import<\/strong>. Streams the file in background batches, so six-figure row counts are fine; a dry run validates everything before a single row is written.<\/li>\n<li><strong>CSV export<\/strong> \u2014 three-column export (code, product name, redeem URL) suitable for mail merges or label printing.<\/li>\n<li><strong>PDF-ready print sheet<\/strong> \u2014 2\u00d75 grid of cards per A4 page, each card showing product name, SKU, code, and the redeem URL. Uses the browser's native \"Save as PDF\" so quality is excellent and there are no third-party dependencies.<\/li>\n<li><strong>Reports<\/strong> \u2014 at-a-glance counts (unused \/ activated \/ revoked) plus a top-products breakdown with activation rates.<\/li>\n<\/ul>\n\n<h4>How it integrates with WooCommerce<\/h4>\n\n<p>Chit does <em>not<\/em> maintain its own download permissions. On activation it creates a WooCommerce order on the customer's account with the redeemed product as a line item and a $0 total, then sets the order status to <strong>completed<\/strong>. WooCommerce's existing download-permission machinery takes care of the rest: the customer sees the order in their account, the download file appears in <strong>My Account \u2192 Downloads<\/strong>, the download counter and any expiry rules you have configured all behave normally.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>chit<\/code> folder to <code>wp-content\/plugins\/<\/code> (or install via the Plugins screen).<\/li>\n<li>Activate <strong>Chit<\/strong> through the <strong>Plugins<\/strong> screen.<\/li>\n<li>A \"Redeem Chit Code\" page is created automatically and assigned the <code>[chit_redeem]<\/code> shortcode. You can find it under <strong>Pages<\/strong>, rename it, or move it under another menu as you like.<\/li>\n<li>Go to <strong>Chit \u2192 Settings<\/strong> to set your code format (prefix, length, grouping) \u2014 or keep the default.<\/li>\n<li>Generate your first batch under <strong>Chit \u2192 Generate<\/strong>.<\/li>\n<\/ol>\n\n<h4>Requirements<\/h4>\n\n<ul>\n<li>WordPress 6.0 or newer<\/li>\n<li>WooCommerce 5.0 or newer<\/li>\n<li>PHP 7.4 or newer<\/li>\n<li>At least one <strong>downloadable<\/strong> WooCommerce product (a product with the \"Downloadable\" checkbox enabled and one or more files attached)<\/li>\n<\/ul>\n\n<!--section=faq-->\n<dl>\n<dt id=\"where%20does%20the%20customer%20enter%20their%20code%3F\"><h3>Where does the customer enter their code?<\/h3><\/dt>\n<dd><p>On the auto-created <strong>Redeem Chit Code<\/strong> page (slug <code>\/redeem-chit-code\/<\/code> by default). The page contains the <code>[chit_redeem]<\/code> shortcode, which renders the redemption form. You can move the shortcode to any other page or post and link to it from your menus.<\/p><\/dd>\n<dt id=\"does%20the%20customer%20need%20an%20account%3F\"><h3>Does the customer need an account?<\/h3><\/dt>\n<dd><p>Yes. Codes grant download permission to a specific WooCommerce account so the customer can re-download the file later. Guests who try to redeem are sent to the login page first.<\/p><\/dd>\n<dt id=\"can%20i%20change%20what%20the%20codes%20look%20like%3F\"><h3>Can I change what the codes look like?<\/h3><\/dt>\n<dd><p>Yes. <strong>Chit \u2192 Settings<\/strong> lets you set the prefix (including removing it entirely) and the shape of the code body \u2014 how many groups of how many characters, e.g. 2 groups of 6. Changing the format only affects newly generated codes \u2014 everything you've already issued keeps working exactly as printed, because redemption matches the stored code, not the current format.<\/p><\/dd>\n<dt id=\"i%20already%20have%20codes%20from%20another%20system.%20can%20i%20bring%20them%20in%3F\"><h3>I already have codes from another system. Can I bring them in?<\/h3><\/dt>\n<dd><p>Yes \u2014 <strong>Chit \u2192 Import<\/strong> accepts a CSV with the columns <code>code,sku,status,activated_at,activated_email<\/code> (a sample file is downloadable on that page). Codes keep their status, so already-used codes stay used. The import runs in the background via WooCommerce's scheduler, handles hundreds of thousands of rows, skips duplicates, and every import can be deleted again in one click.<\/p><\/dd>\n<dt id=\"can%20the%20same%20code%20be%20redeemed%20twice%3F\"><h3>Can the same code be redeemed twice?<\/h3><\/dt>\n<dd><p>No. Codes are single-use. Once redeemed, the status flips to <code>activated<\/code> permanently. If you need multi-use license-key behaviour, that's a different use case and not currently supported.<\/p><\/dd>\n<dt id=\"i%20generated%2050%20codes%20for%20the%20wrong%20product.%20can%20i%20cancel%20them%3F\"><h3>I generated 50 codes for the wrong product. Can I cancel them?<\/h3><\/dt>\n<dd><p>Yes. Visit <strong>Chit \u2192 View Codes<\/strong>, filter by the batch number, and click <strong>Revoke<\/strong> on each (or use the batch dropdown to scope the list). Revoked codes can't be redeemed.<\/p><\/dd>\n<dt id=\"how%20are%20pdfs%20generated%3F\"><h3>How are PDFs generated?<\/h3><\/dt>\n<dd><p>The <strong>Print PDF<\/strong> action opens a standalone HTML page laid out for A4 print; you then use your browser's <strong>Print \u2192 Save as PDF<\/strong> option.<\/p><\/dd>\n<dt id=\"the%20customer%20gets%20a%20%22your%20order%20is%20complete%22%20email%20after%20redeeming.%20is%20that%20intentional%3F\"><h3>The customer gets a \"your order is complete\" email after redeeming. Is that intentional?<\/h3><\/dt>\n<dd><p>It's WooCommerce's default behaviour for any order moving to <strong>completed<\/strong> status. The email is useful as it contains the download link.<\/p><\/dd>\n<dt id=\"what%20about%20uninstalling%3F\"><h3>What about uninstalling?<\/h3><\/dt>\n<dd><p>Deactivating leaves your data intact. <strong>Deleting<\/strong> the plugin from the Plugins screen runs the uninstall script, which drops the <code>chit_codes<\/code> and <code>chit_batches<\/code> tables and clears the related options. The auto-created redemption page is <em>not<\/em> deleted \u2014 you can remove it manually from <strong>Pages \u2192 Trash<\/strong>.<\/p><\/dd>\n<dt id=\"what%20capability%20is%20required%20for%20admin%20actions%3F\"><h3>What capability is required for admin actions?<\/h3><\/dt>\n<dd><p>manage_woocommerce \u2014 the same capability WooCommerce uses for its own back-office screens. Shop managers can use Chit; regular subscribers cannot.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.1<\/h4>\n\n<ul>\n<li>New: configurable code format \u2014 prefix (or none) and code body shape, with live preview, under <strong>Chit \u2192 Settings<\/strong>.<\/li>\n<li>New: CSV import (<strong>Chit \u2192 Import<\/strong>) for codes issued elsewhere, including their redemption state. Dry-run validation, background processing via Action Scheduler, resumable, with one-click rollback per import.<\/li>\n<li>Fix: fatal error on PHP 7.4.<\/li>\n<li>Fix: redemption orders are now genuinely zero-total by default; previously they always booked the product's catalog price. A new setting under <strong>Chit \u2192 Settings \u2192 Redemption orders<\/strong> (or the <code>chit_redemption_zero_total<\/code> filter) restores the old behaviour.<\/li>\n<li>Database: the codes table now accepts codes up to 64 characters (imported codes); generated codes are unchanged.<\/li>\n<\/ul>\n\n<h4>1.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"Generate printable redemption codes for physical sales that unlock WooCommerce digital downloads.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/319266","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=319266"}],"author":[{"embeddable":true,"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/jpgleeson"}],"wp:attachment":[{"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=319266"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=319266"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=319266"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=319266"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=319266"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/ky.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=319266"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}