Hooks Reference
Developer GuideEvery action and filter Learnomy fires, grouped by the part of the plugin that fires it. Use it to find the hook for a job; the feature pages explain the common ones in context.
599 hooks: 374 filters and 225 actions. This page is generated from the code by bin/gen-hooks-reference.php; do not edit it by hand.
Arguments are shown as the call passes them, after the hook name. For a filter the first argument is the value you return. "Fired in" is the first place the hook is called; a number in brackets means it is called from that many places.
Adapters#
| Hook | Type | Arguments | What it is for | Fired in |
|---|---|---|---|---|
learnomy_checkout_purchase_types |
filter | array() |
The checkout purchase types that extensions register, keyed by type. | includes/adapters/class-purchase-types.php:61 |
learnomy_default_gateway_order |
filter | array( 'woocommerce', 'stripe', 'paypal', 'test' ) |
Preference order for surfaces that show one Pay button rather than a. | includes/adapters/class-adapter-registry.php:98 |
learnomy_membership_invoice_paid |
action | (int) $sub->id, $provider_sub_id |
Fires after a renewal invoice for a Stripe membership subscription has been recorded. | includes/adapters/class-stripe-adapter.php:1852 |
learnomy_natively_provisioned_purchase_types |
filter | array_merge( \Learnomy\Models\Transaction::course_sale_types(), array( 'membership', 'm... |
Filter the purchase types adapters provision themselves. | includes/adapters/class-adapter-registry.php:564 |
learnomy_payment_failed |
action | (string) ( $event->data->object->id ?? '' ), 'stripe', 'async_payment_failed' |
Fires when a Stripe Checkout session completes without payment being collected, so no. | includes/adapters/class-stripe-adapter.php:1131 (2) |
learnomy_paypal_manage_url |
filter | 'https://www.paypal.com/myaccount/autopay/', $sub |
The URL where a PayPal subscriber manages their subscription. | includes/adapters/class-pay-pal-adapter.php:206 |
learnomy_paypal_subscription_updated |
action | (int) $sub->id, $resource->status ?? '', $resource |
Fires when PayPal reports a subscription update that Free does not act on, such as a plan. | includes/adapters/class-pay-pal-adapter.php:1554 |
learnomy_purchase_billing_interval |
filter | $raw, $type, $item_id |
Schedule for a purchase type this adapter does not know natively. | includes/adapters/class-woo-commerce-adapter.php:2157 |
learnomy_register_payment_adapters |
action | Fires after the built-in gateways are registered. | includes/adapters/class-adapter-registry.php:526 |
|
learnomy_stripe_invoice_orphan |
action | $provider_sub_id, $invoice |
Fires when a paid Stripe invoice arrives for a subscription Learnomy has no record of. | includes/adapters/class-stripe-adapter.php:1751 (2) |
learnomy_stripe_subscription_updated |
action | $subscription, $membership |
Stripe customer.subscription.updated event. Fires for every. | includes/adapters/class-stripe-adapter.php:2185 |
learnomy_stripe_webhook_event |
action | (string) $event->type, $event |
Fires for every verified Stripe webhook event, after the core. | includes/adapters/class-stripe-adapter.php:1201 |
learnomy_subscription_ |
action | . $hook . '_raw', (string) $wc_sub->get_id(), $payload, 'woocommerce' |
Fires for a WooCommerce subscription lifecycle event. The dynamic portion of the hook name,. | includes/adapters/class-woo-commerce-adapter.php:1692 |
learnomy_subscription_cancelled_raw |
action | $provider_sub_id, $resource, 'paypal' |
Generic cancellation - see the note in handle_subscription_renewed(). | includes/adapters/class-pay-pal-adapter.php:1369 (2) |
learnomy_subscription_payment_failed_raw |
action | $provider_sub_id, $resource, 'paypal', $event_ts |
Generic payment failure - see the note in handle_subscription_renewed(). | includes/adapters/class-pay-pal-adapter.php:1399 (2) |
learnomy_subscription_renewed_raw |
action | $provider_sub_id, $sale, 'paypal' |
Generic subscription lifecycle event, fired for EVERY recurring. | includes/adapters/class-pay-pal-adapter.php:1450 (2) |
Admin#
| Hook | Type | Arguments | What it is for | Fired in |
|---|---|---|---|---|
learnomy_admin_commerce_menu_icon |
filter | 'dashicons-cart' |
The icon of the Commerce top-level admin menu. | includes/admin/class-admin.php:466 |
learnomy_admin_commerce_menu_items |
action | Fires after Learnomy's own Commerce submenus are registered, so extensions can add theirs. | includes/admin/class-admin.php:549 |
|
learnomy_admin_commerce_menu_label |
filter | __( 'LMS Commerce', 'learnomy' ) |
The label of the Commerce top-level admin menu. | includes/admin/class-admin.php:460 |
learnomy_admin_course_detail_actions |
action | (int) $course->id |
Pro extension point for per-course actions in the overview header. | includes/admin/views/course-detail.php:100 |
learnomy_admin_course_detail_panels |
action | (int) $course->id |
Fires at the bottom of the admin course detail screen, so extensions can add panels. | includes/admin/views/course-detail.php:594 |
learnomy_admin_dashboard_after_stats |
action | $stats |
Fires below the stat cards on the admin dashboard. Only fired for site owners, not. | includes/admin/views/dashboard.php:147 |
learnomy_admin_filter_options_cap |
filter | 200 |
includes/admin/class-admin.php:3276 (9) |
|
learnomy_admin_hidden_submenu_targets |
filter | $targets |
Allow Pro / third-party code to hide additional submenu pages. | includes/admin/class-admin.php:1502 |
learnomy_admin_init |
action | $this |
Fires at the end of the admin controller's init, after Learnomy's own admin hooks are. | includes/admin/class-admin.php:112 |
learnomy_admin_instructor_detail_actions |
action | (int) $instructor_id |
Pro extension point for per-instructor actions, rendered in the. | includes/admin/views/instructor-detail.php:115 |
learnomy_admin_menu_icon |
filter | \Learnomy\logo_menu_icon() |
The icon of the top-level Learnomy admin menu. | includes/admin/class-admin.php:129 |
learnomy_admin_menu_items |
action | Fires after Learnomy's own admin submenus are registered, so extensions can add theirs. | includes/admin/class-admin.php:381 |
|
learnomy_admin_menu_label |
filter | __( 'Learnomy', 'learnomy' ) |
The label of the top-level Learnomy admin menu. | includes/admin/class-admin.php:123 |
learnomy_admin_menu_section_map |
filter | $groups, $parent |
Filter the slug -> section-key map for a menu. $parent says which menu. | includes/admin/class-admin.php:1283 |
learnomy_admin_menu_sections |
filter | $group_order, $parent |
Filter the ordered section-key -> label list for a menu. Controls both. | includes/admin/class-admin.php:1292 |
learnomy_admin_pro_features_after_categories |
action | Fires after the feature categories on the Pro Features admin page. | includes/admin/views/pro-features.php:307 |
|
learnomy_admin_pro_features_before_categories |
action | Fires before the catalog grid on the Pro Features page. | includes/admin/views/pro-features.php:160 |
|
learnomy_admin_settings_menu_icon |
filter | 'dashicons-admin-settings' |
The icon of the Settings top-level admin menu. | includes/admin/class-admin.php:580 |
learnomy_admin_settings_menu_items |
action | Pro / third-party config pages can register under the Settings menu. | includes/admin/class-admin.php:715 |
|
learnomy_admin_settings_menu_label |
filter | __( 'Learnomy Settings', 'learnomy' ) |
The label of the Settings top-level admin menu. | includes/admin/class-admin.php:574 |
learnomy_admin_settings_nav |
action | Fires after the built-in navigation items of the Settings screen, so extensions can add nav. | includes/admin/views/settings.php:395 |
|
learnomy_admin_settings_nav_groups |
filter | $nav_groups |
Register a settings tab into one of the groups above. | includes/admin/views/settings.php:195 |
learnomy_admin_settings_sections |
action | Fires after the built-in Settings sections, so extensions can render additional sections. | includes/admin/views/settings.php:3215 |
|
learnomy_admin_status_labels |
filter | $labels |
Filter the admin status slug → translated label map. | includes/admin/class-ux.php:159 |
learnomy_admin_status_variants |
filter | $map |
Filter the admin status → badge-variant map. | includes/admin/class-ux.php:93 |
learnomy_admin_student_detail_actions |
action | (int) $user->ID |
Pro extension point for per-student actions (e.g. "Add to Space". | includes/admin/views/student-detail.php:76 |
learnomy_admin_subscription_detail_actions |
action | $sub_id |
Pro extension point for per-subscription actions in the header. | includes/admin/views/subscription-detail.php:73 |
learnomy_admin_subscription_detail_panels |
action | $sub_id, (int) ( $subscription->user_id ?? 0 ) |
Pro extension point for extra CONTENT panels below the payments table. | includes/admin/views/subscription-detail.php:334 |
learnomy_admin_transaction_detail_actions |
action | $txn_id |
Pro extension point for per-transaction actions in the header. | includes/admin/views/transaction-detail.php:76 |
learnomy_certificate_instructor_choice_limit |
filter | 500 |
The maximum number of instructors listed in the certificate rule's Specific instructors. | includes/admin/class-admin.php:5049 |
learnomy_commerce_card_descriptions |
filter | array( 'learnomy-memberships' => __( 'Plans, pricing, and access tiers.', 'learnomy' ),... |
The one-line descriptions shown on the Commerce overview cards. | includes/admin/views/commerce-overview.php:47 |
learnomy_commerce_card_icons |
filter | array( 'learnomy-memberships' => 'badge-check', 'learnomy-subscriptions' => 'repeat', '... |
The Lucide icon for each Commerce overview card. | includes/admin/views/commerce-overview.php:29 |
learnomy_course_editor_fields |
action | $course ?? null |
Renders extra course-editor fields in the sidebar so integrations. | includes/admin/views/course-form.php:626 |
learnomy_course_form_show_pricing |
filter | $kernel->is_enabled( 'payments' ) || $kernel->is_enabled( 'membership' ), $course ?? null |
Whether the course editor shows the pricing panel. | includes/admin/views/course-form.php:257 |
learnomy_demo_seed_pro |
action | $manifest['course_ids'] ?? array() |
Fires during demo seeding so Pro extensions can seed their own demo fixtures. | includes/admin/ajax/class-demo-seeder.php:222 |
learnomy_demo_seeder_cascade_cleanup |
action | $user_ids, $course_ids |
Fires after the core cascade sweep so add-ons can purge their own. | includes/admin/ajax/class-demo-seeder.php:638 |
learnomy_editorjs_tools |
filter | array() |
Open extension seam - it is the owner's site, so we never gate what an. | includes/admin/class-admin.php:6250 |
learnomy_email_merge_tags |
filter | $lrn_email_tags, (string) $type_key |
includes/admin/views/settings.php:2575 |
|
learnomy_force_commerce_menu |
filter | false |
Allow Pro / third-party code to force the Commerce menu visible. | includes/admin/class-admin.php:444 (2) |
learnomy_grading_row_actions |
filter | $lrn_grade_row_actions, $lrn_row |
includes/admin/views/quiz-grading.php:237 |
|
learnomy_integrations_cards |
action | includes/admin/views/settings.php:3201 |
||
learnomy_is_pro |
filter | defined( 'LEARNOMY_PRO_VERSION' ) |
Whether Learnomy Pro counts as active on the Earnings screen, which gates its Pro-only. | includes/admin/views/earnings.php:241 (4) |
learnomy_keep_admin_notice |
filter | $keep, $callback, $hook |
Keep a notice callback on Learnomy screens. | includes/admin/class-notice-scope.php:99 |
learnomy_learning_standards |
filter | array( 'xapi' => array( 'name' => __( 'xAPI', 'learnomy' ), 'icon' => 'activity', 'summ... |
The canonical learning-standards catalogue. Each entry is one standard the. | includes/admin/views/partials/integrations-hub.php:31 |
learnomy_lesson_content_editor |
action | $current_content_type, $is_edit && $lesson ? (int) $lesson->id : 0 |
Render seam for a Pro-registered content-type's editor panel. | includes/admin/views/lesson-editor.php:571 |
learnomy_lesson_editor_fields |
action | $is_edit && $lesson ? $lesson : null |
Renders extra lesson-editor fields (and sub-lesson, same editor) so. | includes/admin/views/lesson-editor.php:731 |
learnomy_lesson_editor_routes |
filter | array( 'course-editor' ) |
Front-end routes that host a client-rendered lesson editor. | includes/admin/class-lesson-attachments-panel.php:123 |
learnomy_lesson_has_release_schedule |
filter | false, (int) $lesson->id |
Does this lesson also carry a Pro release schedule?. | includes/admin/views/lesson-editor.php:817 |
learnomy_lesson_release_settings |
action | $is_edit && $lesson ? (int) $lesson->id : 0 |
Release / drip scheduling panel injection point. | includes/admin/views/lesson-editor.php:893 |
learnomy_membership_plan_after_form |
action | $lrn_plan_id ?? 0 |
Render extra panels below the membership-plan editor form (e.g. an. | includes/admin/views/membership-edit.php:530 |
learnomy_membership_plan_space_options |
filter | array() |
Space scope. Free owns this column and Pro decides what can go in it,. | includes/admin/views/membership-edit.php:450 |
learnomy_module_gate_enabled |
filter | $enabled, $gate_key |
Final say on whether a gated admin page's owner is active. | includes/admin/class-admin.php:864 |
learnomy_module_gate_label |
filter | $module_label, $module |
Plain-English name for the thing that gates the page. Free resolves. | includes/admin/class-admin.php:1026 |
learnomy_module_gated_admin_slugs |
filter | $map |
Admin pages that disappear when their gating module is switched off. | includes/admin/class-admin.php:842 |
learnomy_module_gated_page_labels |
filter | $slug_labels |
Plain-English names for gated pages, so the recovery notice says what. | includes/admin/class-admin.php:1015 |
learnomy_nav_menu_pages |
filter | $pages |
Filter the list of Learnomy pages exposed in the nav-menus metabox. | includes/admin/class-nav-menu-metabox.php:151 |
learnomy_notice_resurface_days |
filter | $days, $key |
Filter the re-surface window for one notice. | includes/admin/class-notice-dismissal.php:179 |
learnomy_onboarding_steps |
filter | $steps |
The steps of the onboarding checklist. | includes/admin/class-onboarding-state.php:178 |
learnomy_pro_course_builder_ai_slot |
action | (int) $course->id |
AI authoring slot - the Pro ai-authoring extension renders its. | includes/admin/views/course-builder.php:48 |
learnomy_pro_course_create_ai_slot |
action | Fires on the new-course admin screen, where Pro renders its AI course creation entry point. | includes/admin/views/course-form.php:103 |
|
learnomy_pro_docs_slugs |
filter | self::DOCS_SLUGS |
Filter the catalog-slug => docs-slug map, so a site (or a future. | includes/admin/class-pro-links.php:137 |
learnomy_pro_link_utm |
filter | $args, $url, $campaign, $content |
Filter the tracking parameters added to a Learnomy marketing link. | includes/admin/class-pro-links.php:97 |
learnomy_pro_quiz_editor_ai_slot |
action | (int) $quiz->id, (string) ( $quiz->title ?? '' ) |
AI authoring slot - the Pro ai-authoring extension renders its. | includes/admin/views/quiz-editor.php:222 |
learnomy_pro_tools_card_groups |
filter | array( 'teaching' => __( 'Teaching', 'learnomy' ), 'progress' => __( 'Skills & progress... |
Section headings for the hub, in render order. | includes/admin/views/pro-tools-hub.php:70 |
learnomy_pro_tools_cards |
filter | array() |
The cards on the Pro Tools hub. Used here to work out which extension pages belong under the. | includes/admin/class-admin.php:1642 (2) |
learnomy_quiz_editor_advanced_panel |
action | (int) $quiz->id |
Pro seam - advanced authoring for a saved quiz. | includes/admin/views/quiz-editor.php:907 |
learnomy_quiz_editor_fields |
action | $quiz ?? null |
Renders extra quiz-editor fields so an integration can add its own. | includes/admin/views/quiz-editor.php:918 |
learnomy_quiz_grading_response_controls |
action | $lrn_row['response'], $attempt, $lrn_row['question'] |
Fires after the manual grading controls of a response on the quiz grading detail screen. The. | includes/admin/views/quiz-grading-detail.php:234 (2) |
learnomy_sanitize_settings |
filter | $clean, $raw |
The sanitized Learnomy settings, filtered before they are saved. | includes/admin/class-admin.php:2510 |
learnomy_settings_pages_registry |
filter | $frontend_pages |
Allow Pro extensions to register additional public pages in the Pages. | includes/admin/views/settings.php:333 |
learnomy_settings_schema |
filter | $schema |
Filter the settings schema. | includes/admin/class-admin.php:2044 |
learnomy_unknown_instructor_label |
filter | get_bloginfo( 'name' ), $course |
The label shown in the admin courses list for a course whose instructor no longer exists. | includes/admin/views/courses.php:392 |
learnomy_warn_on_empty_publish |
filter | true, $course_id |
Filter whether to warn about publishing an empty course. | includes/admin/class-empty-curriculum-notice.php:69 |
learnomy_webhook_row_actions |
action | $hook |
Fires after the row actions of a webhook in the admin webhooks list, so extensions can echo. | includes/admin/views/webhooks.php:512 |
learnomy_webhook_row_actions_list |
filter | $row_actions, $hook |
Filter the row actions for a webhook list row. | includes/admin/views/webhooks.php:502 |
Api#
| Hook | Type | Arguments | What it is for | Fired in |
|---|---|---|---|---|
learnomy_account_fields_save |
action | $user_id, $request |
Persist custom account fields captured at REGISTRATION. Same action the. | includes/api/class-auth-controller.php:992 (3) |
learnomy_account_fields_validate |
filter | true, $request, 'instructor' === $role ? 'registration_instructor' : 'registration_stud... |
Reject a registration or account save before anything is written. | includes/api/class-auth-controller.php:898 (3) |
learnomy_admin_reset_course_progress |
action | $user_id, $course_id |
Fires after an admin resets a student's progress, quiz attempts and enrollment summary for a. | includes/api/class-admin-controller.php:1611 |
learnomy_api_controllers |
filter | $classes |
The REST controllers Learnomy registers, so an extension can add, replace or remove one. | includes/api/class-api.php:400 |
learnomy_app_config_branding |
filter | $defaults |
Filter the app branding block. The Pro white-label extension maps. | includes/api/class-app-config-controller.php:235 |
learnomy_app_config_features |
filter | $features |
Filter the app feature flags. Learnomy Pro injects one flag per. | includes/api/class-app-config-controller.php:302 |
learnomy_app_config_legal |
filter | $legal |
Filter the app legal block (per-site URLs, owner-configurable). | includes/api/class-app-config-controller.php:330 |
learnomy_app_enabled |
filter | false |
Filter whether the mobile app may connect to this site. | includes/api/class-app-config-controller.php:178 |
learnomy_app_min_version |
filter | '1.0.0' |
Filter the minimum app version this site supports. The app. | includes/api/class-app-config-controller.php:84 |
learnomy_before_student_self_delete |
action | $user_id, $user->user_email |
Fires immediately before the WordPress user row is removed during. | includes/api/class-auth-controller.php:1435 |
learnomy_broadcast_max_audience |
filter | 10000 |
Hard ceiling for a broadcast audience. Requests that resolve more. | includes/api/class-broadcasts-controller.php:529 (2) |
learnomy_broadcast_send_email |
filter | true, $audience, $actor_id |
Filter whether this broadcast may also go out by email. | includes/api/class-broadcasts-controller.php:449 |
learnomy_bulk_enroll_max |
filter | 500 |
The maximum number of email addresses one bulk enrollment request processes. Extra addresses. | includes/api/class-admin-controller.php:1839 |
learnomy_cancel_reasons |
filter | $default |
The reasons a member can pick when cancelling a subscription. | includes/api/class-membership-controller.php:902 |
learnomy_cancel_retention_offers |
filter | array(), $sub, $user_id |
The retention offers shown to a member before they cancel a subscription. | includes/api/class-membership-controller.php:855 |
learnomy_cancellable_subscription_statuses |
filter | array( 'active', 'past_due', 'trialing', 'paused' ), $sub |
The subscription statuses a member may cancel from. | includes/api/class-membership-controller.php:772 |
learnomy_checkout_extra |
filter | $lrn_extra, $lrn_purchase_type, $request |
Metadata to carry with an extension purchase. | includes/api/class-checkout-controller.php:985 |
learnomy_checkout_thank_you_url |
filter | $url, $gateway_id, $context |
Filters the buyer's post-purchase return URL. | includes/api/class-checkout-controller.php:1435 |
learnomy_course_rest_args |
filter | $args |
The argument schema of the course create and update REST routes. | includes/api/class-courses-controller.php:2573 |
learnomy_course_rest_fields |
filter | $data, $request |
The fields of a course in a REST response. | includes/api/class-courses-controller.php:2232 |
learnomy_course_reviews_per_page |
filter | 10, $course_id |
The number of reviews one page of a course's review list returns. Clamped to 1-50. | includes/api/class-reviews-controller.php:304 (2) |
learnomy_course_saved |
action | $course_id, $request |
Fires after a course is created or updated via REST, carrying the. | includes/api/class-courses-controller.php:708 (2) |
learnomy_course_settings_rest |
filter | $out, $raw |
The course settings accepted from a REST request. Lets extensions accept extra keys they. | includes/api/class-courses-controller.php:2391 |
learnomy_course_students_rest_items |
filter | $items, $course_id, get_current_user_id() |
Filter the REST course-students rows before the response. Lets an. | includes/api/class-enrollments-controller.php:747 |
learnomy_email_log_resent |
action | $id, $user_id, $sent, $reason |
Fires after an admin manually resends a logged notification email. | includes/api/class-email-log-controller.php:184 |
learnomy_guest_account_created |
action | $new_guest_account_id, \Learnomy\Models\Transaction::find( (int) $txn_id ) |
Fires after a guest checkout created a new user account and its transaction was recorded. | includes/api/class-checkout-controller.php:1292 (2) |
learnomy_incoming_purchase_sources |
filter | [] |
Inbound purchase sources, asked in order. The generic signed-JSON source. | includes/api/class-webhooks-controller.php:612 |
learnomy_incoming_webhook_payload |
filter | $result, $request |
The normalised incoming operation, before it is carried out. | includes/api/class-webhooks-controller.php:573 |
learnomy_lesson_attachments_reordered |
action | $lesson_id, $ids |
Fires after a lesson's attachments are reordered. | includes/api/class-lesson-attachments-controller.php:243 |
learnomy_lesson_comment_posted |
action | $comment_id, $lesson_id, $user_id |
Fires after a new lesson comment is posted and is live. Comments held for moderation fire. | includes/api/class-comments-controller.php:462 (2) |
learnomy_lesson_comment_replied |
action | $comment_id, $parent_id, $lesson_id, $user_id |
Fires after a reply to a lesson comment is posted and is live. | includes/api/class-comments-controller.php:565 (2) |
learnomy_lesson_created |
action | $lesson_id, $course_id, $data |
Fires after a lesson is created through the REST API. | includes/api/class-lessons-controller.php:1005 (2) |
learnomy_lesson_editor_panels |
filter | [], $lesson_id, $lesson |
Per-lesson panels for a client-rendered lesson editor. | includes/api/class-lessons-controller.php:1633 |
learnomy_lesson_numeric_ref_types |
filter | array( 'mediashield' ) |
The lesson content types whose video field stores a numeric reference ID rather than a URL. | includes/api/class-lessons-controller.php:1973 |
learnomy_lesson_resources |
action | $lesson_id, $items |
Fire once per list fetch so later surfaces (student Resources section,. | includes/api/class-lesson-attachments-controller.php:143 |
learnomy_lesson_saved |
action | $lesson_id, $request |
Documented in create_lesson_in_section(). | includes/api/class-lessons-controller.php:1007 (3) |
learnomy_lesson_updated |
action | (int) $lesson->id, $data |
Fires after a lesson is updated through the REST API. | includes/api/class-lessons-controller.php:1124 |
learnomy_lesson_video_progress |
action | $user_id, (int) $lesson->id, $watch_pct |
includes/api/class-lessons-controller.php:1698 |
|
learnomy_lessons_reassigned |
action | $updated_ids |
Fires after lessons are moved between sections. | includes/api/class-sections-controller.php:460 |
learnomy_lessons_reordered |
action | $section_id, $order |
Fires after the lessons of a section are reordered. | includes/api/class-lessons-controller.php:1227 |
learnomy_login_credential_error_codes |
filter | array( 'empty_username', 'empty_password', 'invalid_username', 'invalid_email', 'incorr... |
Error codes meaning "these credentials are wrong" and nothing more. | includes/api/class-auth-controller.php:531 |
learnomy_membership_plan_archived |
action | $plan_id |
Fires after a membership plan that still has dependants is set to inactive instead of being. | includes/api/class-membership-controller.php:1168 |
learnomy_membership_plan_deleted |
action | $plan_id |
Fires after a membership plan with no dependants is hard-deleted along with its course links. | includes/api/class-membership-controller.php:1184 |
learnomy_membership_plan_has_dependants |
filter | $has_subs, $plan_id |
Does anything else still depend on this plan?. | includes/api/class-membership-controller.php:1158 |
learnomy_membership_plan_saved |
action | $plan_id, true |
Fires after a membership plan is created. | includes/api/class-membership-controller.php:1089 (2) |
learnomy_membership_resume_paused |
filter | false, $subscription_id, $sub |
Resumes a paused subscription. Free cannot, so Pro handles it and returns the result. | includes/api/class-membership-controller.php:1030 (2) |
learnomy_module_route_map |
filter | [ // questionandquiz bare, so every hyphenated child is covered // by the rule ra... |
Route pattern => module slug, for the modules a site owner can switch. | includes/api/class-api.php:174 |
learnomy_module_toggled |
action | $slug, $enabled |
Fires after an admin enables or disables a Learnomy module. | includes/api/class-admin-controller.php:2268 |
learnomy_my_courses_per_page |
filter | 40 |
The number of courses one page of the My Courses list returns. Clamped to 1-100 afterwards. | includes/api/class-enrollments-controller.php:236 (2) |
learnomy_pro_can_broadcast_to_space |
filter | user_can( $user_id, 'manage_options' ), $space_id, $user_id |
Whether a user may send a broadcast to a space audience. Free has no Spaces model, so Pro. | includes/api/class-broadcasts-controller.php:340 |
learnomy_pro_quiz_filter_marks |
filter | $marks_by_qid, $questions, (int) $quiz->id |
Filter what each question on THIS paper is worth: question id => marks. | includes/api/class-quizzes-controller.php:1368 |
learnomy_pro_quiz_filter_questions |
filter | $questions, (int) $quiz->id, [] |
Filter the question objects a quiz attempt presents. Receives the. | includes/api/class-quizzes-controller.php:1334 |
learnomy_pro_space_member_user_ids |
filter | array(), $space_id |
The user IDs of a space's members, resolved by Pro when a broadcast targets a space. | includes/api/class-broadcasts-controller.php:587 |
learnomy_pro_space_title |
filter | __( 'Learning Space', 'learnomy' ), $space_id |
The display title of a space audience, shown for a broadcast sent to a space. | includes/api/class-broadcasts-controller.php:594 |
learnomy_quiz_attempts_granted |
action | $user_id, $quiz_id, $granted, $attempts |
Fires after an admin changes a student's extra-attempt balance on a quiz. | includes/api/class-admin-controller.php:1674 |
learnomy_quiz_created |
action | $quiz_id, $data |
Fires after a quiz is created through the REST API. | includes/api/class-quizzes-controller.php:1013 |
learnomy_quiz_player_context |
filter | $player_context, (int) $quiz->id, (int) $attempt->id |
Filter the quiz player context payload sent to the client on quiz start. | includes/api/class-quizzes-controller.php:1699 |
learnomy_quiz_saved |
action | $quiz_id, $request |
Fires after a quiz is created or updated via REST, carrying the request,. | includes/api/class-quizzes-controller.php:1022 (2) |
learnomy_quiz_slots_reordered |
action | $quiz_id, $clean_order |
Fires after the question slots of a quiz are reordered. | includes/api/class-quizzes-controller.php:736 |
learnomy_quiz_submit_grace_seconds |
filter | 60, $attempt |
The grace period, in seconds, after a timed attempt's deadline before a submission is. | includes/api/class-quizzes-controller.php:1889 |
learnomy_quiz_timer_resume_policy |
filter | 'wall_clock', $quiz, $attempt |
How a timed quiz attempt's clock behaves when the student resumes it. | includes/api/class-quizzes-controller.php:1592 |
learnomy_quiz_updated |
action | (int) $quiz->id, $data |
Fires after a quiz is updated through the REST API. | includes/api/class-quizzes-controller.php:1077 |
learnomy_registration_challenge_verify |
filter | true, $request |
This filter is documented in includes/api/class-auth-controller.php. | includes/api/class-checkout-controller.php:250 (2) |
learnomy_report_resolved |
action | $report_id, $status, get_current_user_id() |
Fires after a moderator resolves a report. | includes/api/class-reports-controller.php:246 |
learnomy_report_submitted |
action | $report_id, $object_type, $object_id, $user_id, $reason |
Fires after a member files a moderation report. | includes/api/class-reports-controller.php:206 |
learnomy_rest_lesson_payload |
filter | $filtered, $lesson, $request |
Filter the single-lesson REST payload. | includes/api/class-lessons-controller.php:940 |
learnomy_section_created |
action | $section_id, $course_id |
Fires after a course section is created through the REST API. | includes/api/class-sections-controller.php:317 |
learnomy_section_items_reordered |
action | $section_id, $items |
Fires after the mixed lessons and quizzes inside a section are reordered. | includes/api/class-sections-controller.php:491 |
learnomy_section_updated |
action | (int) $section->id, $data |
Fires after a course section is updated through the REST API. | includes/api/class-sections-controller.php:378 |
learnomy_sections_reordered |
action | $course_id, $order |
Fires after a course's sections are reordered. | includes/api/class-sections-controller.php:530 |
learnomy_student_account_deleted |
action | $user->user_email |
Fires after the student user row is successfully removed. | includes/api/class-auth-controller.php:1459 |
learnomy_subscription_extended |
action | $sub_id, (int) $sub->user_id, (int) $sub->plan_id |
Fires after an admin extends a subscription's period. | includes/api/class-membership-controller.php:1524 |
learnomy_user_blocked |
action | $me, $target |
Fires after one member blocks another. | includes/api/class-blocks-controller.php:149 |
learnomy_user_registered |
action | $user_id, $role |
Fires after a new user registers through the Learnomy frontend. | includes/api/class-auth-controller.php:978 |
learnomy_user_unblocked |
action | $me, $target |
Fires after one member unblocks another. | includes/api/class-blocks-controller.php:169 |
learnomy_validate_plan_space_id |
filter | is_numeric( $v ) && (int) $v >= 0, $v |
Whether a space ID is acceptable on a membership plan. Pro tightens this to require that the. | includes/api/class-membership-controller.php:564 |
learnomy_withdrawal_approved |
action | (int) $withdrawal->instructor_id, $withdrawal |
Fires after an admin approves an instructor withdrawal and it is marked processed. | includes/api/class-admin-controller.php:971 |
learnomy_withdrawal_rejected |
action | $withdrawal_id, (int) $withdrawal->instructor_id, $reason |
Fires after an admin rejects a withdrawal and its commissions are returned to pending. | includes/api/class-admin-controller.php:1012 |
Auth#
| Hook | Type | Arguments | What it is for | Fired in |
|---|---|---|---|---|
learnomy_app_connect_bridge |
filter | $info |
Filter the resolved app-connect bridge for this site. | includes/auth/class-app-connect.php:155 |
learnomy_app_connect_schemes |
filter | array( App_Authorize_Access::app_scheme() ) |
Filter the custom URL schemes the Learnomy app-connect flow may. | includes/auth/class-app-connect.php:113 |
learnomy_app_credential_issued |
action | $user->ID, $app_id, $app_name |
Fires after a member exchanges their password for an app credential. | includes/auth/class-app-credentials.php:193 |
learnomy_app_password_login_enabled |
filter | $on |
Filter whether members may exchange a WordPress password for an. | includes/auth/class-app-credentials.php:89 |
learnomy_app_scheme |
filter | self::DEFAULT_APP_SCHEME |
Filter the mobile app's deep-link scheme. | includes/auth/class-app-authorize-access.php:109 |
learnomy_email_verified_redirect |
filter | \Learnomy\route_url( 'student-dashboard' ), $user_id |
Where a user is sent after their email address is verified and they are signed in. | includes/auth/class-email-verification.php:257 |
learnomy_generic_login_errors |
filter | true |
Whether to answer every failed sign-in identically. | includes/auth/class-login-flow.php:252 |
learnomy_login_redirect |
filter | $destination, $user, $redirect_to |
Filter where a member lands after signing in. | includes/auth/class-login-flow.php:158 |
Blocks#
| Hook | Type | Arguments | What it is for | Fired in |
|---|---|---|---|---|
learnomy_my_progress_max |
filter | 20 |
The maximum number of in-progress courses the My Progress block lists. 0 lists them all. | blocks/my-progress/render.php:66 |
Cli#
| Hook | Type | Arguments | What it is for | Fired in |
|---|---|---|---|---|
learnomy_cli_commands |
action | Fires after built-in CLI commands are registered. | includes/cli/class-cli.php:93 |
|
learnomy_repair_data_integrity_tasks |
filter | array(), $dry_run |
Filters the extension-contributed data-integrity tasks. | includes/cli/class-repair.php:458 |
Content#
| Hook | Type | Arguments | What it is for | Fired in |
|---|---|---|---|---|
learnomy_content_allowed_html |
filter | $allowed, $context |
Filter the content allow-list (save gate + render floor). | includes/content/class-content-html.php:544 |
learnomy_content_migratable_fields |
filter | $fields |
Filter the content fields a migration converts. | includes/content/class-content-migrator.php:132 |
learnomy_content_premigration_backup_written |
action | $file, $rows |
Fires after the pre-migration content backup is written, before content is converted to. | includes/content/class-content-migrator.php:294 |
learnomy_content_snapshot_fields |
filter | $fields |
Filter the content fields that get snapshotted before a migration. | includes/content/class-content-migrator.php:69 |
learnomy_embed_blocked_hosts |
filter | array(), $url |
Filter the embed host deny-list (lowercase hosts). | includes/content/class-embed.php:354 |
learnomy_embed_fediverse_enabled |
filter | $enabled, $url |
Filter whether guarded Fediverse/oEmbed discovery runs. | includes/content/class-embed.php:332 |
learnomy_embed_html |
filter | $html, $url, $opts |
Filter the final embed HTML (after wrap + caption). | includes/content/class-embed.php:81 |
learnomy_embed_oembed_args |
filter | array( 'maxwidth' => 1280, 'discover' => false, ), $url |
Filter the args passed to wp_oembed_get for the FIRST pass (core providers). | includes/content/class-embed.php:188 |
learnomy_embed_platform_adapters |
filter | array( array( __CLASS__, 'peertube_adapter' ) ) |
Filter the federated-platform embed adapters. Each is. | includes/content/class-embed.php:271 |
learnomy_store_content_as_html |
filter | true |
Whether new lesson content is stored as HTML rather than Editor.js JSON. False opts the site. | includes/content/class-content-html.php:600 |
Core#
| Hook | Type | Arguments | What it is for | Fired in |
|---|---|---|---|---|
learnomy_account_nav_items |
filter | $items, $current |
Filter the account navigation items. Pro adds its account surfaces here. | includes/functions.php:3963 |
learnomy_account_nav_section_map |
filter | $section_by_key |
Filter the account-nav item -> section map, so a developer can move an. | includes/functions.php:4006 |
learnomy_account_routes |
filter | array( 'student-dashboard', 'account-courses', 'account-quiz-results', 'account-billing... |
The routes that make up the My Account area and share its vertical nav. | includes/functions.php:3764 |
learnomy_app_user_agent_token |
filter | 'LearnomyApp' |
Token the native app appends to its WebView User-Agent. White-label apps. | includes/functions.php:2246 |
learnomy_asset_filemtime |
filter | $on |
Whether Learnomy asset URLs use the file's modified time as their version, so a changed file. | includes/functions.php:5248 |
learnomy_become_instructor_slug |
filter | 'become-instructor' |
The URL slug of the instructor application page. | includes/functions.php:537 |
learnomy_billing_slug |
filter | account_slug() . '/billing' |
The URL path of the account billing page. | includes/functions.php:507 (2) |
learnomy_block_allowed_html |
filter | $allowed, $name |
Filter the allowed-HTML set used to sanitise Learnomy block output. | includes/class-blocks.php:474 |
learnomy_block_category_label |
filter | __( 'Learnomy', 'learnomy' ) |
Label for the Learnomy block-inserter category. | includes/class-blocks.php:563 |
learnomy_block_output |
filter | $html, $attributes, $name |
The rendered markup of a Learnomy block, filtered before it is sanitised and echoed. | includes/class-blocks.php:513 |
learnomy_breadcrumb_root |
filter | $item |
Filter the shared breadcrumb root. 10k sites, more than one mind: a. | includes/functions.php:2131 |
learnomy_cancelled_slug |
filter | enroll_slug() . '/cancelled' |
The URL path of the checkout cancelled page. | includes/functions.php:525 |
learnomy_certificate_expired |
action | (int) $row->id, (int) $row->user_id, (int) $row->course_id |
Fires after the daily sweep marks a certificate as expired. | includes/class-cron.php:993 |
learnomy_checkout_default_country |
filter | 'US' |
The billing country the checkout Address Element starts with. | includes/class-template-loader.php:3366 |
learnomy_container_width |
filter | $container_width, $route |
Filters the content container width for one Learnomy page. | includes/class-template-loader.php:243 |
learnomy_content_can_access |
filter | $user_id > 0, $user_id |
Filter whether a viewer may read course content while the academy is private. | includes/functions.php:746 |
learnomy_content_route_names |
filter | array( 'catalog', 'category', 'course', 'lesson', 'quiz', 'standalone-quiz', 'instructo... |
The course content routes gated by the require-login setting. | includes/functions.php:829 |
learnomy_countries |
filter | $wc |
This filter is documented below. | includes/functions.php:5428 (2) |
learnomy_course_approved |
action | $course_id |
Fires after a course is approved and published through the approve-course ability. | includes/class-abilities.php:2639 |
learnomy_course_rejected |
action | $course_id, $reason |
Fires after a course is rejected through the reject-course ability and set back to draft. | includes/class-abilities.php:2677 |
learnomy_course_taxonomies |
filter | $default |
The tag taxonomies offered for courses. | includes/functions.php:5033 |
learnomy_cron_jobs |
filter | $events |
The recurring cron events Learnomy schedules, so extensions can register theirs. | includes/class-cron.php:181 |
learnomy_currency_names |
filter | array( 'AED' => __( 'United Arab Emirates dirham', 'learnomy' ), 'AFN' => __( 'Afghan a... |
Filter the human names shown in a currency picker. | includes/functions.php:2925 |
learnomy_currency_options |
filter | $options, $args |
Filter the options shown in a currency picker. | includes/functions.php:2907 |
learnomy_currency_symbol_position |
filter | $position, $currency, $locale |
Filter the currency symbol position. | includes/functions.php:3395 |
learnomy_currency_symbols |
filter | array( 'AED' => 'د.إ', 'AFN' => '؋', 'ALL' => 'L', 'AMD' => 'AMD', 'ANG' => 'ƒ', 'A... |
Map of ISO 4217 currency code to display symbol. | includes/functions.php:3121 |
learnomy_display_timezone |
filter | wp_timezone(), $user_id > 0 ? $user_id : get_current_user_id() |
The timezone times are shown in. Return a member's own timezone to show. | includes/functions.php:4271 |
learnomy_distraction_free_route |
filter | $distraction_free, $route |
Whether a route renders without the theme header and footer. | includes/class-template-loader.php:549 |
learnomy_docs_url |
filter | 'https://learnomy.app/docs/' |
Filter the documentation base URL. | includes/functions.php:5307 |
learnomy_edd_item_id |
filter | 1662698 |
The EDD product id used to register the plugin for license updates. | learnomy.php:107 |
learnomy_email_log_retention_days |
filter | $retention_days |
Filter the email-log retention window in days. | includes/class-cron.php:962 |
learnomy_enable_pwa |
filter | false |
Whether the Learnomy PWA (service worker, offline banner and manifest) is enabled. This call. | includes/functions.php:897 (3) |
learnomy_enrollment_expired |
action | (int) $row->id, (int) $row->user_id, (int) $row->course_id, $access->access_remains( (i... |
Fires after the expiry sweep ends an enrollment's term. Kept for. | includes/class-cron.php:483 |
learnomy_entity_labels |
filter | $defaults |
Filters the set of renamable nouns. | includes/functions.php:1518 |
learnomy_erase_app_data |
action | $user_id |
Fires during a member data-erase so Pro extensions can wipe their own. | includes/class-privacy.php:628 |
learnomy_erase_authored_course |
action | $course_id, $user_id |
Fires before an erased author's course is removed. | includes/class-privacy.php:452 |
learnomy_extension_enabled |
filter | false, $slug |
Filter whether a Pro extension is enabled on this site. | includes/functions.php:596 |
learnomy_for_sale_models |
filter | array( Models\MembershipPlan::class ) |
The model classes whose rows are for sale. Each has. | includes/class-learnomy.php:1557 |
learnomy_hide_admin_bar_for_students |
filter | true |
Filter whether the WP admin bar is hidden for pure students. | includes/class-learnomy.php:142 |
learnomy_init |
action | $this |
Fires after Learnomy has fully initialized all dependencies. | includes/class-learnomy.php:845 |
learnomy_instructor_application_approved |
action | $application_id, (int) ( $application->user_id ?? 0 ) |
Fires when an instructor application is approved. | includes/class-abilities.php:2566 (2) |
learnomy_instructor_application_rejected |
action | $application_id, (int) ( $application->user_id ?? 0 ), $reason |
Fires when an instructor application is rejected. Same action and. | includes/class-abilities.php:2603 (2) |
learnomy_instructor_application_submitted |
action | (int) $application_id, $user_id |
Fires when a student submits an instructor application. Notifier. | includes/class-router.php:896 (3) |
learnomy_instructor_approved |
action | $application_id |
Legacy alias, kept firing. | includes/class-abilities.php:2578 |
learnomy_instructor_course_edit_url |
filter | $backend, $course_id |
The frontend URL of the course editor shown in the instructor's in-content bar. Returning. | includes/class-admin-bar.php:114 (4) |
learnomy_instructor_lesson_edit_url |
filter | $backend, $course_id, $lesson_id |
The frontend URL of the lesson editor shown in the instructor's in-content bar. Returning. | includes/class-admin-bar.php:135 |
learnomy_instructor_nav_items |
filter | $items, $current |
includes/functions.php:4106 |
|
learnomy_instructor_profile_url |
filter | $url, $instructor |
Filter the instructor profile URL used across course and lesson surfaces. | includes/functions.php:2066 |
learnomy_instructor_quiz_edit_url |
filter | $backend, $quiz_id, $course_id |
The frontend URL of the quiz editor shown in the instructor's in-content bar. Returning the. | includes/class-admin-bar.php:158 |
learnomy_instructor_registration_enabled |
filter | ! solo_mode() |
Whether visitors may apply to become instructors. | includes/functions.php:610 |
learnomy_instructor_rejected |
action | $application_id, $reason |
Legacy alias, kept firing. | includes/class-abilities.php:2613 |
learnomy_instructor_routes |
filter | // 'instructor-reports' is NOT here, and its absence is the point. That // route is reg... |
The instructor routes that use the shared teaching layout and its stylesheets. | includes/functions.php:3797 |
learnomy_instructor_shell_routes |
filter | array( 'instructor-dashboard', 'instructor-reports', 'instructor-courses', 'instructor-... |
The instructor routes that render through the shared teaching shell and so load the. | includes/class-template-loader.php:1583 |
learnomy_is_editor_preview |
filter | defined( 'REST_REQUEST' ) && REST_REQUEST && current_user_can( 'edit_posts' ) |
Filters whether a block is being drawn as an editor preview. | includes/functions.php:3631 |
learnomy_layouts |
filter | $surfaces |
Filters the layout registry. Pro / third-party code adds variants to a. | includes/functions.php:1230 |
learnomy_lesson_html_allowed_html |
filter | $allowed, $raw |
Filter the allowed-HTML set used to sanitise raw lesson bodies (legacy. | includes/functions.php:4583 |
learnomy_lesson_require_watch_percent |
filter | 0, $lesson, $course |
The video watch percentage a lesson requires before it can be marked complete, as enforced. | includes/class-template-loader.php:3651 (4) |
learnomy_lesson_taxonomies |
filter | $default |
The tag taxonomies offered for lessons. | includes/functions.php:5068 |
learnomy_live_session_duration |
filter | 60, $lesson |
Filter the default length of a live session, in minutes. | includes/functions.php:2498 |
learnomy_member_payment_provider_label |
filter | $label, $slug |
Filter the buyer-facing name of a payment provider. | includes/functions.php:3573 |
learnomy_membership_faq_items |
filter | $faq |
Filter the membership FAQ rows. Each row: { q, a }. | includes/functions.php:4216 |
learnomy_membership_on_offer |
filter | module_enabled( 'membership' ) |
Filter whether membership sign-up CTAs may render. | includes/functions.php:2292 |
learnomy_money_display_params |
filter | $params, (string) $resolved |
Filter how money is SHOWN, never what is charged. | includes/functions.php:3450 |
learnomy_multi_instructor_enabled |
filter | $on |
Whether co-instructors and revenue sharing are offered. | includes/functions.php:686 |
learnomy_notice_help_ids |
filter | $ids |
Filter the notice ids documented on troubleshooting/admin-notices. | includes/functions.php:5365 |
learnomy_offline_slug |
filter | 'learnomy-offline' |
The URL slug of the offline page served by the PWA shell. | includes/functions.php:870 |
learnomy_payout_method_aliases |
filter | array( 'bank' => 'bank_transfer', 'banktransfer' => 'bank_transfer', 'bank-transfer' =>... |
The alternate spellings of payout methods that are normalised to a canonical method. | includes/functions.php:1768 |
learnomy_payout_methods |
filter | $methods |
Filter the payout rails. | includes/functions.php:1750 |
learnomy_privacy_authored_batch |
filter | self::AUTHORED_BATCH |
The number of rows processed per batch when erasing a user's authored content. | includes/class-privacy.php:415 |
learnomy_privacy_authored_content_erasure |
filter | 'delete' |
What happens to content the data subject authored. | includes/class-privacy.php:577 |
learnomy_privacy_authored_time_budget |
filter | self::AUTHORED_TIME_BUDGET |
Seconds one authored-content pass may run before stopping and. | includes/class-privacy.php:425 |
learnomy_privacy_certificate_erasure |
filter | 'delete' |
How a certificate is erased for a GDPR request. | includes/class-privacy.php:2069 |
learnomy_privacy_content_reassign_to |
filter | $default |
User ID that authored content is reassigned to during a GDPR erase. | includes/class-privacy.php:386 |
learnomy_pro_active |
filter | defined( 'LEARNOMY_PRO_VERSION' ) |
Whether Learnomy Pro counts as active. A test can force this to fake Pro. | includes/functions.php:1895 (2) |
learnomy_protected_routes |
filter | $protected_routes |
includes/class-template-loader.php:310 |
|
learnomy_provider_cancel_sweep_limit |
filter | 25 |
The number of provider-side subscription cancellations reconciled in one hourly run. | includes/class-cron.php:1025 |
learnomy_purchase_descriptor |
filter | $descriptor, $type, $item_id |
Describe a purchase type for display on a gateway's order record. | includes/functions.php:5763 |
learnomy_purge_page_cache |
action | $url |
Fires when a Learnomy URL's cached copy is stale. Hook a CDN or any page. | includes/functions.php:5859 |
learnomy_pwa_app_name |
filter | get_bloginfo( 'name' ) |
The app name in the PWA web manifest. | includes/class-router.php:947 |
learnomy_pwa_app_short_name |
filter | 'Learnomy' |
The app name in the PWA web manifest. | includes/class-router.php:953 |
learnomy_pwa_icon |
filter | $icon |
The app name in the PWA web manifest. | includes/class-router.php:974 |
learnomy_pwa_manifest |
filter | $manifest |
Filter the whole PWA manifest before it is served. | includes/class-router.php:987 |
learnomy_pwa_theme_color |
filter | '#2383e2' |
The app name in the PWA web manifest. | includes/class-router.php:964 |
learnomy_query_vars |
filter | $vars |
The public query variables Learnomy registers with WordPress. | includes/class-router.php:369 |
learnomy_question_taxonomies |
filter | $default |
The tag taxonomies offered for quiz questions. | includes/functions.php:5099 |
learnomy_question_types |
filter | $types |
Filters the registered question types. | includes/class-question-types.php:67 |
learnomy_quiz_display_templates |
filter | $templates |
Filter the quiz display templates. | includes/functions.php:1948 |
learnomy_quiz_start_style |
filter | $style |
Filter the quiz start-screen layout. | includes/functions.php:1994 |
learnomy_quiz_taxonomies |
filter | $default |
The tag taxonomies offered for quizzes. | includes/functions.php:5126 |
learnomy_reengagement_enabled |
filter | true |
Whether the inactivity re-engagement email runs at all. | includes/class-cron.php:569 |
learnomy_reengagement_max_per_run |
filter | 500 |
The maximum number of re-engagement emails queued in one run. | includes/class-cron.php:586 |
learnomy_register_abilities |
action | Fires inside wp_abilities_api_init after Learnomy's own abilities are registered, so. | includes/class-abilities.php:135 |
|
learnomy_register_instructor_slug |
filter | 'register/instructor' |
The URL slug of the instructor registration page. | includes/functions.php:858 |
learnomy_register_student_slug |
filter | 'register/student' |
The URL slug of the student registration page. | includes/functions.php:846 |
learnomy_registered_tag_types |
filter | $types |
Extend the allow-list for vocabularies not surfaced by the three core. | includes/functions.php:5152 |
learnomy_reminder_cadences |
filter | array( '7d', '3d', '1d' ) |
The cadences at which expiry reminders are sent before an enrollment's access ends. | includes/class-cron.php:641 (2) |
learnomy_require_login_for_content |
filter | $on |
Whether course content routes redirect logged-out visitors to the login page. | includes/functions.php:717 |
learnomy_reserved_slugs |
filter | array( // WP pagination segment. 'page', // /instructor/ children (Pro frontend builder... |
The URL segments reserved by Learnomy, which a course or other slug may not use. | includes/functions.php:410 |
learnomy_route_access_gates |
filter | array( 'instructor-courses' => 'partials/instructor-access-gate.php', 'instructor-stude... |
Filter the routes that render an access gate instead of a 404. | includes/class-template-loader.php:706 |
learnomy_route_capabilities |
filter | self::$capability_routes |
Capability gate. Being logged in is not the same as being allowed:. | includes/class-template-loader.php:353 |
learnomy_route_enabled |
filter | true, $route |
Per-route enable gate. A route whose feature/module is turned off. | includes/class-template-loader.php:398 |
learnomy_route_http_status |
filter | (int) ( $view_data['http_status'] ?? 200 ), $route, $data, $view_data |
The HTTP status a route renders with, such as 403 or 410. Decided before headers are sent. | includes/class-template-loader.php:607 |
learnomy_route_no_cache_for_user |
filter | true, $route |
Whether a logged-in user's Learnomy page is sent with private, no-cache headers so a page. | includes/class-template-loader.php:419 |
learnomy_route_not_found |
filter | ! empty( $view_data['not_found'] ), $route, $data, $view_data |
Whether the request is a 404. Lets a route without its own view-data resolver declare that. | includes/class-template-loader.php:584 |
learnomy_route_slug |
filter | $value, $option_key |
Uniform slug filter - THE single seam the route registry promised, so a. | includes/functions.php:374 |
learnomy_route_title |
filter | '', $route, $data |
Filter the |
includes/class-template-loader.php:3927 |
learnomy_routes |
filter | $defs |
Filter the route table. Pro + third-party code add/modify routes here. | includes/class-routes.php:338 |
learnomy_send_access_expiring_reminders |
filter | true |
includes/class-cron.php:510 (2) |
|
learnomy_send_renewal_reminders |
filter | true |
includes/class-cron.php:511 (2) |
|
learnomy_solo_mode |
filter | $on |
Whether the site runs in solo mode: one instructor, no commissions, no co-instructors and no. | includes/functions.php:560 |
learnomy_standalone_dark_mode |
filter | false |
Filter whether Learnomy shows its own dark-mode toggle and applies its own. | includes/functions.php:2614 |
learnomy_student_registration_enabled |
filter | $on |
Whether visitors may register as students. | includes/functions.php:638 |
learnomy_student_registration_url |
filter | wp_login_url( $redirect ), $redirect |
Replacement destination for signup CTAs when student registration is. | includes/functions.php:669 |
learnomy_subscription_auto_expired |
action | (int) $row->id, (int) $row->user_id, (int) $row->plan_id |
Fires when the sweep expires a subscription whose period ended more than the grace period. | includes/class-cron.php:1122 |
learnomy_subscription_grace_days |
filter | $days |
Filter the past-due grace window (days). | includes/functions.php:2367 |
learnomy_subscription_trial_ending |
action | (int) $row->id, (int) $row->user_id, (int) $row->plan_id, (string) $row->trial_ends_at |
Fires once for each trialing subscription whose trial ends within the next 72 hours. | includes/class-cron.php:1160 |
learnomy_suppress_webhooks |
filter | false, $event, $payload |
Short-circuit outbound webhook delivery. | includes/functions.php:1637 |
learnomy_template_map |
filter | self::$default_template_map |
The template file used for each route. | includes/class-template-loader.php:926 |
learnomy_text_response_types |
filter | [ 'essay', 'short_answer', 'fill_blank' ] |
Filters the types whose response is free text rather than option ids. | includes/class-question-types.php:125 |
learnomy_thank_you_slug |
filter | enroll_slug() . '/thank-you' |
The URL path of the checkout thank-you page. | includes/functions.php:516 |
learnomy_three_decimal_currencies |
filter | array( 'BHD', 'IQD', 'JOD', 'KWD', 'LYD', 'OMR', 'TND' ) |
Currencies whose smallest unit is a THOUSANDTH, not a hundredth. | includes/functions.php:2788 |
learnomy_trusted_proxies |
filter | array() |
Addresses or CIDR ranges of reverse proxies / CDNs in front of this site,. | includes/functions.php:143 |
learnomy_user_reference_tables |
filter | $refs |
Filter the user-reference map. | includes/functions.php:1874 |
learnomy_view_data_resolvers |
filter | self::$view_data_resolvers |
The classes that resolve view data for each route. | includes/class-template-loader.php:905 |
learnomy_virtual_query_corrected |
action | $query, (string) $route |
Fires once the main query has been told it is on a Learnomy route. | includes/class-router.php:151 |
learnomy_wishlist_url |
filter | add_query_arg( 'tab', 'wishlist', route_url( 'account-courses' ) ) |
The Wishlist address. Filter it to send members somewhere else. | includes/functions.php:2705 |
learnomy_zero_decimal_currencies |
filter | array( 'BIF', 'CLP', 'DJF', 'GNF', 'JPY', 'KMF', 'KRW', 'MGA', 'PYG', 'RWF', 'UGX', 'VN... |
The currency codes that have no minor unit, so their amounts are not multiplied by 100. | includes/functions.php:2802 |
Cron#
| Hook | Type | Arguments | What it is for | Fired in |
|---|---|---|---|---|
learnomy_lesson_unlock_is_valid |
filter | $valid, $user_id, $lesson_id, $course_id |
Filter whether a relative-drip unlock row is still valid to fire. | includes/cron/class-drip-cron.php:245 |
learnomy_lesson_unlocked |
action | $lesson_id, $user_id, $course_id |
Fires once when a previously-locked lesson becomes available. | includes/cron/class-drip-cron.php:151 (2) |
Db#
| Hook | Type | Arguments | What it is for | Fired in |
|---|---|---|---|---|
learnomy_relation_models |
filter | array() |
Filters the model classes asked to declare their relations. | includes/db/class-relations.php:204 |
learnomy_relation_parents |
filter | $parents |
Filters the entity => parent table map. | includes/db/class-relations.php:142 |
learnomy_relations_cascaded |
action | $entity, $id, $removed, $cleared |
Fires after an entity's declared relations have been cleaned. | includes/db/class-relations.php:309 |
learnomy_schema_strip_fulltext |
filter | $is_temp |
Force the FULLTEXT strip on or off. | includes/db/class-schema.php:58 |
Integrations#
| Hook | Type | Arguments | What it is for | Fired in |
|---|---|---|---|---|
learnomy_companion_package_hosts |
filter | array( $store_host ) |
Hosts allowed to serve a companion plugin zip. | includes/integrations/class-companion-installer.php:245 |
learnomy_companions |
filter | array( 'mediashield' => array( 'label' => __( 'MediaShield', 'learnomy' ), 'why' => __(... |
Filter the Academy Stack companion catalog. Pro + third-party plugins. | includes/integrations/class-companion-registry.php:46 |
learnomy_theme_token_maps |
filter | $maps |
Filter the theme token maps. Themes/add-ons register a mapping here so. | includes/integrations/class-theme-bridge.php:155 |
Migration#
| Hook | Type | Arguments | What it is for | Fired in |
|---|---|---|---|---|
learnomy_migration_not_migrated |
filter | $items, $source_slug |
Filter the "not migrated" list, per source. Shown on BOTH the dry-run. | includes/migration/class-import-service.php:286 |
learnomy_migration_question_type_fallbacks |
filter | array( 'image_matching' => 'matching', 'image_answering' => 'short_answer', 'h5p' => 's... |
The fallback Learnomy question type for each source question type with no exact equivalent. | includes/migration/class-import-service.php:309 |
learnomy_migration_sources |
filter | $defaults |
Filter the migration sources. Pro and third parties append modules. | includes/migration/class-source-registry.php:49 |
Models#
| Hook | Type | Arguments | What it is for | Fired in |
|---|---|---|---|---|
learnomy_access_grant_reference_label |
filter | $label, $source, $external_ref |
How the admin screens name a grant's reference. | includes/models/class-access-grant.php:196 |
learnomy_catalog_where_clauses |
filter | array( $where_sql, $where_values ), $args |
Final hook for extensions to contribute WHERE clauses + values to. | includes/models/class-course.php:670 |
learnomy_category_includes_descendants |
filter | true, $category_id |
Whether a category listing rolls up the courses filed under its. | includes/models/class-category.php:191 |
learnomy_cert_verify_throttle_seconds |
filter | 5 * MINUTE_IN_SECONDS |
The minimum seconds between verification-count increments for one certificate. | includes/models/class-certificate.php:452 |
learnomy_certificate_template_usage |
filter | $reasons, $template_id |
Filter what else depends on a certificate template. | includes/models/class-certificate-template.php:170 |
learnomy_commission_void_payout_statuses |
filter | array( 'reversed', 'refunded' ) |
Filters the payout statuses that exclude a commission from earnings. | includes/models/class-commission.php:78 |
learnomy_coupon_exhausted |
action | $id |
Fires when a coupon is retired for running out of redemptions. | includes/models/class-coupon.php:206 |
learnomy_course_complete_continue_url |
filter | self::completed_destination( $course, $user_id ), $course, $user_id |
Filter the "Continue Learning" destination for a course the viewer. | includes/models/class-course.php:3962 |
learnomy_course_complete_url |
filter | \Learnomy\route_url( 'course-complete', array( 'slug' => (string) $course->slug ) ), $c... |
Where a learner lands when a course completes. | includes/models/class-course.php:3844 |
learnomy_course_enroll_gate |
filter | '', $course, $user_id |
Lets an extension take over the enrol call-to-action for a course. | includes/models/class-course.php:4067 (2) |
learnomy_course_is_purchasable |
filter | true, $course, $user_id |
Whether a course may be bought right now. | includes/models/class-course.php:3810 |
learnomy_course_sale_transaction_types |
filter | array( 'course', 'subscription_course', 'subscription_course_renewal' ) |
Filter the transaction types treated as the sale of one course. | includes/models/class-transaction.php:100 |
learnomy_courses_primed |
action | $lrn_primed |
includes/models/class-course.php:968 |
|
learnomy_enrollment_current_statuses |
filter | [ 'active', 'completed' ] |
Statuses treated as a live enrolment by rosters, counts and averages. | includes/models/class-enrollment.php:1274 |
learnomy_enrollment_source_is_paid |
filter | in_array( $source, array( 'purchase', 'paid', 'subscription', 'membership' ), true ), $... |
Whether an enrollment source counts as money changing hands. | includes/models/class-enrollment.php:1160 |
learnomy_enrollment_source_is_self_serve |
filter | 'free' === $source, $source |
Whether an enrollment source is self-serve. | includes/models/class-enrollment.php:1150 |
learnomy_enrollment_source_label |
filter | $labels[ $source ] ?? ucfirst( str_replace( '_', ' ', $source ) ), $source |
Filters the human label for an enrollment source, so an integration. | includes/models/class-enrollment.php:1121 |
learnomy_instructor_resumed |
action | $user_id |
An instructor was resumed and takes new business again. | includes/models/class-instructor.php:251 |
learnomy_instructor_suspended |
action | $user_id |
An instructor was paused: hidden from the public directory, no new. | includes/models/class-instructor.php:244 |
learnomy_lesson_attachment_added |
action | $lesson_id, $attachment_id, $media_id |
Fires after a file is attached to a lesson. | includes/models/class-lesson.php:1365 |
learnomy_lesson_attachment_removed |
action | (int) $row->lesson_id, $attachment_id |
Fires after a lesson attachment is detached. | includes/models/class-lesson.php:1386 |
learnomy_lesson_content_type_descriptors |
filter | $descriptors |
Filter the described lesson content types. | includes/models/class-lesson.php:162 |
learnomy_lesson_content_type_label |
filter | $label, $type |
Filter the human-readable label for a lesson content-type, so a Pro. | includes/models/class-lesson.php:262 |
learnomy_lesson_content_types |
filter | self::CONTENT_TYPES |
Filter the selectable lesson content-types. | includes/models/class-lesson.php:86 |
learnomy_max_webhooks |
filter | self::DEFAULT_MAX |
Filter the maximum number of active outbound webhooks. | includes/models/class-webhook.php:44 |
learnomy_membership_free_plan_limit |
filter | self::FREE_PLAN_LIMIT |
Filter the free-plan cap. Pro sets this to PHP_INT_MAX. | includes/models/class-membership-plan.php:145 |
learnomy_model_where_default_limit |
filter | 5000, static::table_name() |
The row ceiling applied to a model query that passes no limit. | includes/models/class-model.php:695 |
learnomy_notification_type_label |
filter | $label, $type |
Filter the human label for a notification type slug. | includes/models/class-notification.php:80 |
learnomy_progress_activity_announcement |
filter | $map, $status |
Verb and icon used to announce a progress row in an activity feed. | includes/models/class-progress.php:612 |
learnomy_provider_cancel_max_attempts |
filter | 10 |
How many times a cancellation is retried at the payment provider before giving up. | includes/models/class-subscription.php:718 |
learnomy_quiz_max_attempts |
filter | $limit, $quiz, $user_id |
Filter the number of attempts a student may take on a quiz. | includes/models/class-quiz.php:578 |
learnomy_quiz_question_count |
filter | $slots, $quiz_id |
Filter how many questions a sitting of a quiz holds. | includes/models/class-quiz.php:664 |
learnomy_renewal_transaction_types |
filter | array( 'membership_renewal', 'subscription_course_renewal' ) |
Filter the transaction types treated as a renewal. | includes/models/class-transaction.php:121 |
learnomy_store_managed_label |
filter | $labels[ $source ] ?? ucwords( str_replace( array( '-', '_' ), ' ', $source ) ), $source |
The store's display name for a store-managed membership source. | includes/models/class-subscription.php:162 |
learnomy_subscription_deleted |
action | $id |
Fires after a subscription is deleted so extensions can clean up. | includes/models/class-subscription.php:228 |
learnomy_technical_content_types |
filter | self::TECHNICAL_CONTENT_TYPES |
The lesson content types whose technical name is hidden from learners. | includes/models/class-lesson.php:291 |
learnomy_webhook_deleted |
action | $id |
Fires after a webhook is deleted so extensions can clean up rows. | includes/models/class-webhook.php:108 |
Modules#
| Hook | Type | Arguments | What it is for | Fired in |
|---|---|---|---|---|
learnomy_after_module_disabled |
action | $slug |
Fires after a module is disabled. A module that wrote rows into a. | includes/modules/class-module-kernel.php:246 |
learnomy_after_module_enabled |
action | $slug |
Fires after a module is enabled. Lets the owning extension (Free or. | includes/modules/class-module-kernel.php:204 |
learnomy_module_disable_impact |
filter | $impact, $slug |
Declare what ELSE a site loses by switching this module off. | includes/modules/class-module-kernel.php:353 |
learnomy_module_enabled |
filter | $result, $slug |
Final say on whether an OPTIONAL module is active. Lets a site-wide. | includes/modules/class-module-kernel.php:102 |
learnomy_module_preset_applied |
action | $preset_slug, $modules |
Fires after a wizard preset has been applied. Listeners can seed. | includes/modules/class-module-kernel.php:896 |
learnomy_module_presets |
filter | $presets |
Filter the wizard presets. Custom builds can rename, replace, or. | includes/modules/class-module-kernel.php:841 |
learnomy_module_user_commitment |
filter | $held, $slug, $user_id |
Whether this user still holds something the module sold them, and so. | includes/modules/class-module-kernel.php:389 |
learnomy_modules_catalog |
filter | $base |
Filter the module catalog so Pro extensions and third parties. | includes/modules/class-module-kernel.php:751 |
learnomy_pro_enabled_extensions |
filter | (array) get_option( 'learnomy_pro_extensions', array() ) |
includes/modules/class-module-kernel.php:125 |
|
learnomy_site_sells_something |
filter | $sells |
Filter whether this site counts as selling something. | includes/modules/class-module-kernel.php:542 |
Notifications#
| Hook | Type | Arguments | What it is for | Fired in |
|---|---|---|---|---|
learnomy_community_notification_removed |
action | 'course', $course_id |
Fires when an object that community notifications point at is deleted. | includes/notifications/class-community-notification-contract.php:46 (2) |
Permissions#
| Hook | Type | Arguments | What it is for | Fired in |
|---|---|---|---|---|
learnomy_can_access_course |
filter | $result, $user_id, $context_id |
Whether a user may access a course. | includes/permissions/class-permission-engine.php:121 |
learnomy_co_instructor_can_manage |
filter | false, $user_id, (int) $course->id |
Allow an assigned co-instructor to co-manage a course (content,. | includes/permissions/class-permission-engine.php:386 |
learnomy_credential_max_failures |
filter | self::CREDENTIAL_MAX_FAILURES |
The failed credential attempts allowed in a bucket before it is locked out. | includes/permissions/class-rate-limiter.php:115 |
learnomy_credential_window |
filter | self::CREDENTIAL_WINDOW |
How long, in seconds, failed credential attempts in a bucket are counted. | includes/permissions/class-rate-limiter.php:142 |
learnomy_guest_checkout_rate_limit |
filter | self::GUEST_CHECKOUTS_PER_HOUR |
The number of guest checkouts allowed per IP address per hour. | includes/permissions/class-rate-limiter.php:64 |
learnomy_is_course_learner |
filter | $result, $user_id, $course_id |
Final say on whether a user counts as a learner on this course. | includes/permissions/class-permission-engine.php:274 |
learnomy_permission_check |
filter | false, $user_id, $action, $context_id |
The verdict for a permission action when the user lacks the WordPress capability behind it. | includes/permissions/class-permission-engine.php:87 (2) |
learnomy_permission_context_check |
filter | true, $user_id, $action, $context_id |
The verdict for an action that has no context-specific rule, once the capability check has passed. | includes/permissions/class-permission-engine.php:196 |
learnomy_visibility_grants |
filter | $grants, $viewer_id, $purpose |
Filters the rectangles a viewer may read. | includes/permissions/class-permission-engine.php:531 |
Security#
| Hook | Type | Arguments | What it is for | Fired in |
|---|---|---|---|---|
learnomy_scope_media_to_author |
filter | $scope, get_current_user_id() |
Filter whether the Media Library is limited to the user's own uploads. | includes/security/class-media-library-scope.php:60 |
learnomy_webhook_allowed_schemes |
filter | array( 'https', 'http' ) |
Allowed URL schemes for outbound webhooks. Defaults to https only. | includes/security/class-webhook-url-validator.php:124 |
Seo#
| Hook | Type | Arguments | What it is for | Fired in |
|---|---|---|---|---|
learnomy_meta_description |
filter | $description, (string) get_query_var( 'learnomy_route' ) |
Filter the meta description for a Learnomy route. | includes/seo/class-schema-markup.php:537 |
learnomy_meta_description_max_length |
filter | 155 |
Max meta-description length before truncation. | includes/seo/class-schema-markup.php:581 |
learnomy_seo_plugin_head_filters |
filter | self::SEO_PLUGIN_HEAD_FILTERS |
Filters the SEO plugin filters Learnomy empties on its own routes, so. | includes/seo/class-schema-markup.php:155 |
learnomy_seo_yield_to_plugin |
filter | $seo_plugin_active |
Whether Learnomy yields its schema markup to an active SEO plugin. | includes/seo/class-schema-markup.php:454 |
learnomy_sitemap_courses_per_page |
filter | 100 |
The number of courses listed on each sitemap page. | includes/seo/class-course-sitemap-provider.php:74 |
learnomy_sitemap_instructors_per_page |
filter | 100 |
The number of instructors listed on each sitemap page. | includes/seo/class-instructor-sitemap-provider.php:103 |
Services#
| Hook | Type | Arguments | What it is for | Fired in |
|---|---|---|---|---|
learnomy_access_email_covers |
filter | array( 'enrollment', 'membership_created', 'new_user_account', 'space_c1' ) |
includes/services/class-access-grant-service.php:199 |
|
learnomy_access_grant_created |
action | $grant_id, (int) $row->user_id, (string) $row->item_type, (int) $row->item_id, (string)... |
An Access Grant came into force (ledger level). Fires once per ledger. | includes/services/class-access-grant-service.php:916 |
learnomy_access_grant_revoked |
action | (int) $row->id, (int) $row->user_id, (string) $row->item_type, (int) $row->item_id, (st... |
An Access Grant ended (ledger level). | includes/services/class-access-grant-service.php:949 |
learnomy_access_grant_types |
filter | $types |
The item types an Access Grant can give. Pro adds learning_path,. | includes/services/class-access-grant-service.php:102 |
learnomy_access_granted |
action | $enrollment_id, $user_id, $course_id, $source |
Fires once per person when a student gains a course they did not have:. | includes/services/class-enrollment-service.php:663 |
learnomy_access_granted_email |
filter | ( new Notification_Service() )->is_email_enabled_for_type( 'access_granted' ), $source |
Send the one "Your access is ready" email for grants from this source. | includes/services/class-access-grant-service.php:185 |
learnomy_access_revoked |
action | $enrollment_id, (int) $enrollment->user_id, (int) $enrollment->course_id, (string) $enr... |
Fires once per person when a student loses a course: the last. | includes/services/class-enrollment-service.php:624 |
learnomy_account_billing_view_data |
filter | $view_data, $user_id |
Filter the resolved view-data array. Pro extensions can decorate. | includes/services/view-data/class-account-billing-view-data.php:120 |
learnomy_account_field_multi_types |
filter | self::MULTI_TYPES |
Filter which account-field types hold multiple values. A custom type. | includes/services/class-custom-fields.php:86 |
learnomy_account_field_option_types |
filter | self::OPTION_TYPES |
Filter which account-field types carry an option list. | includes/services/class-custom-fields.php:102 |
learnomy_account_field_render |
filter | false, $field, $value |
Render an account field yourself. Echo the markup and return true to. | includes/services/class-custom-fields.php:279 |
learnomy_account_field_sanitize |
filter | null, $field, $raw |
Sanitize an account field yourself. Return anything other than null. | includes/services/class-custom-fields.php:510 |
learnomy_account_field_types |
filter | self::TYPES |
Filter the account-field types a site accepts. | includes/services/class-custom-fields.php:67 |
learnomy_after_email_send |
action | $to, $subject, $template, $user_id, $sent |
Fires immediately after an email send attempt. | includes/services/class-notification-service.php:597 |
learnomy_allow_guest_checkout |
filter | $on, $course |
Filters whether guest checkout is allowed for a given course. | includes/services/class-payment-settings.php:280 |
learnomy_allow_multiple_plan_subscriptions |
filter | false |
Allow multiple concurrent plan subscriptions per user. Default false:. | includes/services/class-subscription-service.php:424 |
learnomy_avatar_updated |
action | $user_id, (int) $attachment_id |
Fires after a member's avatar changes. Lets caches (CDN, object. | includes/services/class-avatar-service.php:179 (2) |
learnomy_before_email_send |
action | $to, $subject, $template, $user_id |
Fires immediately before an email is sent. | includes/services/class-notification-service.php:584 |
learnomy_can_access_lesson |
filter | $available, $user_id, $lesson_id, $lesson |
Gate a lesson's availability. Pro's content-drip extension hooks this. | includes/services/class-lesson-service.php:233 |
learnomy_certificate_asserted_facts |
filter | $facts, $certificate |
Filter the facts a certificate asserts, as read back for display. | includes/services/class-certificate-service.php:317 |
learnomy_certificate_designs |
filter | [] |
The curated certificate designs. | includes/services/class-certificate-library.php:72 |
learnomy_certificate_issue_snapshot |
filter | $snapshot, $user_id, $course_id, $context |
Filter the facts recorded on a certificate at issue time. | includes/services/class-certificate-service.php:199 |
learnomy_certificate_issued |
action | $certificate_id, $user_id, $course_id |
Fires after a certificate is issued. | includes/services/class-certificate-service.php:146 |
learnomy_certificate_merge_tags |
filter | array() |
Add merge tags to the certificate designer and renderer. | includes/services/class-certificate-renderer.php:393 |
learnomy_certificate_revoked |
action | $certificate_id, $certificate |
Fires after a certificate is revoked. | includes/services/class-certificate-service.php:501 |
learnomy_certificate_verified |
action | $certificate->id, $uuid |
Fires when a certificate is verified by its public UUID. | includes/services/class-certificate-service.php:408 |
learnomy_checkout_cancelled_view_data |
filter | $view_data, $course_id, $plan_id |
Filter the cancelled-flow view data before it reaches the template. | includes/services/view-data/class-checkout-cancelled-view-data.php:83 |
learnomy_checkout_thank_you_view_data |
filter | $view_data, $transaction, $user_id |
Filter the thank-you view data before it reaches the template. | includes/services/view-data/class-checkout-thank-you-view-data.php:528 |
learnomy_commission_calculated |
action | $transaction_id |
Fires after the commission rows for a sale are written. | includes/services/class-commission-service.php:378 (2) |
learnomy_commission_eligible |
filter | $eligible, $transaction |
Filters whether a payment earns commission. | includes/services/class-commission-service.php:239 |
learnomy_commission_instructor_allocations |
filter | array( array( 'recipient_id' => $main_author_id, 'amount' => $instructor_pool, 'rate_ap... |
How a sale's instructor pool is split between instructors. | includes/services/class-commission-service.php:341 |
learnomy_commission_overpaid |
action | $overpaid, (int) $original->id, $provider |
Commissions already paid out that a refund has now made excessive. | includes/services/class-refund-service.php:219 |
learnomy_completion_enforcement |
filter | $mode, $user_id, $lesson |
Layer 5: filter. Last word on the resolved enforcement mode. Return. | includes/services/class-progress-service.php:602 |
learnomy_consent_documents |
filter | $docs |
Filters the legal documents a new member must agree to. | includes/services/class-consent-service.php:99 |
learnomy_consent_required |
filter | ! empty( self::documents() ), self::documents() |
Filters whether terms acceptance is enforced at registration. | includes/services/class-consent-service.php:118 |
learnomy_course_access_requirements |
filter | array(), $course, $user_id |
Course-level requirements gate EVERY lesson in the course. | includes/services/view-data/class-single-lesson-view-data.php:129 |
learnomy_course_completed |
action | $enrollment_id, (int) $enrollment->user_id, (int) $enrollment->course_id |
Fires after an enrollment is marked completed. | includes/services/class-enrollment-service.php:887 |
learnomy_course_completion_type_changed |
action | $id, $new_type, $was_type |
A course's completion type changed, so the number of steps it. | includes/services/class-course-service.php:149 |
learnomy_course_create_data |
filter | $data, $author_id |
The data a new course is created with. | includes/services/class-course-service.php:46 |
learnomy_course_created |
action | $course_id, $data |
Fires after a course is created. | includes/services/class-course-service.php:62 |
learnomy_course_deleted |
action | $id |
Fires after a course is deleted. | includes/services/class-course-service.php:376 |
learnomy_course_duplicated |
action | $new_course_id, $id |
Fires after a course is duplicated. | includes/services/class-course-service.php:523 |
learnomy_course_pending_review |
action | $id |
This action is documented in includes/services/class-course-service.php. | includes/services/class-course-service.php:158 (2) |
learnomy_course_published |
action | $course_id |
Fires when a course is published, including when it is created already published. | includes/services/class-course-service.php:73 (3) |
learnomy_course_restarted |
action | $user_id, $course_id |
Fires after a learner restarts a course and their certificates for it are revoked. | includes/services/class-progress-service.php:662 |
learnomy_course_retaken |
action | $user_id, $course_id, $reset_progress |
Fires after a student has successfully re-entered a course. | includes/services/class-enrollment-service.php:961 |
learnomy_course_update_data |
filter | $data, $id |
The data a course is updated with. | includes/services/class-course-service.php:88 |
learnomy_course_updated |
action | $id, $data |
Fires after a course is updated. | includes/services/class-course-service.php:131 |
learnomy_courses_per_page |
filter | $per_page |
Filter the catalog page size. | includes/services/view-data/class-catalog-view-data.php:62 (2) |
learnomy_dashboard_widgets |
filter | array(), $surface, $context |
The dashboard widgets contributed for a surface. | includes/services/class-dashboard-widget-registry.php:64 |
learnomy_demo_data_cleaned |
action | $manifest, $reassign_to |
Fires after demo data is removed. | includes/services/class-setup-service.php:217 (2) |
learnomy_demo_data_seeded |
action | $manifest, $admin_id |
Fires after demo data is created. | includes/services/class-setup-service.php:182 |
learnomy_email_body |
filter | $body, $template, $user_id, $data |
The HTML body of a notification email. | includes/services/class-notification-service.php:566 |
learnomy_email_headers |
filter | $headers, $template, $user_id |
The headers of a notification email. | includes/services/class-notification-service.php:574 |
learnomy_email_subject |
filter | $subject, $template, $user_id, $data |
The subject of a notification email. | includes/services/class-notification-service.php:557 |
learnomy_email_template_groups |
filter | $map |
Filter the email toggle groups. | includes/services/class-notification-service.php:709 |
learnomy_email_template_types |
filter | array( 'enrollment' => __( 'Enrollment Welcome', 'learnomy' ), // One email per store g... |
The notification email templates a site owner can customise. | includes/services/class-notification-service.php:749 |
learnomy_email_to |
filter | $user->user_email, $template, $user_id, $data |
The recipient address of a notification email. | includes/services/class-notification-service.php:548 |
learnomy_expo_push_message |
filter | array( 'to' => $token, 'title' => $title, 'body' => $body, 'sound' => 'default', 'data'... |
Filter one Expo push message before it is sent. | includes/services/class-expo-push-transport.php:84 |
learnomy_external_enrollment_requested |
action | $user_id, $course_id, $this->request |
Fires after an incoming webhook has given a buyer access, for add-ons such as xAPI. | includes/services/class-incoming-purchase-service.php:287 |
learnomy_external_purchase_completed |
action | $txn_id, $user_id, $type, $ext, $gateway |
Legacy hook that fires after a purchase that is neither a course nor a membership completes. | includes/services/class-purchase-recorder.php:320 |
learnomy_grading_queue_sources |
filter | array(), $course_ids, $status, $fetch |
Extra sources of items for the grading queue. | includes/services/class-grading-service.php:167 (2) |
learnomy_instructor_courses_reassigned |
action | $user_id, $target, $count |
Fires after a deleted instructor's courses are reassigned. | includes/services/class-user-cleanup-service.php:175 |
learnomy_instructor_create_course_url |
filter | admin_url( 'admin.php?page=learnomy-new-course' ) |
The URL of the instructor dashboard create-course link. | includes/services/view-data/class-instructor-dashboard-view-data.php:185 (3) |
learnomy_instructor_student_detail |
filter | $student, $is_admin |
Filter one student's instructor-facing detail record. Companion to. | includes/services/view-data/class-instructor-students-view-data.php:244 |
learnomy_instructor_students_list |
filter | $students, $scope_course_ids, null === $scope_course_ids |
Filter the instructor roster rows before render. An extension can. | includes/services/view-data/class-instructor-students-view-data.php:149 |
learnomy_instructor_suspension_blocks_sources |
filter | array( 'free' ), $course_id, $user_id |
Enrollment sources a suspended instructor still blocks. | includes/services/class-enrollment-service.php:224 |
learnomy_lesson_access_requirements |
filter | array(), $lesson, $course, $user_id |
Filter extra lesson-access requirements layered on top of enrollment. | includes/services/view-data/class-single-lesson-view-data.php:117 |
learnomy_lesson_attachment_downloaded |
action | $attachment_id, (int) $row->lesson_id, get_current_user_id() |
Fires immediately before a handout's bytes go out, after the. | includes/services/class-attachment-download.php:91 |
learnomy_lesson_body_fields |
filter | array( 'content', 'content_html', 'content_plain', 'video_url', 'media_url' ) |
Fields that count as a lesson's renderable body. | includes/services/class-lesson-service.php:507 |
learnomy_lesson_comments_enabled |
filter | $global_lesson_comments, $lesson, $course |
Whether comments are enabled on a lesson in the lesson player. | includes/services/view-data/class-single-lesson-view-data.php:413 |
learnomy_lesson_completed |
action | $user_id, $lesson_id, $course_id |
includes/services/class-progress-service.php:143 |
|
learnomy_lesson_completion_rules |
filter | $status, $user_id, $lesson |
A lesson's completion status and requirements for a learner. | includes/services/class-progress-service.php:542 |
learnomy_lesson_copied |
action | $new_id, $lesson_id, $course_id |
Fires after a lesson is copied. | includes/services/class-lesson-service.php:648 |
learnomy_lesson_deleted |
action | $lesson_id, $course_id |
Fires after a lesson is deleted. | includes/services/class-lesson-service.php:573 |
learnomy_lesson_locked_reason |
filter | '', (int) $lesson->id, (int) $user_id, $course |
One sentence telling the viewer how a dateless locked lesson opens. | includes/services/view-data/class-single-lesson-view-data.php:321 (3) |
learnomy_lesson_media_served |
action | $lesson_id, $media_id, get_current_user_id() |
Fires after a lesson's primary media passes its permission check. | includes/services/class-lesson-media-download.php:65 |
learnomy_lesson_standard_completion |
filter | null, $user_id, $lesson |
Whether a learner has met the completion rule of a SCORM, cmi5 or LTI lesson. | includes/services/class-progress-service.php:454 |
learnomy_lesson_unlock_date |
filter | $unlocks_at, (int) $lesson->id, (int) $user_id, $course |
The date a locked, dripped lesson unlocks for the viewer. | includes/services/view-data/class-single-lesson-view-data.php:304 (2) |
learnomy_manual_graded_types |
filter | array( 'essay' ) |
The question types that need manual grading. | includes/services/class-quiz-service.php:701 |
learnomy_media_protected |
action | $media_id, $relative |
Fires after a media item's bytes have moved into the protected store. | includes/services/class-protected-uploads.php:595 |
learnomy_membership_cancelled |
action | $subscription_id, (int) $sub->user_id, (int) $sub->plan_id |
This action is documented in cancel() above. | includes/services/class-subscription-service.php:828 (2) |
learnomy_membership_change_plan_in_place |
filter | false, $sub |
Whether this membership can be switched to another plan in place. | includes/services/class-subscription-service.php:211 |
learnomy_membership_created |
action | $subscription_id, $user_id, $plan_id |
Plan-context subscription created. | includes/services/class-subscription-service.php:403 |
learnomy_membership_expired |
action | $subscription_id, (int) $sub->user_id, (int) $sub->plan_id |
Plan-context subscription expired. | includes/services/class-subscription-service.php:1806 |
learnomy_membership_has_access |
filter | $access, $user_id, $course_id, $active_subs |
Let Pro (Spaces, entitlement caps, geographic restrictions) enhance. | includes/services/class-subscription-service.php:1834 (2) |
learnomy_membership_manage_actions |
filter | $actions, $sub |
Filter the action buttons shown on the manage page. Pro adds. | includes/services/view-data/class-membership-manage-view-data.php:253 |
learnomy_membership_renewed |
action | $subscription_id, (int) $sub->user_id, (int) $sub->plan_id |
includes/services/class-subscription-service.php:1589 |
|
learnomy_notification_pref_buckets |
filter | $map |
Map notification types to learner email-preference buckets. Extensions. | includes/services/class-notification-service.php:1128 |
learnomy_notifications_always_send |
filter | self::ALWAYS_SEND, $type |
This filter is documented in module_allows() below. | includes/services/class-notification-service.php:70 |
learnomy_notifications_async |
filter | true |
Whether notification delivery is queued through Action Scheduler instead of running inline. | includes/services/class-notification-service.php:450 |
learnomy_object_integrations |
filter | array(), $type, $id |
Register a product that can give this object a community or discussion. | includes/services/class-object-integration-registry.php:93 |
learnomy_payment_completed |
action | $txn_id, $user_id, $gateway |
Fires after a purchase of any type completes. | includes/services/class-purchase-recorder.php:330 |
learnomy_payment_refunded |
action | (int) $original->id, $amount, $provider, $is_full_refund |
Fires after a refund is recorded against a sale. | includes/services/class-refund-service.php:230 |
learnomy_pre_enroll |
filter | true, $user_id, $course_id, $source |
includes/services/class-enrollment-service.php:257 |
|
learnomy_provision_enrollments |
filter | array(), $user_id, $context |
Course IDs to auto-enroll a provisioned user into (empty = none). | includes/services/class-provisioning-service.php:200 |
learnomy_provision_role |
filter | 'lrn_student', $user_id, $context |
The role a newly provisioned user receives. Return '' to skip. | includes/services/class-provisioning-service.php:179 |
learnomy_purchase_completed |
action | $txn_id, $user_id, $type, $item_id, $ext, $gateway |
A purchase completed and was recorded. THE canonical fulfilment event. | includes/services/class-purchase-recorder.php:305 |
learnomy_purchase_enrollment_failed |
action | $user_id, $course_id, $result, $provider, $context |
Fires when a completed payment did not result in a course enrollment. | includes/services/class-enrollment-service.php:472 |
learnomy_push_message |
filter | array( 'token' => $device_token, 'notification' => array( 'title' => $title, 'body' => ... |
Filter the FCM message before it is sent. | includes/services/class-push-service.php:146 |
learnomy_push_sent |
action | $token, $title |
Fires after a push notification is delivered to a device. | includes/services/class-expo-push-transport.php:134 (2) |
learnomy_quiz_auto_grade_result |
filter | $result, $attempt_id |
The automatic grading result of a quiz attempt. | includes/services/class-quiz-service.php:807 |
learnomy_quiz_deleted |
action | $quiz_id, $course_id |
Fires after a quiz and its attempts, responses and slots are gone. | includes/services/class-quiz-service.php:526 |
learnomy_quiz_deleting |
action | $quiz_id, $course_id |
Fires BEFORE a quiz's cascade runs, while its slots, attempts and. | includes/services/class-quiz-service.php:494 |
learnomy_quiz_failed |
action | $attempt_id, $user_id, $quiz_id, $score |
Fires when a quiz attempt is finally graded as failed. | includes/services/class-quiz-service.php:1057 |
learnomy_quiz_graded |
action | $attempt_id, (int) $attempt->user_id, (int) $attempt->quiz_id |
Fires after the last manual grade is saved and the attempt is finalised as graded. | includes/services/class-quiz-service.php:1392 |
learnomy_quiz_inherits_lesson_lock |
filter | true, $quiz, $user_id |
Whether a quiz inherits the lock state of the lesson it is bound to. | includes/services/class-quiz-service.php:1550 |
learnomy_quiz_pass_score |
filter | $pass_score, $attempt_id, (int) $attempt->quiz_id |
The pass mark a quiz is graded against, in percent. | includes/services/class-quiz-service.php:338 (3) |
learnomy_quiz_passed |
action | $attempt_id, $user_id, $quiz_id, $score |
Fires when a quiz attempt is finally graded as passed. | includes/services/class-quiz-service.php:1047 |
learnomy_quiz_question_answered |
action | $question_id, $response, $is_correct, $attempt_id |
Fires once per answered question, immediately after the response row is. | includes/services/class-quiz-service.php:295 |
learnomy_quiz_started |
action | $attempt_id, $user_id, $quiz_id |
Fires after a quiz attempt is started. | includes/services/class-quiz-service.php:234 |
learnomy_quiz_submitted |
action | $attempt_id, (int) $attempt->user_id, (int) $attempt->quiz_id |
Fires after a quiz attempt is submitted. | includes/services/class-quiz-service.php:391 |
learnomy_refund_partial_revocation |
action | $notice, $original, (int) $refund_id |
A full refund could not fully revoke what was sold. | includes/services/class-refund-service.php:170 |
learnomy_registration_captcha_enabled |
filter | $on |
Filter whether the built-in signup captcha runs. | includes/services/class-registration-captcha.php:83 |
learnomy_review_submitted |
action | $review_id, $user_id, $course_id |
Fires after a course review is saved. | includes/services/class-review-service.php:78 |
learnomy_route_conflict_force_ownership |
filter | false |
Whether Learnomy's rewrite rules should outrank every other plugin's. | includes/services/class-route-conflicts.php:288 |
learnomy_section_deleted |
action | $section_id, $course_id |
Fires after a section and everything it owned have been removed. | includes/services/class-course-service.php:426 |
learnomy_send_notification |
action | $user_id, $type, $data, \Learnomy\Notifications\Community_Notification_Contract::build(... |
Fires after a notification is created (in-app row + optional email). | includes/services/class-notification-service.php:312 |
learnomy_sender_email |
filter | '' |
Filter the resolved sender address before WordPress's default is kept. | includes/services/class-notification-service.php:993 |
learnomy_sender_name |
filter | '' |
Filter the resolved sender name before WordPress's default is kept. | includes/services/class-notification-service.php:949 |
learnomy_setup_completed |
action | array( 'base_slug' => (string) ( $stored['base_slug'] ?? 'courses' ), 'currency' => (st... |
Fires when the setup wizard is completed. | includes/services/class-setup-service.php:75 |
learnomy_should_stop_provider_billing |
filter | true, $sub |
Whether to tell the gateway to stop billing this subscription. | includes/services/class-subscription-service.php:990 |
learnomy_store_manage_url |
filter | (string) $url, $source, $sub |
The store page where a member manages a membership the store bills. | includes/services/class-subscription-service.php:860 |
learnomy_student_access_restored |
action | $enrollment_id, (int) $enrollment->user_id, (int) $enrollment->course_id |
Fires when a previously revoked enrolment is given access back. | includes/services/class-enrollment-service.php:748 |
learnomy_student_enrolled |
action | (int) $existing->id, $user_id, $course_id, $source, true |
includes/services/class-enrollment-service.php:391 (2) |
|
learnomy_student_unenrolled |
action | $enrollment_id, (int) $enrollment->user_id, (int) $enrollment->course_id, $access_remains |
Fires after an enrollment row is ended, once per row. | includes/services/class-enrollment-service.php:606 |
learnomy_subscription_approved |
action | $subscription_id, (int) $sub->user_id, (int) $sub->plan_id, 'plan' |
Fires after an admin approves a pending subscription. | includes/services/class-subscription-service.php:682 |
learnomy_subscription_cancelled |
action | $subscription_id, (int) $sub->user_id, (int) $sub->plan_id, true, 'plan' |
This action is documented in cancel() above. | includes/services/class-subscription-service.php:826 (2) |
learnomy_subscription_created |
action | $subscription_id, $user_id, $plan_id, 'plan' |
Fires after a plan subscription is created and active. | includes/services/class-subscription-service.php:390 (2) |
learnomy_subscription_declined |
action | $subscription_id, (int) $sub->user_id, (int) $sub->plan_id, 'plan' |
Fires after an admin declines a pending subscription. | includes/services/class-subscription-service.php:933 |
learnomy_subscription_expired |
action | $subscription_id, (int) $sub->user_id, $target_id, $context_type |
Fires after a subscription expires and its access is revoked. | includes/services/class-subscription-service.php:1792 |
learnomy_subscription_past_due |
action | $subscription_id, (int) $sub->user_id, $target_id, $failure_reason, $context_type |
Fires after a subscription renewal payment fails and it becomes past due. | includes/services/class-subscription-service.php:1717 |
learnomy_subscription_paused |
action | $subscription_id, (int) ( $sub->user_id ?? 0 ), $is_course_sub ? (int) $sub->course_id ... |
includes/services/class-subscription-service.php:1418 |
|
learnomy_subscription_pending |
action | $subscription_id, $user_id, $plan_id, 'plan' |
Fires when a subscription is created and is waiting for admin approval. | includes/services/class-subscription-service.php:347 |
learnomy_subscription_plan_changed |
action | $subscription_id, $old_price_id, $new_price_id, $context |
Fires after a subscription's billed price changes. Pro extensions. | includes/services/class-subscription-service.php:1511 |
learnomy_subscription_renewal_after_end |
action | (int) $sub->id, (int) $sub->user_id, (string) $sub->status |
Fires when a gateway renewal arrives for a cancelled or expired. | includes/services/class-subscription-service.php:1654 |
learnomy_subscription_renewed |
action | $subscription_id, (int) $sub->user_id, $target_id, $context_type |
Fires after a subscription renews. | includes/services/class-subscription-service.php:1575 |
learnomy_subscription_resumed |
action | $subscription_id, (int) $sub->user_id, $target_id, $context_type |
Fires after a subscription is resumed. | includes/services/class-subscription-service.php:1316 |
learnomy_subscription_status_labels |
filter | [ 'pending' => __( 'Awaiting approval', 'learnomy' ), 'trialing' => __( 'In trial', 'le... |
Filter the subscription status → UI label map. | includes/services/class-subscription-service.php:2353 |
learnomy_subscription_trial_ended |
action | $subscription_id, (int) $sub->user_id, (int) $sub->plan_id, 'plan' |
Fires after a subscription trial ends and the subscription becomes active. | includes/services/class-subscription-service.php:612 |
learnomy_suppress_notifications |
filter | false, 'new_user_account', (int) $user_id, array() |
This filter is documented in includes/services/class-notification-service.php. | includes/services/class-provisioning-service.php:108 (2) |
learnomy_tab_switch_auto_submit_limit |
filter | $limit, $quiz |
Filter the tab-switch auto-submit limit (0 = off), e.g. to vary it. | includes/services/class-quiz-defaults.php:134 |
learnomy_tab_switch_flag_threshold |
filter | 3, $attempt, $quiz |
The number of tab switches at which a quiz attempt is flagged. | includes/services/class-grading-service.php:422 |
learnomy_thank_you_polling_limit_seconds |
filter | 90 |
Seconds the thank-you page keeps checking before it tells the buyer the payment is not confirmed. | includes/services/view-data/class-checkout-thank-you-view-data.php:566 |
learnomy_thank_you_polling_seconds |
filter | 3 |
Seconds between status checks on the thank-you page while a payment is still pending. | includes/services/view-data/class-checkout-thank-you-view-data.php:541 |
learnomy_update_payment_hint |
filter | $link['hint'], $sub |
The URL where a member updates the payment method of a subscription. | includes/services/view-data/class-membership-manage-view-data.php:164 |
learnomy_update_payment_url |
filter | $link['url'], $sub |
The URL where a member updates the payment method of a subscription. | includes/services/view-data/class-membership-manage-view-data.php:157 |
learnomy_user_data_purged |
action | $user_id, $summary |
Fires after a user's Learnomy data is purged. | includes/services/class-user-cleanup-service.php:379 |
learnomy_user_provisioned |
action | (int) $user_id, array_merge( array( 'source' => 'ensure_user_by_email' ), $args ) |
Fires after an account is created for a buyer who had none, so role and enrollment listeners can run. | includes/services/class-provisioning-service.php:119 (2) |
learnomy_validate_enrollment_source |
filter | $unclaimed, $source, $user_id, $course_id, $access_type |
Lets an extension validate an enrollment source Learnomy does not recognise. | includes/services/class-enrollment-service.php:1200 |
learnomy_video_max_playback_rate |
filter | 2.0, $lesson |
Fastest playback rate a student could plausibly have used. The bundled. | includes/services/class-progress-service.php:886 |
learnomy_video_watch_ceiling_pct |
filter | $ceiling, $lesson, $progress_row |
Last word on the watch ceiling. The escape hatch for a site whose. | includes/services/class-progress-service.php:902 |
learnomy_webhook_event_map |
filter | $map |
Filter the outbound webhook event catalogue. | includes/services/class-webhook-events.php:163 |
learnomy_webhooks_core_dispatch_enabled |
filter | true |
Whether the core (Free) webhook dispatcher should wire itself to. | includes/services/class-webhook-events.php:246 |
learnomy_withdrawal_requested |
action | $withdrawal_id, $instructor_id, $settled |
Fires after an instructor withdrawal is requested. | includes/services/class-commission-service.php:972 |
Templates#
| Hook | Type | Arguments | What it is for | Fired in |
|---|---|---|---|---|
learnomy_account_billing_rendered |
action | get_current_user_id() |
Fires after the billing page renders. Pro extensions hook here for. | templates/account-billing.php:368 |
learnomy_account_fields |
action | 0, 'registration_instructor' |
Fires in the instructor registration form to render extra fields. | templates/register-instructor.php:229 (4) |
learnomy_account_nav_sections |
filter | array( 'learning' => __( 'Learning', 'learnomy' ), 'account' => __( 'Account', 'learnom... |
Filter the account-nav sections - ordered section-key => label. Drives both. | templates/partials/account-nav.php:59 |
learnomy_cancelled_rendered |
action | $course_id, $plan_id |
Fires after the cancelled page has rendered. Pro extensions can hook. | templates/checkout-cancelled.php:91 |
learnomy_catalog_access_notices |
filter | array( 'not_your_course' => sprintf( /* translators: 1: singular Course label, 2: singu... |
The notices the catalog shows for each access reason. | templates/catalog/partials/access-notice.php:28 |
learnomy_catalog_filter_facets |
action | $current_cat |
Hookable facet region in the catalog sidebar. Extensions (or Pro). | templates/catalog/sidebar.php:140 |
learnomy_certificate_verify_after |
action | $certificate |
Fires after the verified certificate result block. Extensions use. | templates/certificate-verify.php:246 |
learnomy_certificate_verify_head |
action | $certificate |
Fires in the verify page head region for a valid certificate. | templates/certificate-verify.php:51 |
learnomy_certificate_verify_revoked |
action | $certificate |
Fires inside the revoked certificate result block. Extensions use. | templates/certificate-verify.php:291 |
learnomy_closed_cta |
filter | $lrn_closed_html, $course, get_current_user_id() |
Override the closed-course CTA HTML. | templates/course/partials/enroll-card.php:292 |
learnomy_course_after_content |
action | $course |
Placement region below the course body. | templates/course/hero.php:191 (4) |
learnomy_course_before_content |
action | $course |
Placement region above the course body (sponsor / CTA / related). | templates/course/hero.php:165 (4) |
learnomy_course_card_badges |
action | $course |
Fires inside the course card badge row so Surface A (sales. | templates/partials/course-card.php:239 |
learnomy_course_card_meta |
action | $course |
Per-card taxonomy / meta slot. Catalog Facets framework subscribers. | templates/partials/course-card.php:253 |
learnomy_course_comments_enabled |
filter | $course_comments_on && $site_comments_on, $course |
Whether the course comments section is shown. | templates/course/partials/body.php:241 |
learnomy_course_enrolled_after_title |
action | $course |
Under the title of the enrolled course page, so an addition opens the page. | templates/course/partials/body.php:102 |
learnomy_course_qa_section |
action | $course |
Fires inside the course sales page Q&A section when. | templates/course/partials/body.php:449 |
learnomy_course_sidebar_bottom |
action | $course |
Bottom of the course sidebar. | templates/course/classic.php:119 (2) |
learnomy_course_sidebar_card_footer |
action | $course |
Fires at the bottom of the single-course sidebar card, after the enrol/manage. | templates/course/partials/enroll-card.php:682 |
learnomy_course_sidebar_top |
action | $course |
Top of the course sidebar (sponsor / CTA / related). Fires on every. | templates/course/classic.php:106 (2) |
learnomy_dashboard_tab_buttons |
action | Legacy extension point - kept for modules that registered tabs. | templates/dashboard-widgets/student/enrollments.php:97 |
|
learnomy_dashboard_tab_panels |
action | Legacy panel extension point for modules registered against. | templates/dashboard-widgets/student/enrollments.php:224 |
|
learnomy_instructor_manage_courses_url |
filter | admin_url( 'admin.php?page=learnomy-courses' ) |
The URL of the manage-all link in the My Courses widget. | templates/dashboard-widgets/instructor/my-courses.php:78 |
learnomy_instructor_payout_setup |
action | get_current_user_id() |
Payout-account setup slot. A payout integration (Pro Stripe Connect) renders. | templates/dashboard-widgets/instructor/earnings.php:61 |
learnomy_instructor_sections |
filter | $lrn_sections |
Filter the instructor rail sections so a Pro extension can register its own. | templates/instructor-section.php:68 |
learnomy_instructor_withdraw_block_reason |
filter | '', get_current_user_id() |
A reason that blocks the instructor from requesting a withdrawal. | templates/dashboard-widgets/instructor/earnings.php:24 |
learnomy_invoice_pdf_url |
filter | $default_pdf_url, $invoice |
templates/partials/membership-invoice-row.php:60 |
|
learnomy_lesson_access_gate |
filter | $lrn_gate, $lesson, $course, get_current_user_id() |
Filter the lesson access-gate copy (title / message / cta_label / cta_url). | templates/lesson/focus.php:85 (2) |
learnomy_lesson_after_content |
action | $lesson, $course |
Fires after the embedded lesson layout is rendered. | templates/lesson/embedded.php:241 (2) |
learnomy_lesson_before_content |
action | $lesson, $course |
Placement region above the lesson content (admin edit bar, sponsor, etc.). | templates/lesson/focus.php:213 (2) |
learnomy_lesson_live_post_actions |
action | $lesson, $course |
Fires in the notice shown for a finished live session, to add a recording or contact link. | templates/lesson/partials/media.php:376 |
learnomy_lesson_pause |
action | $lesson |
Surface C - pause overlay. Always rendered, but hidden; the JS. | templates/lesson/embedded.php:271 |
learnomy_lesson_player_aside |
action | $lesson, $is_enrolled |
Allow Pro modules to render auxiliary tools alongside the lesson. | templates/lesson/embedded.php:365 (2) |
learnomy_lesson_render_content |
action | $content_type, $lesson, $media_url |
Fires to render the player of a lesson content type registered by an extension. | templates/lesson/partials/media.php:408 |
learnomy_lesson_sidebar_bottom |
action | $lesson, $course |
Bottom of the lesson curriculum sidebar. | templates/lesson/embedded.php:625 (2) |
learnomy_lesson_sidebar_top |
action | $lesson, $course |
Top of the lesson curriculum sidebar (e.g. resume CTA). | templates/lesson/embedded.php:499 (2) |
learnomy_membership_manage_extra_sections |
action | $sub |
Fires after the primary action row but before the invoices. | templates/membership-manage.php:477 |
learnomy_pricing_before_faq |
action | Fires after the plan grid + social proof but BEFORE the FAQ. Pro. | templates/membership-pricing.php:119 |
|
learnomy_pricing_page_footer |
action | Fires below the FAQ block. Pro uses it to inject a money-back. | templates/membership-pricing.php:157 |
|
learnomy_pricing_page_header |
action | Fires above the plan grid. Pro uses it to inject a trust-badges. | templates/membership-pricing.php:90 |
|
learnomy_pricing_plan_extras |
action | $plan |
Hook inside each pricing card so Pro can inject entitlement badges. | templates/partials/membership-plan-card.php:324 |
learnomy_pricing_social_proof |
action | templates/membership-pricing.php:105 |
||
learnomy_quiz_before_content |
action | $quiz |
In-content edit affordance, mirroring the course/lesson before-content hooks. | templates/single-quiz.php:182 |
learnomy_quiz_templates |
filter | [ 'focused', 'classic', 'conversational', 'sectioned', 'review-board', ] |
The quiz display templates a quiz may use. | templates/single-quiz.php:149 |
learnomy_registration_challenge |
action | 'registration_instructor' |
Render an owner-supplied signup challenge (CAPTCHA widget,. | templates/register-instructor.php:245 (2) |
learnomy_render_course_comments |
action | (int) $course->id, $course |
Fires on the course page where the comments section is rendered. | templates/course/partials/body.php:261 |
learnomy_show_instructor_earnings |
filter | \Learnomy\Services\Commission_Service::instructor_participates_in_revenue( get_current_... |
Whether the instructor dashboard shows the revenue stat for this instructor. | templates/instructor-dashboard.php:160 (2) |
learnomy_thank_you_rendered |
action | $transaction, get_current_user_id() |
Fires after the thank-you page has rendered. Pro analytics modules. | templates/checkout-thank-you.php:355 |
Widgets#
| Hook | Type | Arguments | What it is for | Fired in |
|---|---|---|---|---|
learnomy_progress_widget_max |
filter | 10 |
The most in-progress courses the Course Progress widget lists. | includes/widgets/class-course-progress-widget.php:73 |
learnomy_widget_output |
filter | $output, $args, $instance, $this->id_base |
The rendered HTML of the instructor widget. | includes/widgets/class-instructor-widget.php:59 (10) |