{"id":398750,"date":"2026-11-06T16:40:01","date_gmt":"2026-11-06T16:40:01","guid":{"rendered":"https:\/\/pl.wordpress.org\/plugins\/training-certificates-for-woocommerce\/"},"modified":"2026-11-07T17:00:36","modified_gmt":"2026-11-07T17:00:36","slug":"drdanon-certificates-for-woocommerce","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/drdanon-certificates-for-woocommerce\/","author":23598734,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.8.4","stable_tag":"1.8.4","tested":"7.1.4","requires":"6.5","requires_php":"7.4","requires_plugins":null,"header_name":"DrDanon Certificates for WooCommerce","header_author":"drdanon","header_description":"Course participants enter their name once in My Account and download a certificate (PDF or PNG). JPG\/PNG background, custom fonts, certificate number, date and a verification QR code.","assets_banners_color":"7c5f93","last_updated":"2026-11-07 17:00:36","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/profiles.wordpress.org\/drdanon\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":286,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.8.2":{"tag":"1.8.2","author":"drdanon","date":"2026-11-06 16:39:37","revision":3788343},"1.8.4":{"tag":"1.8.4","author":"drdanon","date":"2026-11-07 17:00:36","revision":3789967}},"upgrade_notice":{"1.8.4":"<p>Fixes a critical error on activation and &quot;Failed to fetch&quot; for backgrounds on another address. The verification page is now created only from Settings.<\/p>","1.8.2":"<p>New name and folder (drdanon-certificates-for-woocommerce). The custom CSS field was removed \u2013 move your styles to Appearance \u2192 Customize \u2192 Additional CSS. Certificates, numbers and settings are kept.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3788342,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3788342,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3788342,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3788342,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.8.2","1.8.4"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[2191,8102,4775,712,286],"plugin_category":[45],"plugin_contributors":[291216],"plugin_business_model":[],"class_list":["post-398750","plugin","type-plugin","status-publish","hentry","plugin_tags-certificate","plugin_tags-course","plugin_tags-training","plugin_tags-verification","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-drdanon","plugin_committers-drdanon"],"banners":{"banner":"https:\/\/ps.w.org\/drdanon-certificates-for-woocommerce\/assets\/banner-772x250.png?rev=3788342","banner_2x":"https:\/\/ps.w.org\/drdanon-certificates-for-woocommerce\/assets\/banner-1544x500.png?rev=3788342","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/drdanon-certificates-for-woocommerce\/assets\/icon-128x128.png?rev=3788342","icon_2x":"https:\/\/ps.w.org\/drdanon-certificates-for-woocommerce\/assets\/icon-256x256.png?rev=3788342","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>DrDanon Certificates for WooCommerce lets customers who bought a course download their certificate from <strong>My account \u2192 Certificates<\/strong>.<\/p>\n\n<p>The customer enters her name once (with a live preview and a confirmation checkbox). From then on she can download the certificate as PDF or PNG as often as she likes. The certificate file is generated in the browser, so no files are stored on the server.<\/p>\n\n<p><strong>Features<\/strong><\/p>\n\n<ul>\n<li>Certificate per product: JPG or PNG background, available from a chosen date \u2013 optionally from a chosen time (e.g. 12:00).<\/li>\n<li>Name, certificate number, date and QR code \u2013 each with its own position, size, colour, font, bold and alignment.<\/li>\n<li>Long names can be split into two lines automatically.<\/li>\n<li>Date of issue or course date, in a format you choose (presets, the site format or a custom PHP date format) \u2013 globally or per product.<\/li>\n<li>Built-in fonts with Latin and Cyrillic characters, uploaded TTF\/OTF\/WOFF\/WOFF2 fonts and fonts from the WordPress Font Library, with a character check.<\/li>\n<li>Public verification page (<code>[tcert_verify]<\/code> shortcode) with full or masked names, rate limiting and a cache test. It can be turned off.<\/li>\n<li>Automatic revocation after a refund or cancellation, manual revocation, manual access grants and CSV import of access.<\/li>\n<li>Live preview and \"Download sample PDF\" button in the product editor.<\/li>\n<li>All texts of the customer pages can be edited; button colours, corner radius and width can be set in the settings.<\/li>\n<li>Own time zone for unlock times and printed dates (defaults to the site time zone).<\/li>\n<li>Personal data export and erasure (WordPress privacy tools), suggested privacy policy text.<\/li>\n<li>Compatible with WooCommerce High-Performance Order Storage (HPOS).<\/li>\n<\/ul>\n\n<p><strong>No e-mails.<\/strong> The plugin never sends any e-mail \u2013 neither to customers nor to the administrator.<\/p>\n\n<p><strong>No external services.<\/strong> The plugin has no telemetry and does not contact any third-party service. Fonts, QR code generator and the PDF writer are bundled. The browser loads only files from your own site: the certificate background and uploaded fonts from your Media Library \u2013 if your site serves media through a CDN, they come from that CDN.<\/p>\n\n<p>WooCommerce is a trademark of its owner. This plugin is an independent add-on and is not affiliated with or endorsed by WooCommerce or Automattic.<\/p>\n\n<h3>Privacy<\/h3>\n\n<p>The plugin stores the name entered for the certificate, the date it was saved, manually granted access and the issued certificates (number, course, name, date of issue, status) in the WordPress database. The data is used to generate certificates and to confirm their authenticity. It is included in the WordPress personal data export and removed by the personal data eraser and when the user account is deleted. The plugin sends no data to third-party services and sends no e-mails.<\/p>\n\n<h3>Third-party resources<\/h3>\n\n<ul>\n<li>QR Code Generator for JavaScript by Kazuhiko Arase, version 2.0.4 (unmodified <code>dist\/qrcode.js<\/code> from the npm package qrcode-generator, source: https:\/\/github.com\/kazuhikoarase\/qrcode-generator) \u2013 MIT license \u2013 <code>assets\/js\/vendor\/qrcode.js<\/code>, licence text in <code>assets\/js\/vendor\/qrcode-LICENSE.txt<\/code>. \"QR Code\" is a registered trademark of DENSO WAVE INCORPORATED.<\/li>\n<li>Fonts Caveat, Cormorant Garamond, Lora, Marck Script, Montserrat and Playfair Display \u2013 SIL Open Font License 1.1 \u2013 <code>assets\/fonts\/<\/code> (see <code>assets\/fonts\/OFL.txt<\/code>).<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate WooCommerce.<\/li>\n<li>Upload the plugin in Plugins \u2192 Add New \u2192 Upload Plugin, or install it from the WordPress.org plugin directory, and activate it.<\/li>\n<li>Go to WooCommerce \u2192 Training certificates and check the settings. Click \"Create the verification page\" (General tab) to add the verification page.<\/li>\n<li>Edit a product, open the <strong>Certificate<\/strong> tab, enable \"Issue a certificate\", choose a background and place the elements. Use \"Download sample PDF\" to check the result.<\/li>\n<li>If My account \u2192 Certificates shows a 404 error, go to Settings \u2192 Permalinks and click \"Save Changes\".<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"can%20customers%20change%20their%20name%20later%3F\"><h3>Can customers change their name later?<\/h3><\/dt>\n<dd><p>No \u2013 the name is saved once. An administrator can correct it or unlock editing in Users \u2192 Edit user \u2192 Certificate.<\/p><\/dd>\n<dt id=\"who%20gets%20a%20certificate%3F\"><h3>Who gets a certificate?<\/h3><\/dt>\n<dd><p>Logged-in customers who bought the product (paid order) and customers to whom access was granted manually or by CSV import. After a full refund, a refund of the course line (its whole quantity) or a cancellation the certificate is revoked automatically. A refund of an amount only (no quantity) does not revoke it. The list of issued certificates shows the saved status, which can be updated with a short delay (background check); the verification page and My Account always check the current state.<\/p><\/dd>\n<dt id=\"is%20the%20pdf%20signed%3F\"><h3>Is the PDF signed?<\/h3><\/dt>\n<dd><p>No. The PDF contains an image of the certificate. Authenticity is confirmed by the certificate number and QR code on the verification page.<\/p><\/dd>\n<dt id=\"can%20certificates%20unlock%20at%20a%20specific%20time%3F\"><h3>Can certificates unlock at a specific time?<\/h3><\/dt>\n<dd><p>Yes. In the product, set \"Available from\" and check \"Unlock at a specific time\" (for example 12:00). The time uses the plugin time zone from WooCommerce \u2192 Training certificates \u2192 General, which by default is the site time zone. Without a time the certificate unlocks at 00:00.<\/p><\/dd>\n<dt id=\"which%20date%20formats%20can%20i%20use%3F\"><h3>Which date formats can I use?<\/h3><\/dt>\n<dd><p>Presets such as 31 October 2026, 31.10.2026, 10\/31\/2026 or 2026-10-31, the site format from Settings \u2192 General, or a custom PHP date format such as <code>l, j F Y<\/code>. Month and day names follow the site language. Each product can override the global format.<\/p><\/dd>\n<dt id=\"cache%20and%20cdn\"><h3>Cache and CDN<\/h3><\/dt>\n<dd><p>The verification page and My account \u2192 Certificates must not be cached. In your cache plugin (LiteSpeed, WP Rocket, W3 Total Cache\u2026) add both addresses to \"Never cache\". With Cloudflare create a Cache Rule with the action \"Bypass cache\" for the path of your verification page (for example <code>\/certificate-verification<\/code>) and for the My account endpoint (<code>\/certificates<\/code> or, for sites that used older versions, <code>\/certyfikaty<\/code>). Then use \"Check that the verification page is not cached\" in WooCommerce \u2192 Training certificates.<\/p>\n\n<p>A rate limiting rule for the verification page on your CDN (for example 30 requests per minute per IP) is recommended as a second line of defence.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20multisite%3F\"><h3>Does it work with Multisite?<\/h3><\/dt>\n<dd><p>No. The plugin supports single-site installations only.<\/p><\/dd>\n<dt id=\"is%20the%20plugin%20available%20in%20my%20language%3F\"><h3>Is the plugin available in my language?<\/h3><\/dt>\n<dd><p>The plugin is fully translatable. Translations are managed on translate.wordpress.org and installed by WordPress automatically.<\/p><\/dd>\n<dt id=\"can%20i%20change%20the%20my%20account%20address%3F\"><h3>Can I change the My account address?<\/h3><\/dt>\n<dd><p>New installations use <code>\/my-account\/certificates\/<\/code>. Sites updated from versions before 1.7.0 keep <code>\/my-account\/certyfikaty\/<\/code>, so links customers already have keep working.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.8.4<\/h4>\n\n<ul>\n<li>Fixed: critical error on activation on sites where another plugin (SEO, page builder, cache) runs shortcodes while a page is saved.<\/li>\n<li>Changed: the verification page is no longer created on activation \u2013 create it with the button in Settings (an existing published page with the [tcert_verify] shortcode is reused, no duplicates; drafts are never published automatically).<\/li>\n<li>Fixed: \"Failed to fetch\" when the background or font URL points to another address (www \/ http vs https, CDN or cache plugin) \u2013 the other address is tried as well, also when a file downloads but is not a valid image or font.<\/li>\n<li>Fixed: refunding the whole quantity of one course line (order still paid) now revokes that course's certificate.<\/li>\n<li>Changed: the QR code has the standard 4-module quiet zone.<\/li>\n<li>Added: the date the name was saved is included in the personal data export.<\/li>\n<li>Added: full MIT licence text of the bundled QR code library.<\/li>\n<\/ul>\n\n<h4>1.8.2<\/h4>\n\n<ul>\n<li>Fixed: QR codes encode non-ASCII addresses (international domains, page slugs) as UTF-8.<\/li>\n<li>Changed: no silenced PHP errors in the font check; translation template header updated.<\/li>\n<\/ul>\n\n<h4>1.8.1<\/h4>\n\n<ul>\n<li>Changed: plugin name \"DrDanon Certificates for WooCommerce\", slug and text domain <code>drdanon-certificates-for-woocommerce<\/code>.<\/li>\n<li>Removed: the free-form custom CSS setting. Use Appearance \u2192 Customize \u2192 Additional CSS instead; the colour, corner radius and width settings stay.<\/li>\n<li>Changed: all request data is sanitized when it is read; nonces are sanitized before verification.<\/li>\n<li>Changed: admin notices are shown only on the Plugins screen, the plugin's own screens and product screens.<\/li>\n<li>Changed: translations are provided through translate.wordpress.org (no bundled .po\/.mo files).<\/li>\n<\/ul>\n\n<h4>1.8.0<\/h4>\n\n<ul>\n<li>New: certificates can be unlocked at a specific time (\"Unlock at a specific time\" in the product).<\/li>\n<li>New: time zone setting in WooCommerce \u2192 Training certificates \u2192 General (default: the site time zone). It is used for unlock times and for the dates on certificates and on the verification page.<\/li>\n<\/ul>\n\n<h4>1.7.2<\/h4>\n\n<ul>\n<li>Changed: text domain and plugin folder are now <code>drdanon-certificates-for-woocommerce<\/code> (the WordPress.org slug).<\/li>\n<li>Fixed: the QR code in the product preview and the sample PDF leads to the verification page.<\/li>\n<li>Fixed: the certificate number stays in the field when the name check form on the verification page has expired.<\/li>\n<li>Fixed: the \"(uploaded)\" font label and the download file names are translatable.<\/li>\n<\/ul>\n\n<h4>1.7.0<\/h4>\n\n<ul>\n<li>New: date format \u2013 more presets, the site format and custom formats, globally and per product (with a live preview).<\/li>\n<li>New: long names can be split into two lines automatically.<\/li>\n<li>New: English source texts, translation ready.<\/li>\n<li>New: default texts follow the site language until you change them.<\/li>\n<li>New: suggested privacy policy text.<\/li>\n<li>Changed: plugin name \"DrDanon Certificates for WooCommerce\", readme in the WordPress.org format.<\/li>\n<li>Changed: database queries use <code>$wpdb-&gt;prepare()<\/code> with identifier placeholders; uninstall uses the WordPress filesystem API.<\/li>\n<li>Changed: verification name check is protected with a nonce.<\/li>\n<li>Changed: font uploads use <code>wp_handle_upload()<\/code>.<\/li>\n<li>Removed: Markdown change logs and test notes from the package.<\/li>\n<\/ul>\n\n<h4>1.6.2<\/h4>\n\n<ul>\n<li>Fixed: certificate status in the user profile is reconciled before display.<\/li>\n<li>Fixed: clearer error for an empty name confirmation on the verification page.<\/li>\n<li>Improved: per-request cache of certificate products.<\/li>\n<\/ul>\n\n<h4>1.6.1<\/h4>\n\n<ul>\n<li>Improved: access checks during verification, save locks, font validation and privacy tools. Multisite is blocked.<\/li>\n<\/ul>\n\n<h4>1.6.0<\/h4>\n\n<ul>\n<li>New: certificate number without the address, separate switch for the verification page, editable texts and styles, date on the certificate, custom fonts, PDF page sized like the graphic.<\/li>\n<\/ul>","raw_excerpt":"Course participants enter their name once in My Account and download a PDF or PNG certificate with a number, date and verification QR code.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/398750","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=398750"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/drdanon"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=398750"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=398750"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=398750"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=398750"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=398750"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=398750"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}