Academy LMS 4.0 IS LIVE

00
Days
:
00
Hours
:
00
Minute
:
00
Second

Override Templates Files

Academy renders its frontend (course archives, single course pages, the instructor profile, shortcode output, and more) from a set of PHP template files bundled with the plugin. If you’re comfortable editing theme files, you can override any of these in your own theme instead of touching the plugin — the same convention WooCommerce and most WordPress plugins use, so your changes survive plugin updates.

This is a developer-facing workflow (editing theme files directly), not a wp-admin screen.

Where the default templates live

All of Academy’s default templates ship inside the plugin at:

wp-content/plugins/academy/templates/

Academy\Frontend\Template\Loader::template_loader() looks for a matching file in your active theme first (via WordPress’s own locate_template()), and only falls back to the plugin’s copy in templates/ if the theme doesn’t provide one:

// includes/frontend/template/loader.php
public function template_loader( $template ) {
    ...
    $default_file = $this->get_template_loader_default_file();
    ...
}

How to override a template

1.In wp-content/plugins/academy/templates/, find the file you want to change.
2.Copy it into your active theme (or child theme) at the same relative path, inside an academy/ folder:
wp-content/themes/your-theme/academy/single-course.php
3.Edit the copy in your theme. Academy will now load your version instead of its own, and the change is untouched by future plugin updates.

Always override into a child theme if you’re using one — editing the parent theme directly means your changes are lost the next time the parent theme updates.

Example: overriding the single course template

To change the markup around a single course page, copy templates/single-course.php to wp-content/themes/your-theme/academy/single-course.php and edit it there. Academy’s template loader will find your theme’s copy first and use it instead of the plugin’s default.

The same pattern works for any file under templates/ — including the ones nested in subfolders like templates/single-course/ or templates/loop/; just mirror the same subfolder path inside your theme’s academy/ directory.

Classic themes only

Template overrides only apply on classic (non-block, non-full-site-editing) themes. Academy checks this with Helper::is_fse_theme():

public static function is_fse_theme() {
    if ( function_exists( 'wp_is_block_theme' ) ) {
        return (bool) \wp_is_block_theme();
    }
    ...
}

If your theme is a block/FSE theme (or you’ve switched Academy’s classic templates over to block templates), the PHP override system in this guide doesn’t apply — those pages are instead built from Academy’s block templates and styled through the Customize screen (see the Customize Screen guide), and you’d override them with the Site Editor instead of copying PHP files.

Some real template files you can override

Template path

What it renders

templates/single-course.php

The single course page wrapper (classic templates).

templates/archive-course.php

The course catalog / archive page wrapper.

templates/single-course/header.php

The header block on a single course page (title, meta, image).

templates/single-course/sidebar.php

The price/enroll sidebar on a single course page.

templates/loop/content.php

A single course card inside the catalog grid.

templates/curriculums/lesson.php

A lesson’s content inside the curriculum player.

templates/frontend-dashboard/sidebar.php

The sidebar navigation of the frontend student/instructor dashboard.

templates/instructor-public-profile.php

An instructor’s public profile page.

templates/shortcode/login.php

The markup used by Academy’s login shortcode.

templates/taxonomy-course-category.php

The course category archive page.

Field breakdown

templates/ — the plugin’s own default template files; the fallback used whenever your theme doesn’t provide an override.
yourtheme/academy/<same path> — where Academy looks for an override, mirroring the plugin’s own folder structure exactly.
Helper::is_fse_theme() — the check that decides whether classic PHP template overrides apply at all, or whether the site is using Academy’s block templates instead.