WordPress plugin

Your WordPress site is the classroom.
Peerfold is the engine behind it.

Install one plugin, paste one key, and the site you already publish becomes your academy: a catalog, course pages, a lesson player and a certificate check, drawn in your own theme at your own addresses. The courses, the learners and the reporting stay in Peerfold, where your CRM can reach them.

Six blocks, six shortcodesLessons in your theme, no frameCourse links point at your siteNative HubSpot sync on every plan
yourcompany.com/learn/onboarding
A white-label learner portalNORTHWIND ACADEMYCatalogMy learningCertificatesENMOWelcome back, MayaTwo lessons left in RevOps Certification.4.5 CEU earned · 1 certificatePipeline hygieneLesson 4 of 6 · resume 3:12ResumeYour coursesBrowse catalogRevOps Foundations6 lessons · 1.5 CEU68% completePipeline Hygiene4 lessons · 1 CEU25% completePartner Onboarding8 lessons · SCORMCompletedacademy.northwindsupply.com

Five minutes, start to finish

One press wires the whole thing up.

There is no API key to mint by hand, no origin list to edit, no page addresses to type into two systems. You give the plugin your workspace address and one secret key, and it does the rest of the setup by talking to Peerfold.

  1. Step 1

    Upload the plugin

    Plugins, Add New, Upload Plugin, choose the file, activate. The download lives in Peerfold and in the Help Center, and every site downloads the same bytes: the plugin carries no key and no workspace identity until you connect it.

  2. Step 2

    Connect your workspace

    Paste your workspace address and a secret key from Settings, Developers, and press Connect. One call adds your site to the workspace's allowed origins, returns the publishable key the pages embed with, and registers where your course pages live. Pressing it again returns the same keys and adds nothing twice.

  3. Step 3

    Create the pages

    One press builds a catalog, a course page, a my-learning page and a certificate check, each out of Peerfold blocks. They are ordinary WordPress pages from that moment on: retitle them, move them, wrap them in your theme, put them in a menu.

  4. Step 4

    Turn on course addresses

    Check one box and every course gets a URL on your own domain: /learn/your-course, and /learn/your-course/your-lesson for lessons. One page serves the whole catalog, and the address is what tells it which course to draw.

  5. Step 5

    Optional: the webhook

    The settings screen shows a webhook address for this site. Add it in Peerfold, paste the signing secret back, and a publish or a completion notifies your site directly. Every verified delivery becomes a WordPress action your own code can hook.

Your secret key stays on your server, is never printed back in full, and never reaches a browser. The only credential that appears in a page is the publishable key, which can read your published catalog and nothing else.

The plugin is in beta. It is not in the WordPress.org plugin directory yet, so you download it from inside Peerfold and upload it the way you would any other plugin file.

The part people expect to be a frame

Lessons render in your theme, not in a window.

Your type, your header, your width. The lesson block draws the lesson's own content into your page: headings, text, images, video, audio, files, callouts. It is your template around it, so a lesson looks like the rest of your site because it is the rest of your site.

Quizzes are part of the lesson. A quiz is a form on your own page, in your own theme. Peerfold marks it: the answers go to your workspace and the score comes back, so the grading, the attempts and the pass threshold stay where the records are, and the correct answers never reach the browser at all.

The player takes what only the player can run. A timed exam, a video that has to be watched to count, a SCORM package, a live session: those are handed to the Peerfold course player automatically, with its own runtime and its own record of what happened. Nothing about that is your theme's job, and pretending otherwise is how learning records go missing.

A visitor with no account sees the course. Not a login screen in a box. The page shows the course, its description, the lesson they came for and the whole lesson list, with one sign-in button; signing in brings them back to the same lesson with its content on it.

Every lesson still links to the player. The block renders a plain link to the full lesson in the player for anyone who wants it, and a block set to link-only makes that link the whole thing. One course, two ways in, one set of progress behind them.

Nothing to keep in step. The plugin stores no course content in your WordPress database. It reads published courses from Peerfold, caches what it read, and clears the cache the moment Peerfold tells it a course changed. Fix a typo in Peerfold and the site is right on the next request.

app.peerfold.com/courses — the lesson, in Peerfold
The three-pane course editorpeerfoldCourses / Onboarding 101PreviewPublishOUTLINE1 · WelcomeWhy NorthwindYour accountFirst workflow2 · Getting startedData modelOffice hoursLiveFinal examExam+ Add lessonYour account3:12 / 8:04QUIZ · PASS AT 80%Where does a completion land?On the HubSpot contactIn a nightly exportNowhere+ Add blockSETTINGSLesson typeStandardEstimated time8 minMust-watch gateOnCEU credits0.5Autosaved 12:04Draft · 2 revisions

