Product documentation

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.

Compatibility boundary: CCM is built for native LearnDash 5 certificates on WordPress 7. It does not process certificates controlled by Visual Certificate Builder. Disable other certificate verification and email systems before enabling overlapping CCM features.

Requirements

WordPress7.0 or later; WordPress 7.0.2 tested for Version 1
LearnDash5.1.8 or later required; LearnDash 4 is not supported
PHP8.1 or later with GD and mbstring; PHP 8.3 tested
Certificate scopeNative LearnDash Course, Quiz and Group certificates
Public verificationPublicly reachable site and working WordPress permalinks
Email and PDFWorking WordPress email delivery; certificate PDFs use LearnDash’s native renderer
WooCommerceNot required
Trial15 days of full CCM functionality

Quick start

  1. 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.
  2. Configure CCM — Open Certificate Compliance → Settings. Choose the certificate-ID format, default expiry, verification fields and email options.
  3. 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.
  4. Assign through LearnDash — Assign the certificate to a Course, Quiz or Group using LearnDash’s normal settings and award rules.
  5. Run a complete test — Qualify with a test learner. Confirm the issuance record, native certificate fields, verification page, email and PDF where enabled.
  6. 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-000001Uses your prefix, the completion year and an atomic sequence.
PREFIX-TYPE-000001TYPE becomes COURSE, QUIZ or GROUP; it does not insert the award title.
PREFIX-AB12-CD34Uses your prefix with randomly generated mixed segments.
1234-5678-9012-3456Generates 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.
Issuance-aware output: fields remain blank when no matching issuance exists. This prevents a previous credential ID or QR code being reused for a completion that occurred while CCM issuance was unavailable.
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 progressCompleted and total published LearnDash lessons, topics and quizzes enumerated for the Course.
AssessmentEligible, attempted, passed and required Quiz counts plus the average selected passing score.
Attempt historyTotal 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.

ValidActive and outside the configured expiry-warning window.
Expiring SoonStill valid but inside the warning window.
ExpiredThe frozen or administratively adjusted expiry has passed.
RevokedAn 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.

Use one certificate-email system: disable other plugins or modules that email LearnDash certificates before enabling automatic CCM email.
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.

Historical limits: CCM does not invent deleted users, orphaned completion records or Group-completion history removed by LearnDash. Course access or current enrolment is not required when the learner and completion record still survive.

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

v1.1.0 — September 5, 2026

+ 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.

v1.0.1 — September 5, 2026

! Corrected administrator request-method handling so settings save reliably across supported WordPress and PHP environments.

v1.0.0 — August 2, 2026

+ 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

WordPress7.0 or later; 7.0.2 tested
LearnDash5.1.8 or later; LearnDash 4 not supported
PHP8.1+ with GD and mbstring; PHP 8.3 tested
CertificatesNative LearnDash Course, Quiz and Group certificates
Verification page[lecv_certificate_verification]
Front-end report[lecv_certificate_report]
DatabaseSite-prefixed lecv_issuances and lecv_sequences tables
Trial15 days of full functionality
ProOne production site
AgencyUp to ten production sites
LicenceCertificate Compliance → CCM License
ProductView plans and download

Back to top ↑