For developers

The public interfaces POM LMS offers to themes and integrations: the access helpers, the completion helpers, the video helpers, the filters that let you extend courses and settings, and the template hooks.

In this chapter

Topic Article
Courses, lessons and where their data lives The content model
The rule every integration must follow The access control contract
Checking course access The course access helper
Checking lesson access The lesson access helper
Evaluating a permission rule The permission access helper
Checking a purchase The purchase access helper
Reading and writing progress Completion helpers
Rendering lesson videos Video helpers
Adding fields to courses and lessons Extending the course metabox
Adding settings sections Extending the settings
Working with the My courses endpoint My courses endpoint integration
Finding courses and lessons Queries and URL helpers
Rendering inside course and lesson pages Template integration
Handling student data responsibly Security and data handling

What is stable

The interfaces documented in this chapter: the pom_lms_* helper functions described here, the two filters, and the theme's post-single template actions.

Anything not documented here — internal classes, template file structure, script handles, the shape of stored values — can change between releases. If you need something that is not covered, ask before building on it.

Requirements

POM LMS requires POM Theme, and its access helpers require the theme's permission-rule support. Purchase-based access requires WooCommerce, and subscription conditions additionally require the WooCommerce subscriptions extension.

Guard your integrations accordingly:

if ( ! function_exists( 'pom_lms_user_can_access_course' ) ) {
    return;
}

A function_exists() check is the supported way to detect POM LMS. There is no version constant to branch on in your own code.

The one rule

If your integration renders course or lesson content anywhere — a shortcode, a widget, a REST response, an email — it must call the access helper first. See The access control contract.

Everything else in this chapter is convenience. That one is not.