Nine blocks, nine shortcodes

The learner surfaces are page furniture.

Each one is a block in the editor and a shortcode for a theme that predates blocks, so a page builder, a classic template and a full-site-editing theme all get the same surface. Place them anywhere, more than one to a page.

Catalog

Everything you have published, for a visitor who has never signed in.

Course

One course above the fold: image, description, lesson count, credits, price and a button.

My learning

The signed-in learner's own courses, certificates and resources.

Certificate check

Look a certificate up by its serial number, with no sign-in at all, which is what makes it something an employer can confirm.

Account

The signed-in learner's name, avatar and links.

Lesson player

A lesson drawn into your own page, with anything that needs the course player handed to it.

Program

One learning program: its image, description, price, the courses it covers, and how far through a signed-in member is.

Memberships

The tiers you sell, as cards with a join button on each.

Checkout return

The page a buyer lands on after paying. It asks Peerfold what actually happened rather than trusting the address bar.

A visitor can buy a course, a program or a membership from these pages. The payment itself happens on your workspace's own secure checkout page. This plugin has no payment form, no payment script and no card field of any kind, and it never sends a price: it names what is being bought, and Peerfold reads the price from your workspace at that moment.

The surfaces inherit your theme's type, and twelve CSS custom properties control the rest. Set them once on :root and every block follows.

Where your team works

Peerfold opens inside wp-admin.

Courses, reports, workspace settings and help open as real Peerfold screens framed in your WordPress admin, signed in as you. There is no second course editor to learn and no copy of anything to keep in step.

  • The course editor, the reports and the settings screens, framed in wp-admin
  • Your WordPress account and your Peerfold account stay separate on purpose
  • Peerfold opens a screen only for an email address that is already a workspace member
  • It never creates an account and never grants access: an unknown address gets an invitation prompt
  • One set of permissions and one audit trail, because there is only one product underneath

Where the results go

WordPress is the classroom. Your CRM is the record.

The sync belongs to the platform rather than to the plugin, so it runs the same way whether a learner reads on WordPress, on a HubSpot page, in the hosted portal or inside your own app. Choosing WordPress as the front end changes where people read. It changes nothing about what your CRM ends up holding.

A course record per enrollment. Each learner becomes a contact, each course they are working through becomes a record associated with that contact, and the lessons they have finished, their exam scores, their certificates and their earned credits sit on it. Twenty courses stay twenty records rather than twenty custom fields.

Your lists and workflows already read it. Milestones post activity notes on the contact's timeline where your team already looks, HubSpot lists enroll and revoke on their own, and a membership purchase can open a deal in a pipeline you choose.

Nothing waits on the CRM. Every write goes through a transactional outbox with per-portal rate limiting, so a slow afternoon in HubSpot never slows a page on your site down. A sync console shows the queue, retries by itself, and raises a flag when something needs a person.

Salesforce and Day.ai receive the same signals. Each learner becomes a Contact in Salesforce with their starts, finishes, exams and certificates on its timeline, and Day.ai gets the learners, the companies they belong to and their progress. Connect more than one at a time: none of them waits on the others.

app.hubspot.com/contacts — timeline & course records
A CRM contact record with course data on itContactsCompaniesDealsMarketingMOMaya OrtizDirector of RevOpsNorthwind SupplyLifecycle stageCustomerCourse progress68%Credits earned4.5 CEUTraining dueAug 14, 2026MembershipGold · activeSynced from PeerfoldLast write 9:41 AMActivity timelineCompleted: Pipeline hygieneToday · 9:41 AMPassed exam · 92%RevOps Foundations · yesterdayCertificate issuedHL-2026-0481 · Jul 22Enrolled from a listQ3 Onboarding · Jul 18View all 24 eventsMY COURSES (3)RevOps FoundationsCompleted100% · exam 92%Pipeline HygieneIn progress68% · lesson 4 of 6Compliance 2026Due Aug 14Not startedCREDITS1.5 CEUJul 223.0 contact hoursJun 30

See everything Peerfold connects to

Courses a stranger can read

Open a course, and it can be found.

A course you mark as open in Peerfold can be read by anybody, with no account and no sign-in. Its lessons are indexable, they describe themselves to a search engine as learning resources, and they join your portal's sitemap. Everything that needs to know who is reading, a quiz, a sorting activity, a discussion, an interactive experience, shows the same short invitation to create a free account that your portal shows, and the progress a visitor built up while reading follows them into their new account.

  • Open is a setting on the course, and a priced or members-only course refuses it rather than opening quietly
  • Open lessons carry LearningResource markup and a breadcrumb trail, and gated lessons appear in no sitemap at all
  • As it reaches your workspace, the plugin renders an open course's lessons on your own server, so the words are in the page before any JavaScript runs
  • Those server-rendered pages load none of the learner-surface JavaScript: markup and a stylesheet, on your own domain
  • A course you have not opened is unchanged, and a publishable key cannot reach a word of it

