Engineering a Tutor LMS add-on
Extension points first
We start with what Tutor LMS offers on purpose. Lifecycle actions such as tutor_after_enrolled, tutor_lesson_completed_after, tutor_quiz_finished and tutor_course_complete_after cover most event-driven features. Filters such as tutor_student_dashboard_nav and tutor_instructor_dashboard_nav extend dashboards. The native eCommerce engine accepts extra gateways through tutor_payment_gateways_with_class and tutor_gateways_with_class, which is exactly how the Tutor Stripe plugin registers itself. Templates can be overridden from a theme or loaded from your plugin.
Compatibility and versioning
Our add-ons check on load that Tutor LMS is active and on a supported version, and that Pro is present when a feature needs it. We avoid relying on internals that are not meant to be public, and when that is unavoidable we isolate it behind one function so a future change is a small fix.
Security and data
Every AJAX or REST endpoint checks a nonce or authentication and the user's capability. Input is sanitized, output escaped, and database queries prepared. Student data is only exposed to the people who should see it.
Performance
Heavy work runs on events or in the background, not on every page view. Expensive results are cached, and queries use indexes that exist. Learn more in our developer guides.