A universal, white-label certificate engine for WordPress.
Design any certificate with a live visual builder, then issue verifiable PDF certificates manually, on Tutor LMS course completion, or after a WooCommerce purchase - free, open source, and brand-agnostic.
Live site | Documentation | Report a bug | Request a feature
Free LMS plugins (notably Tutor LMS) and most WooCommerce course and workshop setups have no built-in certificate engine, or they lock certificate design behind a paid tier. Site owners are forced to either pay for a pro LMS add-on, hand-make certificates in Canva and email them one by one, or hard-code a single baked template that only fits one brand.
There is no free, open-source, design-flexible, brand-agnostic certificate tool that works standalone AND with an LMS AND with WooCommerce.
WP Certificates fixes that. One free, open-source plugin that auto-detects your site identity, lets you design any certificate with a live visual builder (no baked template, no lock-in), and issues verifiable PDF certificates manually, on Tutor LMS course completion, or after a WooCommerce purchase.
- No baked template. A fully dynamic canvas you control - background, gradients, borders, logo, layered text, signatures, and a verification QR code.
- Auto site identity. Brand name, logo, issuer, and certificate ID prefix are detected from your site and theme, and every value is overridable.
- Truly standalone. Issue to anyone without an account. The Tutor LMS and WooCommerce triggers are optional add-ons, not requirements.
- Verifiable by design. Every certificate carries a unique human-readable code and a QR that resolves to a public verification page.
- White-label by default. No plugin branding on certificates or emails. The small "Powered by" credit is opt-in.
- Zero external dependencies. PDF export is handled by a hand-written JPEG-to-PDF writer. No Composer, no third-party PDF library.
- Developer-friendly. A documented set of hooks and filters for tokens, render data, email, codes, and QR generation.
- Live visual certificate builder - form controls with a real-time, server-rendered preview.
- Fully dynamic canvas: solid color, gradient (vertical, horizontal, diagonal), or background image with adjustable opacity.
- Double border with configurable color, width, inset, and inner line.
- Alpha-aware logo placement.
- Custom font upload (.ttf / .otf), including Unicode and RTL scripts.
- Layered text elements - Eyebrow, Title, Subtitle, Recipient name (with underline rule), Body, Date line, and Certificate ID line.
- Each element has independent font, size, color, X/Y position (in percent), alignment, max-width wrap, line-height, letter-spacing, and an optional UPPERCASE transform.
- Auto text-fit: long recipient names and titles shrink to fit their box; body text wraps to a max width.
- Merge placeholders for recipient, course, date, IDs, issuer, brand, and grade.
- Up to 3 signature blocks - each with an optional signature image, name, title, and X position.
- Manual issue for anyone - no WordPress account needed.
- Issue for a WordPress user plus a course.
- Auto-issue on Tutor LMS course completion.
- Auto-issue on WooCommerce order completion - any product, or a specific product-ID allowlist.
- Tutor LMS backfill tool for past students.
- Sequential certificate number plus a unique human-readable code, for example
PREFIX-0042-AB12.
- Print-ready PDF (A4 or US Letter, landscape or portrait) via a dependency-free JPEG-to-PDF writer.
- PNG image export.
- Auto-email with the certificate attached (PDF, PNG, or both), with a fully customizable subject, heading, body, and accent color.
- Public verify page via the
[wpcert_verify]search shortcode. - Instant
?wpcert_verify=CODEverification page. - Revoke and restore status - revoked certificates display as revoked on the verify page.
- Result card shows Valid, Revoked, or Not found with recipient, course, ID, issue date, and issuer.
- No plugin branding on certificates or emails by default.
- Optional small "Powered by" credit is opt-in.
- Internationalization ready (text domain
wp-certificates), with a translation template in/languages.
- Documented hooks and filters for tokens, render data, email, certificate codes, ID prefix, and QR generation.
- Action hooks fired when a certificate is issued or its status changes.
- Data-driven settings schema shared by the admin builder and the renderer.
WP Certificates is fully standalone - none of the integrations below are required to use it.
| Platform | Use |
|---|---|
| WordPress | Core platform. Requires 5.8+ and PHP 7.4+ with GD and FreeType. |
| Tutor LMS | Optional auto-issue on course completion, plus a backfill tool for past students. |
| WooCommerce | Optional auto-issue on order completion - any product or a specific product-ID allowlist. |
The images below are illustrative.
| Builder | Certificate | Verification |
|---|---|---|
![]() |
![]() |
![]() |
Requirements: WordPress 5.8 or newer, PHP 7.4 or newer, and the GD extension with FreeType support (used by the renderer).
- Download the latest release ZIP, or clone the repository:
git clone https://github.com/konkomaji/wp-certificates.git
- In your WordPress admin, go to Plugins > Add New > Upload Plugin and select the ZIP (or copy the folder into
wp-content/plugins/). - Click Activate.
On activation the plugin creates its database table and sequence counter, and a protected uploads directory at wp-content/uploads/wp-certificates/.
- Open Certificates > Certificate Builder.
- Design your certificate across the tabs - Identity, Canvas, Text, Signatures and QR, Issuing, Email, and Verification - watching the live preview update as you go.
- Set your issuing triggers (manual only, Tutor LMS, WooCommerce, or any combination).
- Create a page and add the
[wpcert_verify]shortcode so recipients can verify certificates. - Issue a test certificate from Issue and Tools.
| Shortcode | Description |
|---|---|
[wp_certificates] |
The logged-in user's certificate list with download buttons. |
[wpcert_verify] |
Public certificate verification search box and result card. Alias: [wpcert_certificate_verify]. |
Use these merge codes in any text element. Add your own with the wpcert_tokens filter.
| Placeholder | Resolves to |
|---|---|
{recipient_name} |
The recipient's full name. |
{course} |
The course or product name. |
{date} |
The issue date. |
{certificate_id} |
The unique human-readable certificate code. |
{sequential_id} |
The zero-padded sequential number. |
{issuer} |
The issuing organization. |
{brand} |
The brand or site name. |
{grade} |
The grade, when provided. |
| Hook | Type | Purpose |
|---|---|---|
wpcert_tokens |
filter | Add or override merge placeholders used in text and email. |
wpcert_render_data |
filter | Adjust the resolved render data before the canvas is drawn. |
wpcert_render_after |
action | Run after the certificate image has been rendered. |
wpcert_email_args |
filter | Modify the outgoing email arguments (recipient, subject, headers, attachments). |
wpcert_email_tokens |
filter | Add or override placeholders available in the email template. |
wpcert_cert_code |
filter | Customize the generated unique certificate code. |
wpcert_id_prefix |
filter | Customize the auto-derived certificate ID prefix. |
wpcert_qr_endpoint |
filter | Change the remote QR image endpoint. |
wpcert_qr_png_path |
filter | Provide a local QR PNG path for offline or bundled generators. |
wpcert_certificate_issued |
action | Fires after a certificate record is created. |
wpcert_status_changed |
action | Fires when a certificate is revoked or restored. |
add_filter( 'wpcert_tokens', function ( $tokens, $certificate ) {
// Adds a {company} placeholder usable in any text element.
$tokens['{company}'] = get_bloginfo( 'name' ) . ' Academy';
return $tokens;
}, 10, 2 );See docs/TECHNICAL.md for the full rendering pipeline, database schema, and extensibility reference.
Planned for releases after 1.0.0:
- Bulk CSV issuing with duplicate detection
- Expiry dates with auto-expire and reminder emails
- Social sharing and LinkedIn "Add to Profile"
- REST API CRUD
- Analytics dashboard (issued, verified, viewed)
- True drag-and-drop JavaScript builder
- LearnDash, LifterLMS, and Sensei adapters
- Open Badges export
- Webhooks and Zapier
Contributions are welcome. Please read CONTRIBUTING.md to get started, and follow our Code of Conduct.
Please report security issues privately. See SECURITY.md for how to disclose a vulnerability responsibly.
WP Certificates is released under the MIT license. See LICENSE for the full text.
Built by Konko Maji.
Bundled default serif family: TeX Gyre Pagella, under the GUST Font License.


