Certificate Compliance Manager for LearnDash
Issue durable certificate records, add secure public verification and manage expiry, evidence, email and scoped reporting around native LearnDash Course, Quiz and Group certificates.
Overview
CCM extends the certificate workflow already controlled by LearnDash.
For learners and verifiers
Each qualifying award can receive a durable certificate ID, opaque public verification link, locally generated PNG QR code, expiry state and optional emailed native PDF.
For administrators and compliance teams
Frozen issuance records preserve the learner and award context. Search, filter, export and manage credentials through administration or a securely scoped front-end report.
Requirements
| WordPress | 7.0 or later; WordPress 7.0.2 tested for Version 1 |
| LearnDash | 5.1.8 or later required; LearnDash 4 is not supported |
| PHP | 8.1 or later with GD and mbstring; PHP 8.3 tested |
| Certificate scope | Native LearnDash Course, Quiz and Group certificates |
| Public verification | Publicly reachable site and working WordPress permalinks |
| Email and PDF | Working WordPress email delivery; certificate PDFs use LearnDash’s native renderer |
| WooCommerce | Not required |
| Trial | 15 days of full CCM functionality |
Quick start
- Install and activate — Confirm WordPress 7.0+, LearnDash 5.1.8+, PHP 8.1+, GD and mbstring. New installations begin with a 15-day full-feature trial.
- Configure CCM — Open Certificate Compliance → Settings. Choose the certificate-ID format, default expiry, verification fields and email options.
- Prepare a native certificate — Edit a LearnDash certificate and add the CCM shortcodes you want, such as certificate ID, verification URL and PNG QR code.
- Assign through LearnDash — Assign the certificate to a Course, Quiz or Group using LearnDash’s normal settings and award rules.
- Run a complete test — Qualify with a test learner. Confirm the issuance record, native certificate fields, verification page, email and PDF where enabled.
- Import historical awards if required — Disable the previous certificate system, preview surviving LearnDash awards under Historical Import, review the dates and evidence, and import in a separate controlled step.
User guide
Open the section that matches the task being completed.
Certificate IDs, expiry and issuance
Certificate ID formats
Choose the format before live issuance. Existing IDs never change when the prefix, format or starting sequence is updated.
PREFIX-YEAR-000001 | Uses your prefix, the completion year and an atomic sequence. |
PREFIX-TYPE-000001 | TYPE becomes COURSE, QUIZ or GROUP; it does not insert the award title. |
PREFIX-AB12-CD34 | Uses your prefix with randomly generated mixed segments. |
1234-5678-9012-3456 | Generates a numeric segmented ID without a custom prefix. |
The prefix accepts 2–12 letters or numbers. A starting sequence applies only before the first sequential ID is issued; CCM never resets or reuses sequence numbers.
Expiry rules
Set the default in CCM Settings. Each native certificate can inherit it or override it through Certificate Verification Expiry: Never expires, a duration after completion or a fixed date.
The resolved expiry is frozen into the issuance. Later setting changes do not rewrite history, although an administrator can adjust one record from Issued Certificates.
Issuance boundary
CCM creates a record only when LearnDash awards an assigned native certificate. Quiz issuance requires the separate LearnDash Certificate Awarded for threshold, which may differ from the passing score.
Certificate shortcodes
Add these to the native LearnDash certificate editor. They resolve against the learner and award represented by the protected certificate URL.
[lecv_certificate_id] | Unique ID for the matching issuance. |
[lecv_certificate_verify_url] | Opaque public verification URL. |
[lecv_qr_code size="180"] | Locally generated PNG QR code; adjust the numeric size as required. |
[lecv_certificate_status] | Valid, Expiring Soon, Expired or Revoked. |
[lecv_certificate_expiry] | Frozen expiry date or No expiry. |
[lecv_learner_name] | Learner name frozen at issuance. |
[lecv_completion_date] | Completion date for this credential. |
[lecv_course_title] | Course title or the parent Course of a Quiz certificate. |
[lecv_quiz_title] | Quiz title for a Quiz certificate. |
[lecv_group_title] | Group title for a Group certificate. |
[lecv_instructor] | Frozen instructor or issuer configured in CCM. |
[lecv_membership_group_names] | Relevant LearnDash Group names frozen at issuance. |
[lecv_membership_group_ids] | Relevant LearnDash Group IDs frozen at issuance. |
[lecv_membership_groups] | Combined Group names and IDs. |
Course progress, assessment and retake evidence
Evidence is optional and applies only to Course certificate records. Course-step progress, Quiz assessment and attempt history can each inherit the global setting or be independently shown or hidden for a Course.
| Course progress | Completed and total published LearnDash lessons, topics and quizzes enumerated for the Course. |
| Assessment | Eligible, attempted, passed and required Quiz counts plus the average selected passing score. |
| Attempt history | Total attempts, retakes and whether each Quiz first passed initially or after a retake. |
Best passing attempt is the default score policy. A stricter site can use the most recent passing attempt. Failed or incomplete quizzes remain represented in counts but are not inserted into the average as zero scores.
A Course may specify a required average, minimum number of eligible quizzes and excluded quizzes. If no eligible assessment quizzes exist, the frozen assessment reads Non-assessable.
Use [lecv_course_steps_summary], [lecv_assessment_summary] and [lecv_attempt_history_summary] to add the summaries to the native certificate.
These values are evidence only. LearnDash remains responsible for Course completion and certificate eligibility.
Public verification and credential status
CCM creates a page containing [lecv_certificate_verification]. A verifier can enter the certificate ID or follow its opaque URL or QR code without signing in.
Choose the Credential Card or Formal Record layout, configure accent, width, border radius and site logo, then select which learner and award fields are public. Group names and IDs are hidden by default because they may identify an employer, client or department.
| Valid | Active and outside the configured expiry-warning window. |
| Expiring Soon | Still valid but inside the warning window. |
| Expired | The frozen or administratively adjusted expiry has passed. |
| Revoked | An administrator explicitly revoked the issuance. |
Internal revocation reasons are available to authorized reports but are not exposed publicly.
Certificate email and native PDF
Course, Quiz and Group emails can be enabled independently. CCM sends an HTML message with a verification button and the LearnDash-generated native certificate PDF. If PDF generation fails, the verification link can still be delivered.
The shared template has Visual and Text modes. Common tokens include {learner_name}, {award}, {certificate_id}, {verification_url}, {completion_date}, {expiry_date}, {context_type}, the three evidence-summary tokens and the three membership-Group tokens.
An administrator can resend an eligible message from Issued Certificates.
Administrator report and lifecycle controls
Certificate Compliance → Issued Certificates lists every issuance. Search or filter by certificate ID, learner, email, award type, status, issue date or expiry date.
Administrators can open verification, update expiry, revoke or reactivate a record, review its internal revocation reason and resend its email. Historical records remain frozen unless an explicit lifecycle action is taken.
Front-end reporting and scoped access
Add [lecv_certificate_report] to a WordPress page. Then use Certificate Compliance → Report Access to admit each user explicitly and grant only the required Course, Quiz, Group, managed-Group or all-record scope.
The visible report and CSV export apply the same authorization boundary. Site administrators have all-record access by default. LearnDash Group Leader status or a WordPress role alone does not grant entry.
The optional Compliance Officer role can be added without replacing a user’s existing roles. Managed-Group access for explicitly admitted Group Leaders is disabled globally until the administrator enables it.
Trial, licensing and data management
CCM begins with a 15-day full-feature trial. Pro activates one production site; Agency activates up to ten. Manage the key under Certificate Compliance → CCM License.
When the trial expires or a licence is explicitly revoked, new CCM issuance, IDs, automatic CCM email and historical import pause. LearnDash completion and native certificates continue, while existing CCM records, verification, reports and lifecycle controls remain available.
Normal plugin deactivation retains data and the server activation. Use Deactivate this site to release the licence allocation. Clean uninstall permanently removes CCM tables, options, scoped metadata, generated QR files and the untouched plugin-created verification page; take a backup first.
Historical import
Register surviving native LearnDash awards without replaying learner completion.
1. Preview before writing
Disable the outgoing certificate-verification or email system, then run the Historical Import scan. Review counts for discovered, eligible, already registered, missing-certificate and unsupported-renderer records.
2. Review dates and evidence
The original LearnDash completion becomes both the completion and public issuance date. Expiry is calculated from that date using the current CCM rule for the assigned certificate.
3. Import in controlled batches
CCM creates frozen records from surviving data without replaying LearnDash completion hooks or changing enrolment, course access or progress. Duplicate protection prevents the same award being registered twice.
4. Send updates separately
Import never sends the normal award email. After reviewing results, send the dedicated update message to valid, Expiring Soon and non-expiring imports. Expired imports remain verifiable but are not emailed.
Troubleshooting
No issuance record is created
Confirm a native certificate is assigned to the exact Course, Quiz or Group. For a Quiz, confirm the attempt met Certificate Awarded for. Check that the trial or licence permits new issuance, then run a fresh award rather than merely reopening an old certificate URL.
CCM fields are blank on the certificate
No matching CCM issuance exists for that learner and award context. Check Issued Certificates first. Blank output is intentional and prevents stale credential data being reused.
Verification reports Not Found
Confirm the selected verification page is published and still contains [lecv_certificate_verification]. Use the repair or recreate control in CCM Settings, then resave WordPress permalinks if required.
The QR code does not work from another device
Confirm the credential was issued on a publicly reachable site. A phone cannot ordinarily resolve a local development hostname even when the QR itself is correct.
The site logo appears missing
CCM uses the active theme’s Site Logo and falls back to the Site Icon. A white PNG or SVG with transparency may be present but invisible on the white verification card; test with a contrasting logo.
Certificate email is not received
Confirm the relevant award-type email is enabled, competing certificate-email modules are disabled and WordPress mail delivery works. CCM uses wp_mail(); configure SMTP or transactional delivery separately.
The front-end report is denied or empty
Confirm the user is explicitly admitted and has at least one applicable scope. Verify that page caching is not serving another user’s response; exclude the report page if the host or CDN does not vary authenticated content safely.
Developer notes
LearnDash integration: CCM listens to native LearnDash 5 Course, Quiz and Group award events. LearnDash remains responsible for access, completion and certificate thresholds.
Storage: durable issuances and atomic sequences use the site-prefixed lecv_issuances and lecv_sequences tables alongside narrowly scoped CCM options and metadata.
Frozen evidence: identity, award context, completion, expiry, instructor, Groups and enabled Course evidence are copied at issuance. Later user, Course or Quiz changes do not rewrite them.
Public security: each issuance has a random 256-bit public token. PNG QR codes contain the opaque URL, not learner data. Certificate-ID lookup is rate-limited without retaining raw verifier IP addresses.
PDF and email: PDFs use LearnDash’s native renderer; HTML email uses wp_mail(). Deleting the WordPress user does not remove frozen verification data but prevents regeneration of that learner’s native PDF.
Reporting: explicit per-user admission and calculated scope apply equally to HTML results and CSV export.
Extension boundary: documented certificate and report shortcodes are supported interfaces. Internal classes, tables, options, metadata and licensing filters are not a stable public API in Version 1.
Changelog
+ Preview-first Historical Import for surviving LearnDash Course, Quiz and Group awards.
+ Site-wide discovery counts and review of dates, status and reconstructed evidence.
+ Dedicated update-email workflow for valid, Expiring Soon and non-expiring imports.
~ Original completion retained as imported completion and public issuance date.
~ Bounded import without replaying hooks or changing enrolment, access or progress.
! Deterministic duplicate protection prevents repeat registration and notification.
! Corrected administrator request-method handling so settings save reliably across supported WordPress and PHP environments.
+ Durable Course, Quiz and Group issuance records, certificate IDs, verification URLs and PNG QR codes.
+ Global and per-certificate expiry, four credential states and administrative lifecycle controls.
+ Issuance-aware shortcodes plus optional Course progress, assessment and attempt evidence.
+ Independent award emails, native PDF attachment, administrative reporting and scoped front-end CSV report.
+ Fifteen-day trial with Pro single-site and Agency ten-site licensing.
~ Expiry pauses new CCM issuance while preserving historical verification and reporting.
Quick reference
| WordPress | 7.0 or later; 7.0.2 tested |
| LearnDash | 5.1.8 or later; LearnDash 4 not supported |
| PHP | 8.1+ with GD and mbstring; PHP 8.3 tested |
| Certificates | Native LearnDash Course, Quiz and Group certificates |
| Verification page | [lecv_certificate_verification] |
| Front-end report | [lecv_certificate_report] |
| Database | Site-prefixed lecv_issuances and lecv_sequences tables |
| Trial | 15 days of full functionality |
| Pro | One production site |
| Agency | Up to ten production sites |
| Licence | Certificate Compliance → CCM License |
| Product | View plans and download |
