{"id":382698,"date":"2026-10-17T23:44:21","date_gmt":"2026-10-17T23:44:21","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/tich-courses\/"},"modified":"2026-10-17T23:43:51","modified_gmt":"2026-10-17T23:43:51","slug":"tich-courses","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/tich-courses\/","author":23569572,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.10","stable_tag":"1.0.10","tested":"7.1.3","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"Tich Courses for WooCommerce","header_author":"Tich","header_description":"Turns a paid WooCommerce order into course access on Tich, automatically \u2013 a customer who buys a mapped product gets access and a sign-in link by email, with no manual step.","assets_banners_color":"d0d1d6","last_updated":"2026-10-17 23:43:51","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/tich.courses\/integrations\/woocommerce","header_author_uri":"https:\/\/tich.courses","rating":0,"author_block_rating":0,"active_installs":0,"downloads":51,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.10":{"tag":"1.0.10","author":"tichcourses","date":"2026-10-17 23:43:51","revision":3752435}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3752435,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3752435,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3752435,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3752435,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.10"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[7114,35891,2195,286],"plugin_category":[45],"plugin_contributors":[287302],"plugin_business_model":[],"class_list":["post-382698","plugin","type-plugin","status-publish","hentry","plugin_tags-courses","plugin_tags-enrollment","plugin_tags-lms","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-tichcourses","plugin_committers-tichcourses"],"banners":{"banner":"https:\/\/ps.w.org\/tich-courses\/assets\/banner-772x250.png?rev=3752435","banner_2x":"https:\/\/ps.w.org\/tich-courses\/assets\/banner-1544x500.png?rev=3752435","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/tich-courses\/assets\/icon-128x128.png?rev=3752435","icon_2x":"https:\/\/ps.w.org\/tich-courses\/assets\/icon-256x256.png?rev=3752435","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>A customer who buys a product mapped to a Tich course gets access and a\nsign-in link by email the moment the order is paid, with no manual step.\nThe plugin stores no passwords and creates no accounts itself: every action\ngoes through Tich's public API (https:\/\/tich.courses\/developers), with one\nAPI key per course site.<\/p>\n\n<p>The plugin's admin interface follows the WordPress admin language, with\ntranslations delivered from translate.wordpress.org.<\/p>\n\n<p>Full guide, including FAQ: https:\/\/tich.courses\/integrations\/woocommerce<\/p>\n\n<h3>External services<\/h3>\n\n<p>The plugin talks to Tich's public API (https:\/\/api.tich.courses, or\nhttps:\/\/api.tich.foo for a development key, one starting with tich_test_), the\nservice that hosts the course sites. Without it the plugin has nothing to\ndo. What is sent, and when:<\/p>\n\n<ul>\n<li>When a key is connected and on every load of the settings page (and at\nmost once a day on other admin pages): the API key, to confirm it is\nstill valid and which course site it belongs to.<\/li>\n<li>When editing a product: the key, to load the list of courses and access\ntypes to choose from.<\/li>\n<li>When an order is paid or completed, and on the manual order actions: the\ncustomer's billing email address, the course id and the access type id,\nto open access and send a sign-in link. On a full refund (if that setting\nis enabled) and on manual revocation: the email and the course id, to\nrevoke access.<\/li>\n<\/ul>\n\n<p>Nothing else from the store is sent: no names, no amounts, no addresses.\nTich logs each of these calls in the course site's own log (kept for 90\ndays) so that \"she paid, why no access?\" can always be answered.<\/p>\n\n<ul>\n<li>Terms of use: https:\/\/tich.courses\/terms<\/li>\n<li>Privacy statement: https:\/\/tich.courses\/privacy<\/li>\n<li>API documentation: https:\/\/tich.courses\/developers<\/li>\n<li>Service website: https:\/\/tich.courses<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Plugins \u2192 Add New \u2192 Upload Plugin \u2192 choose the zip \u2192 Install \u2192 Activate.<\/li>\n<li>WooCommerce \u2192 Tich: paste an API key (created in the Tich dashboard, on\nthe course site's card \u2192 \"Enrollment automation\" \u2192 \"Create key\") and\nclick \"Connect\".<\/li>\n<li>On each product: the Tich box in the product editor's sidebar \u2192 pick a\ncourse site, a course and an access type.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"the%20customer%20typed%20a%20wrong%20email%20at%20checkout%20and%20received%20nothing\"><h3>The customer typed a wrong email at checkout and received nothing<\/h3><\/dt>\n<dd><p>Fix the email on the order (edit billing details), then run the order\naction \"Tich: grant access to the courses in this order + send sign-in\nlink\".<\/p><\/dd>\n<dt id=\"the%20order%20is%20paid%2C%20but%20the%20order%20notes%20say%20opening%20access%20failed\"><h3>The order is paid, but the order notes say opening access failed<\/h3><\/dt>\n<dd><p>Read the code in the note (key revoked, course deleted,\nor Tich unreachable), then run the order action \"Tich: grant access to the\ncourses in this order + send sign-in link\".<\/p><\/dd>\n<dt id=\"i%20refunded%20an%20order.%20what%20happens%20to%20the%20access%3F\"><h3>I refunded an order. What happens to the access?<\/h3><\/dt>\n<dd><p>By default access is revoked: the setting \"Revoke access automatically when\nan order is fully refunded\" on WooCommerce \u2192 Tich is on out of the box (it\ncan be turned off there). A partial refund never revokes access. Access can\nalways be revoked manually from \"Manage access\" on the course site, or with\nthe order action \"Tich: revoke access to the courses in this order\n(without notifying the customer)\".<\/p><\/dd>\n<dt id=\"i%20have%20several%20course%20sites\"><h3>I have several course sites<\/h3><\/dt>\n<dd><p>One key per site, on the settings page. On each product row you pick which\nsite it belongs to.<\/p><\/dd>\n<dt id=\"i%20created%20a%20new%20api%20key%20in%20the%20tich%20dashboard\"><h3>I created a new API key in the Tich dashboard<\/h3><\/dt>\n<dd><p>On WooCommerce \u2192 Tich: add a row, paste the new key and click \"Connect\".\nThe plugin recognises it is the same course site and replaces the old key\nin place. Products already mapped to that site keep working unchanged.<\/p><\/dd>\n<dt id=\"a%20product%20with%20variations\"><h3>A product with variations<\/h3><\/dt>\n<dd><p>The mapping lives on the parent product. Every variation opens the same\naccess.<\/p><\/dd>\n<dt id=\"how%20do%20i%20update%20the%20plugin%3F\"><h3>How do I update the plugin?<\/h3><\/dt>\n<dd><p>Download again from https:\/\/tich.courses\/integrations\/woocommerce and\ninstall over the existing version. The current version is shown in the\nsettings page's \"Help\" tab.<\/p><\/dd>\n<dt id=\"the%20email%20from%20tich%20did%20not%20arrive\"><h3>The email from Tich did not arrive<\/h3><\/dt>\n<dd><p>Check the spam folder, then run the order action \"Tich: grant access to\nthe courses in this order + send sign-in link\".<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.10<\/h4>\n\n<ul>\n<li>The plugin is now \"Tich Courses for WooCommerce\", with the WordPress.org slug\ntich-courses (folder tich-courses\/, text domain tich-courses) - a new\nplugin's slug needs at least 5 letters, so tich itself can't be one. If\nyou installed an earlier version from a zip: deactivate the old one,\ninstall and activate this one (the settings and keys carry over), and\nonly then delete the old tich\/ folder over FTP or in the file manager.\nDo not delete the old one from the WordPress Plugins screen, since that\nruns its uninstall.php and deletes the settings and keys.<\/li>\n<li>No more \"Environment\" setting: each key's own prefix decides whether it\ntalks to Tich (tich_live_) or to Tich's development environment\n(tich_test_). A store that was set to development with live keys also\nsaved will now use those live keys too.<\/li>\n<li>A course site connected with a development key (tich_test_) is labeled\n\"(development)\" after its name everywhere in the plugin.<\/li>\n<li>Translations now come from translate.wordpress.org instead of being\nbundled in the plugin. Until the Hebrew translation is published there,\nthe admin interface is shown in English.<\/li>\n<\/ul>\n\n<h4>1.0.9<\/h4>\n\n<ul>\n<li>The plugin is now translatable: its strings are in English in the code,\nwith a bundled Hebrew translation (languages\/). The admin interface\nfollows the WordPress admin language - a site or user profile set to\nHebrew sees exactly the same Hebrew as before; any other language sees\nEnglish.<\/li>\n<\/ul>\n\n<h4>1.0.8<\/h4>\n\n<ul>\n<li>The order note for an enrollment past the course site's student quota (but\nnot yet locked) now says so specifically, instead of using the same\nwording as an actually-locked site.<\/li>\n<\/ul>\n\n<h4>1.0.7<\/h4>\n\n<ul>\n<li>The plugin slug is now tich (folder tich\/, main file tich.php, text\ndomain tich), ahead of publishing on the WordPress.org plugin directory.\nIf you installed an earlier version from a zip: install the new one,\nactivate it, and only then remove the old one. Do not remove it from the\nWordPress Plugins screen, since that runs the old version's uninstall.php\nand deletes the settings and keys. Deleting the tich-woocommerce\/ folder\nover FTP or in the file manager keeps everything in place.<\/li>\n<li>A notice on every WordPress admin page when a connected key has stopped\nworking (revoked on the Tich side, or lacking the permission to open\naccess), with a button to fix it on the plugin's settings page. Detection\nis cheap: every call the plugin already makes to Tich updates the status,\nplus one check per site per day, only when an admin loads an admin page.\nOpening the settings page checks immediately and resets that clock.<\/li>\n<li>readme: External services section (what is sent to Tich and when), Tested\nup to raised to WordPress 7.1 and WooCommerce 11.1, and the whole file is\nnow in English per the plugin directory's readme policy.<\/li>\n<li>A failed revocation is logged in the order notes as \"revoking access\nfailed\" rather than \"opening access failed\".<\/li>\n<li>Plugin Check: translators comments on every string with placeholders,\nsanitized reads of the submitted settings rows and the product mapping\nJSON, and no direct database query in uninstall.php.<\/li>\n<\/ul>\n\n<h4>1.0.6<\/h4>\n\n<ul>\n<li>The same course site can no longer be connected twice: the same key pasted\nagain (or two old rows for the same site) is merged into one row on save,\nwith a notice explaining why.<\/li>\n<li>Key rotation: a new key pasted in a new row for an already-connected site\nreplaces the old key in place, without deleting the old row first.<\/li>\n<li>Deleting a key (disconnecting) saves the settings right after the\nconfirmation, with no extra \"Save settings\" click that was easy to forget.\nThe button on a connected row is now \"Delete secret key to disconnect\".<\/li>\n<li>The revoked-key notice links straight to that course site's integrations\npanel in the dashboard and names the site.<\/li>\n<li>The \"Settings saved\" notice no longer shows next to an error about a key\nthat was not saved.<\/li>\n<li>On the product page, when a site's course list fails to load (revoked key,\nor Tich briefly unreachable), the row shows \"could not load\" in yellow\ninstead of \"course no longer exists\" in red. The mapping itself is kept.<\/li>\n<li>An order whose payment is reported twice (webhook + status change) is no\nlonger queued twice.<\/li>\n<li>The admin failure email is sent again if a new failure happens after the\nprevious one was resolved, instead of only once per order.<\/li>\n<li>\"Revoke access\" for a site that is no longer connected records an order\nnote instead of silently doing nothing.<\/li>\n<li>Wording: order notes speak of \"opening access\" rather than \"registration\",\nwithout gendered forms; the locked-site notice now explains itself (access\nopens once the lock is lifted).<\/li>\n<\/ul>\n\n<h4>1.0.5<\/h4>\n\n<ul>\n<li>When an already-connected API key is deleted or revoked on the Tich side,\nthe site's row on the settings page shows an explicit yellow warning with\na direct link to create a new key in the Tich dashboard, instead of a\nfilled field and a useless \"Connect\" button (the field is locked and the\nbutton hidden in that state).<\/li>\n<li>The \"Disconnect from store\" button on a row that is not connected reads\n\"Delete\": there is nothing to disconnect.<\/li>\n<li>The \"Disconnect\"\/\"Delete\" button is no longer shown on an empty row.<\/li>\n<li>Plugin renamed to \"Tich for WooCommerce\".<\/li>\n<\/ul>\n\n<h4>1.0.4<\/h4>\n\n<ul>\n<li>The link to the Tich settings page after a plugin update also appears\nwhen the update is done by uploading a zip over the existing version (not\nonly via \"Update available\" on the plugins list).<\/li>\n<\/ul>\n\n<h4>1.0.3<\/h4>\n\n<ul>\n<li>A more detailed connection error when a key is not found, instead of\n\"unknown_error\".<\/li>\n<li>The \"Disconnect from store\" button moved to the end of the site row,\nafter the connection status.<\/li>\n<li>Fixed the centering of the \"+\" icon on the add-site button.<\/li>\n<li>A direct link to the Tich settings page after a plugin update.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First release.<\/li>\n<\/ul>","raw_excerpt":"Turns a paid WooCommerce order into course access on Tich, automatically.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/382698","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=382698"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/tichcourses"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=382698"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=382698"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=382698"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=382698"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=382698"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=382698"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}