Getting started, administration, the learner experience, and the developer surface for the WordPress-native LMS that powers branded WooCommerce academies.
Getting Started
Introduction
What Learn with Foundation is, how it differs from traditional LMS plugins, and how it relates to WordPress and WooCommerce.
Learn with Foundation is a WordPress-native LMS layer. It turns content you already publish, alongside the WooCommerce store you already run, into a branded academy with enrollment, progress tracking, quizzes, and verifiable certificates.
How it differs from traditional LMS plugins
Content-model agnostic: it attaches to your existing course post type instead of forcing a proprietary structure or a content migration.
Commerce-driven enrollment is a designed journey through purchase, identity, activation, sign-in, and access, not just a webhook.
Split-domain ready: run the shop on your main site and the academy on a learning subdomain.
Certificates are verification-ready, with a public verification page, not just completion badges.
Templates are theme-overridable, so the learner experience matches your brand.
Supported versions
WordPress 6.0 or newer
PHP 8.0 or newer
Pretty permalinks enabled
WooCommerce for paid course access; optional for free courses
★
Keep your payment gateway, checkout settings, and order-status workflow aligned with the way you sell courses.
Relationship to WooCommerce
WooCommerce handles selling, including products, checkout, payments, and refunds. Learn with Foundation handles everything after the order: enrollment, account provisioning, activation, access control, learning, progress, and certificates. WooCommerce is optional for the free, lead-generation tier and required once you sell paid access.
The content-model-agnostic engine that lets Learn with Foundation attach to the courses you already have.
Connect Learn with Foundation to the post type that already stores your courses.
★
This is one of Learn with Foundation's biggest differentiators. Most LMS plugins force their own course structure; Learn with Foundation adapts to yours.
Content-model agnostic architecture
Learn with Foundation does not require a proprietary 'course' post type. It can treat any registered post type as a course source, so you keep your existing editorial workflow and avoid a migration.
Course discovery
Open Learn with Foundation → Discover Courses and run a scan. Learn with Foundation inspects your registered post types and surfaces the ones that look like course content.
Mapping external CPTs
Pick the post type that holds your courses and map its fields, including title, summary, cover image, and the relationship to lessons. Once mapped, those posts become first-class courses Learn with Foundation can enroll, gate, and certify, without changing how you edit them.
Assemble modules, lessons, and quizzes into the order learners move through.
Arrange modules, lessons, and quizzes into the learner path.
Modules
Modules group related lessons into sections. Use them to chapter a course.
Lessons
Lessons are the unit of learning, whether video or text. Each lesson tracks its own completion.
Quizzes
Quizzes check understanding and can gate progress. Attach them to a module or to the end of a course.
Ordering
Drag modules, lessons, and quizzes into the sequence learners should follow. With sequential access enabled, each item unlocks as the previous one is completed.
How a buyer becomes an authenticated, enrolled learner through guest checkout, auto-provisioning, activation, and sign-in.
Activation after purchase: set a password, then start learning.
Guest checkout
Buyers can purchase without an account. Learn with Foundation captures the order email as the identity for the learner.
Auto-provisioning
On a completed order, Learn with Foundation creates or matches a learner account from the order email and enrolls it in the purchased course.
Activation
The learner receives a branded activation email with a secure link to set a password and confirm the account.
Sign-in
Once activated, the learner signs in and lands on My Learning with their courses ready.
Access flow
Purchase (WooCommerce order completed)
↓
Identity (match or create account from order email)
↓
Auto-provision (enroll in purchased course)
↓
Activation email (secure set-password link)
↓
Sign in
↓
My Learning (enrolled & ready)
Issue branded, verifiable certificates on course completion.
The public verification page confirms a certificate is genuine.
Templates
Certificate templates are stored as fl_certificate posts with customizable settings such as copy, organization, colors, and layout style. Theme-level full template replacement is limited today; see Theme Overrides for the supported override surface.
Course association
Associate a certificate with a course so completion automatically issues it. The learner receives a PDF by email and can download it anytime from My Learning.
Verification
Each certificate carries a unique number and a public verification URL. Anyone, including an employer or registrar, can confirm it is genuine without logging in.
Public verification confirms the learner name, course, issue date, and certificate identifiers. It does not expose the learner's email address.
How orders become enrollments through product mapping, enrollment triggers, refund behavior, and order statuses.
Checkout grants course access and sends the learner's welcome or activation email.
★
Order status settings determine when learners receive access. Review this section whenever you change checkout, fulfillment, or refund handling.
Product mapping
Link a WooCommerce product to a Learn with Foundation course. One product can grant a single course or several (bundles).
Enrollment
When an order reaches a granting status, Learn with Foundation provisions the learner and enrolls them in the mapped course(s).
Order statuses
Completed / Processing: grants access (you choose which statuses grant).
On-hold / Pending: no access until the order advances.
Cancelled / Failed: no access.
Refund behavior
Refunded or cancelled orders can expire course access while retaining learner progress. Confirm your payment gateway refund and cancellation events trigger the expected access changes whenever gateway settings change.
The learner's home, with every enrolled course and a clear next step.
The learner home: enrolled courses with progress.
My Learning is the dashboard a learner sees after signing in. It lists every course they are enrolled in, shows progress for each, and surfaces a single 'continue learning' action that jumps to the next incomplete lesson.
Where learning happens, with video and text lessons plus automatic progress tracking.
The lesson player tracks completion as learners progress.
Video mode
Video lessons embed your player of choice. Scrubbing behavior is configurable, so you can require learners to watch through before a lesson is marked complete.
Text mode
Text-first lessons render formatted content for reading-based courses. Completion can be manual ('Mark complete') or automatic on reaching the end.
Progress tracking
Each lesson reports completion to the Progress Service. The player shows where the learner is in the course and unlocks the next item when sequential access is enabled.
fl_quiz_attempts: user_id, quiz_id, course_type, course_id, score, passed, answers_json, created_at. One row per recorded attempt.
fl_issued_certificates: certificate_number, user_id, course_type, course_id, certificate_template_id, issued_at, emailed_at. One row per issued certificate.
Certificate templates
Certificate designs are stored as fl_certificate posts. Issued learner credentials are stored separately in fl_issued_certificates.
Relationships
Learner-state tables key off user_id plus course_type and course_id. Enrollment is the parent record; progress and quiz attempts accumulate against it; an issued certificate is the terminal record written when the completion rules are satisfied.
Public endpoints intended for site integrations. Admin and internal endpoints are intentionally undocumented and may change.
GET /wp-json/foundation-learn/v1/continue-learning
POST /wp-json/foundation-learn/v1/progress/{lesson_id}
POST /wp-json/foundation-learn/v1/quizzes/{quiz_id}/attempt
GET /wp-json/foundation-learn/v1/certificates/verify/{certificate_number}
GET /continue-learning: logged-in learner endpoint for the next incomplete lesson across enrolled courses.
POST /progress/{lesson_id}: logged-in enrolled learner endpoint to update progress or mark a lesson complete.
POST /quizzes/{quiz_id}/attempt: logged-in enrolled learner endpoint to submit a quiz attempt and receive score and pass/fail.
GET /certificates/verify/{certificate_number}: public, read-only endpoint for certificate verification. No learner login required.
★
Build against the documented public endpoints only. Internal and admin routes are reserved for the plugin UI and may change.
Theme integration points currently available for owning the learner experience.
★
Theme integration is intentionally conservative today. Use supported template-part overrides and public render functions instead of assuming every full route template can be replaced.
Learn with Foundation template tags load template parts from your theme first. Place supported part files in a foundation-learn folder in your active theme; otherwise the plugin uses its bundled template part.
Template parts loaded through Learn with Foundation's public template tags check your theme's foundation-learn/ directory before falling back to the plugin. Full app routes such as lesson, quiz, My Learning, profile, and certificate verification currently use plugin route templates unless you integrate through the documented hooks, filters, or render functions.
Selected Playwright journeys cover learner access, learning loops, certificate completion, course-builder concepts, full learner journeys, and license purchase activation when the matching local stack is configured.
Validate per project
The foundation-ecommerce theme, foundation-demo-core setup plugin, checkout flow, docs UI, and cross-version WooCommerce compatibility should be treated as project-specific validation surfaces until dedicated tests are added.
Payment gateway refund/cancellation behavior should be tested with the gateway and order statuses used in production.
Answers to the questions buyers, implementers, and support teams ask first.
Does Learn with Foundation replace WooCommerce?
No. WooCommerce handles selling; Learn with Foundation handles enrollment, access, learning, progress, and certificates.
Do I need to migrate my existing courses?
Usually no. Discover Courses connects Learn with Foundation to the post type that already stores your course content.
Can the academy live on a learning subdomain?
Yes. Configure FOUNDATION_LEARN_URL for a dedicated learning host such as learn.example.com.
What happens after guest checkout?
Auto-provisioning creates or matches the learner account, enrolls the user, sends activation, and routes them into onboarding.
Can courses be sequential?
Yes. Set the site default in Settings and override individual courses when needed.
Can lessons be video or text based?
Yes. Lesson delivery can be automatic, video, or text-first depending on the lesson.
Are certificates verifiable?
Yes. Completed courses issue certificates with a public verification page that confirms the learner name, course, issue date, and certificate identifiers without exposing the learner's email address.