{"id":350033,"date":"2026-08-17T12:47:18","date_gmt":"2026-08-17T12:47:18","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/certverify-certificate-verification\/"},"modified":"2026-08-17T12:47:09","modified_gmt":"2026-08-17T12:47:09","slug":"certloom","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/certloom\/","author":23543779,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.5.0","stable_tag":"1.5.0","tested":"7.0.4","requires":"6.3","requires_php":"7.4","requires_plugins":null,"header_name":"Certloom \u2013 Certificate Verification","header_author":"Ecapla","header_description":"Manage certificates and publish exact-number verification with a native block, shortcode, CSV tools, and optional Elementor widgets.","assets_banners_color":"cacbda","last_updated":"2026-08-17 12:47:09","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/ecapla.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":36,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.5.0":{"tag":"1.5.0","author":"ecapla","date":"2026-08-17 12:47:09"}},"upgrade_notice":{"1.5.0":"<p>Review-resubmission release finalizing the Certloom identity, fixing activation after the rename, and preserving the existing certificate data and schema.<\/p>","1.4.9":"<p>Restore-integrity update with exact snapshot replacement, optional certificate merge, global write locking, and concurrent-change detection.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3651155,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3651155,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3651155,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3651155,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":{"certloom\/verification":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"certloom\/verification","version":"1.5.0","title":"Certloom \u2013 Certificate Verification","category":"widgets","icon":"shield-alt","description":"Add a certificate verification interface without requiring Elementor.","keywords":["certificate","verification","credentials","elementor"],"textdomain":"certloom","attributes":{"design":{"type":"string","default":"professional"},"showGuide":{"type":"boolean","default":true},"showEyebrow":{"type":"boolean","default":true},"showHeading":{"type":"boolean","default":true},"showDescription":{"type":"boolean","default":true},"showCredit":{"type":"boolean","default":false},"headingTag":{"type":"string","default":"h2"},"textAlign":{"type":"string","default":"left"},"eyebrow":{"type":"string"},"heading":{"type":"string"},"description":{"type":"string"},"placeholder":{"type":"string"},"buttonText":{"type":"string"},"notFoundText":{"type":"string"},"guideEyebrow":{"type":"string"},"guideHeading":{"type":"string"},"creditText":{"type":"string"}},"supports":{"align":["wide","full"],"html":false,"anchor":true},"editorScript":"file:.\/index.js","editorStyle":"file:.\/editor.css","style":"ecapla-certloom-public"}},"tagged_versions":["1.5.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3651155,"resolution":"1","location":"assets","locale":"","width":1900,"height":901},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3651155,"resolution":"2","location":"assets","locale":"","width":1901,"height":900},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3651155,"resolution":"3","location":"assets","locale":"","width":1901,"height":905},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3651155,"resolution":"4","location":"assets","locale":"","width":1897,"height":902}},"screenshots":{"1":"Public certificate verification page with status guide.","2":"Appearance &amp; Embed admin screen showing the block, shortcode, and Elementor widget options.","3":"Professional Elementor widget design in the editor preview.","4":"Meridian Elementor widget design in the editor preview."}},"plugin_section":[],"plugin_tags":[2191,276101,254836,174467,80],"plugin_category":[43],"plugin_contributors":[276102],"plugin_business_model":[],"class_list":["post-350033","plugin","type-plugin","status-publish","hentry","plugin_tags-certificate","plugin_tags-certificate-registry","plugin_tags-certificate-verification","plugin_tags-credentials","plugin_tags-shortcode","plugin_category-customization","plugin_contributors-ecapla","plugin_committers-ecapla"],"banners":{"banner":"https:\/\/ps.w.org\/certloom\/assets\/banner-772x250.png?rev=3651155","banner_2x":"https:\/\/ps.w.org\/certloom\/assets\/banner-1544x500.png?rev=3651155","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/certloom\/assets\/icon-128x128.png?rev=3651155","icon_2x":"https:\/\/ps.w.org\/certloom\/assets\/icon-256x256.png?rev=3651155","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/certloom\/assets\/screenshot-1.png?rev=3651155","caption":"Public certificate verification page with status guide."},{"src":"https:\/\/ps.w.org\/certloom\/assets\/screenshot-2.png?rev=3651155","caption":"Appearance &amp; Embed admin screen showing the block, shortcode, and Elementor widget options."},{"src":"https:\/\/ps.w.org\/certloom\/assets\/screenshot-3.png?rev=3651155","caption":"Professional Elementor widget design in the editor preview."},{"src":"https:\/\/ps.w.org\/certloom\/assets\/screenshot-4.png?rev=3651155","caption":"Meridian Elementor widget design in the editor preview."}],"raw_content":"<!--section=description-->\n<p>Certloom helps certification bodies, training providers, associations, auditors, and other organizations manage certificate records and publish public verification on WordPress.<\/p>\n\n<p>Visitors enter the complete certificate number to view its current status and only the fields approved for public display. Letter case is ignored, while spaces, punctuation, and hyphens must match. Records stay in the site's WordPress database; Certloom does not require an external verification service.<\/p>\n\n<h4>WordPress-first and self-hosted<\/h4>\n\n<p>Certloom provides a practical certificate registry without requiring a separate SaaS platform or a page builder. The native block and shortcode work with WordPress itself, while Elementor integration remains optional.<\/p>\n\n<h4>Publishing methods<\/h4>\n\n<ul>\n<li><strong>Native WordPress block<\/strong> with six designs.<\/li>\n<li><strong>Shortcode<\/strong> using <code>[certloom]<\/code> in the Classic Editor, a Shortcode block, templates, or other page builders.<\/li>\n<li><strong>Direct links<\/strong> using <code>?certloom_number=YOUR-NUMBER<\/code> for QR-code destinations. These requests receive noindex and private-cache headers, although the number may still appear in browser history, infrastructure logs, or site analytics.<\/li>\n<li><strong>Optional Elementor widgets<\/strong> when Elementor 3.10 or later is active: Professional, Meridian, Halo, Axis, Nova, and Forge.<\/li>\n<\/ul>\n\n<p>Each Elementor widget has isolated content and style controls. Structural responsiveness is automatic and container-aware. Certloom is independent and is not affiliated with or endorsed by Elementor.<\/p>\n\n<h4>Certificate management<\/h4>\n\n<ul>\n<li>Dedicated indexed database table.<\/li>\n<li>Add, edit, search, filter, sort, paginate, delete, and bulk-delete records.<\/li>\n<li>Valid, Suspended, and Withdrawn workflow statuses; Expired is normally calculated from the expiry date.<\/li>\n<li>Protected review handling for explicitly restored historical Expired records.<\/li>\n<li>Configurable core and custom fields with ordering and public-visibility controls.<\/li>\n<li>Fresh installations publish only certificate number and status by default.<\/li>\n<li>Removed custom fields are retired so their keys and stored values remain protected.<\/li>\n<li>Dedicated <code>manage_certverify<\/code> capability and optional Certificate Manager role.<\/li>\n<\/ul>\n\n<h4>Import, export, and complete backup<\/h4>\n\n<ul>\n<li>CSV template generated from the current field schema, followed by mapping review.<\/li>\n<li>Partial updates preserve fields not included in the import.<\/li>\n<li>Blank mapped cells preserve existing values unless clearing is explicitly enabled. Status cannot be cleared, and a new row with a mapped-but-blank Status is rejected.<\/li>\n<li>Per-row validation, formula neutralization, and bounded file, row, column, and cell limits.<\/li>\n<li>Administrator-only Historical restore mode for trusted Certloom exports containing protected legacy Expired records.<\/li>\n<li>Versioned streaming JSON backup for lossless restoration of certificates, settings, fields, retired values, workflow sources, and timestamps.<\/li>\n<li>Restore preview before choosing exact snapshot replacement or a non-destructive certificate merge.<\/li>\n<li>Restore locking pauses Certloom writes during commit while public verification remains available.<\/li>\n<li>Chunked imports, indexed prefetching, deferred counts, and keyset exports reduce memory and query pressure on large registries.<\/li>\n<\/ul>\n\n<h4>Security and privacy<\/h4>\n\n<ul>\n<li>Whole-number exact lookup; partial matches are never returned.<\/li>\n<li>Public output includes only fields explicitly enabled by the site owner.<\/li>\n<li>Private-cache and noindex headers for REST verification and supported direct-link requests.<\/li>\n<li>Bounded input, basic rate limiting, accessible announcements, and safe no-JavaScript verification.<\/li>\n<li>Identical same-page lookups share one in-flight request and stale responses cannot overwrite newer searches.<\/li>\n<li>No analytics, telemetry, remote scripts, remote fonts, or external certificate processing.<\/li>\n<li>Suggested privacy-policy wording is added to WordPress's Privacy Policy Guide.<\/li>\n<li>Certificate data and settings are retained on uninstall by default; administrators may opt into complete removal.<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Install the ZIP through Plugins &gt; Add New &gt; Upload Plugin, or upload the <code>certloom<\/code> folder to <code>\/wp-content\/plugins\/<\/code>.<\/li>\n<li>Activate Certloom.<\/li>\n<li>Review Certloom &gt; Field Manager and choose any additional fields that may appear publicly.<\/li>\n<li>Add records manually or through Certloom &gt; Import &amp; Export.<\/li>\n<li>Open Certloom &gt; Appearance &amp; Embed and choose the block, shortcode, or optional Elementor method.<\/li>\n<li>Review Certloom &gt; Access &amp; Settings for permissions, branding, privacy, and uninstall preferences.<\/li>\n<li>After widget CSS changes, use Elementor &gt; Tools &gt; Regenerate CSS &amp; Data and clear site caches.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"can%20i%20use%20certloom%20without%20elementor%3F\"><h3>Can I use Certloom without Elementor?<\/h3><\/dt>\n<dd><p>Yes. The native block, shortcode, administration, REST verification, CSV tools, direct links, roles, and status handling work independently.<\/p><\/dd>\n<dt id=\"what%20happens%20when%20a%20certificate%20expires%3F\"><h3>What happens when a certificate expires?<\/h3><\/dt>\n<dd><p>Expiry is calculated from the expiry date during normal administration and CSV workflows. Extending the date renews the certificate unless it is Suspended or Withdrawn. Restored historical Expired records remain protected until reviewed.<\/p><\/dd>\n<dt id=\"can%20a%20csv%20update%20erase%20fields%20i%20did%20not%20import%3F\"><h3>Can a CSV update erase fields I did not import?<\/h3><\/dt>\n<dd><p>No. Unmapped values are preserved. Blank mapped cells on existing records are also preserved unless clearing is explicitly enabled. Status cannot be cleared.<\/p><\/dd>\n<dt id=\"what%20is%20the%20difference%20between%20csv%20export%20and%20complete%20backup%3F\"><h3>What is the difference between CSV export and Complete backup?<\/h3><\/dt>\n<dd><p>CSV is intended for spreadsheet interchange. Complete backup is a versioned streaming JSON format for lossless restoration, including settings, field definitions, retired values, workflow sources, and timestamps.<\/p><\/dd>\n<dt id=\"does%20verification%20work%20without%20javascript%3F\"><h3>Does verification work without JavaScript?<\/h3><\/dt>\n<dd><p>Yes. The form can submit a normal GET request and render the result on the server. JavaScript provides the faster in-page experience.<\/p><\/dd>\n<dt id=\"is%20certificate%20data%20sent%20to%20ecapla%3F\"><h3>Is certificate data sent to Ecapla?<\/h3><\/dt>\n<dd><p>No. Records stay in the site's WordPress database and verification is performed by that site.<\/p><\/dd>\n<dt id=\"is%20data%20deleted%20on%20uninstall%3F\"><h3>Is data deleted on uninstall?<\/h3><\/dt>\n<dd><p>Not by default. Enable permanent data removal in Certloom &gt; Access &amp; Settings before deleting the plugin only when that is intended.<\/p><\/dd>\n<dt id=\"where%20can%20i%20get%20support%3F\"><h3>Where can I get support?<\/h3><\/dt>\n<dd><p>After publication, use the Support tab on the WordPress.org plugin page. Include the WordPress, PHP, and Certloom versions, clear reproduction steps, and relevant error text. Never post private certificate data, backup files, credentials, or personal information in a public topic.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.5.0<\/h4>\n\n<ul>\n<li>Fixed Elementor Flexbox Container sizing so all Certloom widgets occupy the available row and remain centered; Professional stays capped at 680px.<\/li>\n<li>Finalized the public identity as Certloom \u2013 Certificate Verification with the requested WordPress.org slug and text domain <code>certloom<\/code>.<\/li>\n<li>Fixed an activation fatal introduced during the pre-release rename by restoring the correct settings, fields, and import include paths.<\/li>\n<li>Restored Elementor width safety after the rename so Professional remains centered at up to 680px and Meridian, Halo, Axis, Nova, and Forge fill their Elementor containers without overflow.<\/li>\n<li>Aligned the native block, admin navigation, shortcode, direct-link parameter, REST namespace, and Elementor widget identifiers with Certloom while preserving the existing database schema and stored data.<\/li>\n<li>Prepared the corrected WordPress.org review-resubmission package and directory assets.<\/li>\n<\/ul>\n\n<h4>1.4.9<\/h4>\n\n<ul>\n<li>Added an expiring restore-maintenance lock that pauses Certloom writes during a resumable complete restore.<\/li>\n<li>Split restoration into exact Replace mode and non-destructive Merge mode with preview counts for current-only certificates.<\/li>\n<li>Added registry and configuration checks so unexpected changes abort before the atomic restore commit.<\/li>\n<li>Made complete-backup generation reject mixed-state files when records or configuration change during export.<\/li>\n<li>Preserved public verification during restore and expanded restore-state cleanup.<\/li>\n<\/ul>\n\n<p>For the complete release history, see <code>changelog.txt<\/code> included with the plugin.<\/p>","raw_excerpt":"Manage certificates and publish exact-number verification with a native block, shortcode, CSV tools, and optional Elementor widgets.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/350033","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=350033"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/ecapla"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=350033"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=350033"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=350033"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=350033"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=350033"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=350033"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}