Server-side rendering is in the plugin today and is rolling out: it lights up as the public course feed it reads starts carrying lesson content. Until it reaches your workspace, open lessons draw in the visitor's browser on your pages and the indexed copy is the one on your Peerfold portal. Nothing about this changes what a visitor can read.

Coming from a WordPress LMS?

Comparing us to LearnDash?

LearnDash keeps the courses inside WordPress; Peerfold keeps them in a platform and lets WordPress be the front end. Both answers are defensible, and which one is right for you turns on your CRM, your compliance requirements and who else has to administer the training. We wrote the comparison out, with every claim about LearnDash carrying the public source it came from.

Read the LearnDash comparison

Plans run from $209 to $1,800 a month, enterprise included. See every plan, feature by feature

Questions

The ones a WordPress team asks first.

Will it work with my theme and my page builder?

Yes. Each surface is a block and a shortcode, so a block theme, a classic theme and a page builder all have a way to place it, and what comes out is drawn with your theme's own type inside your own template. Twelve CSS custom properties control color, surface and corner radius if you want to go further. The one thing to check is that your permalinks are not the plain numeric kind, because course addresses need a path to live at.

Do my learners need WordPress accounts?

No, and giving them one would not help. Learners are Peerfold members: a page that shows one learner their own work sends them to your Peerfold portal to sign in and brings them straight back, and their session lives in their own browser. Your WordPress user list stays what it was, which matters most to the sites that already have thousands of subscribers for something else.

Where does the course content actually live?

In Peerfold. The plugin stores no lessons, no quizzes and no progress in your WordPress database: it reads published courses from Peerfold, caches what it read, and clears that cache when Peerfold tells it a course changed. That is the trade this design makes, and it is what lets the same course serve a WordPress page, a HubSpot page, the hosted portal and your own app without four copies drifting apart.

What happens to quizzes, exams and SCORM?

A quiz is on your page: the questions, the answers and the score, in your own theme. Peerfold marks it, which is the part that matters. The answers are sent to your workspace and graded there, so the record is the same record the hosted portal would have written and the correct answers never reach a browser. Exams, must-watch video and SCORM are handed to the Peerfold course player, because a timed exam needs a clock nobody can pause, must-watch video needs real watch coverage and a SCORM package needs a runtime that answers its API calls. None of those is something a WordPress page can stand in for.

Will it slow my site down?

The learner surfaces are about 120KB of JavaScript, loaded only on pages that carry one of the blocks, and they fetch their own data in the visitor's browser, so your server never waits on Peerfold to draw a page. The one place your PHP talks to Peerfold while rendering is the server-side read for an open course's lesson, and that read is cached, capped at an eight-second timeout, and falls back to drawing in the browser if Peerfold is slow.

What happens if I deactivate or delete the plugin?

The plugin's options, including both keys, are removed when you delete it. The pages it created stay, because they are your content, and nothing in Peerfold is changed or deleted: your courses, learners and records are all still there, and the links Peerfold prints go back to your portal. Revoking the publishable key is something you do in Peerfold, where you can see what else is using it.

How do I get the plugin?

You download it from inside Peerfold, on the Help Center's WordPress page, and upload it under Plugins, Add New, Upload Plugin. It is a beta and it is not in the WordPress.org plugin directory yet, so there is no search box for it in WordPress and no automatic update; the download link always serves the current build. When the directory listing lands, that step becomes a search box.

Can I keep the hosted portal at the same time?

Yes. The blocks work either way, and the choice you are actually making is where Peerfold's printed links should point, which is one setting rather than a migration. Run the WordPress pages beside your portal while you move over, and turn course addresses on when you are ready for emails and CRM records to send people to your site. If the workspace already points somewhere else, the plugin says so instead of taking the links from under it.

How does the CRM sync work if the front end is WordPress?

Exactly as it does everywhere else, because the sync belongs to the platform rather than to the plugin. A learner who signs in on your site is a Peerfold member, and every enrollment, lesson, exam, certificate and credit is written to your CRM through the same asynchronous outbox: a contact, a course record associated with it, and activity notes on the timeline. HubSpot, Salesforce and Day.ai each get the same facts, and none of them is on the path of a page load.

Connect your site this afternoon.

Seven days, self-serve, no card. Upload the plugin, press Connect, publish one course, and watch the completion land on a HubSpot contact.