Title: Template code for single course
Last modified: August 27, 2019

---

# Template code for single course

 *  Resolved [tanuki1986](https://wordpress.org/support/users/tanuki1986/)
 * (@tanuki1986)
 * [6 years, 9 months ago](https://wordpress.org/support/topic/template-code-for-single-course/)
 * Hello,
    for learning purpose I’m trying to integrate Lifterlms with [https://understrap.com/](https://understrap.com/)
   theme. -I have installed and activated llms plugin, the course catalog is displayed
   powered by archive-course.php as I can see from the plugin ‘show-current-template’
   when I click on a course I’m redirected to a page that is powered by single.php
   which I use for the blog posts. Therefore I have created a new template single-
   course.php and wrote “test” on it. When I click on a course in the course catalog
   now it is loading my template single-course.php.
 * My question is: which code should be on that template to display a course properly?
 * I have been looking into:
 * [https://github.com/gocodebox/lifterlms/search?p=1&q=do_action](https://github.com/gocodebox/lifterlms/search?p=1&q=do_action)
   
   and [https://github.com/gocodebox/lifterlms/tree/master/templates](https://github.com/gocodebox/lifterlms/tree/master/templates)
 * I tried with the content of content-single-course-before.php and
    content-single-
   course-after.php
 * but it didn’t output anything.
 * The second question is: what means before and after on a template?
 * Third question: Am I doing this incorrectly or am I on the right track.
 * The page I need help with: _[[log in](https://login.wordpress.org/?redirect_to=https%3A%2F%2Fwordpress.org%2Fsupport%2Ftopic%2Ftemplate-code-for-single-course%2F%3Foutput_format%3Dmd&locale=en_US)
   to see the link]_

Viewing 5 replies - 1 through 5 (of 5 total)

 *  [Saurabh](https://wordpress.org/support/users/saurabhshukla/)
 * (@saurabhshukla)
 * [6 years, 9 months ago](https://wordpress.org/support/topic/template-code-for-single-course/#post-11898555)
 * [@tanuki1986](https://wordpress.org/support/users/tanuki1986/) You are essentially
   on the right track. There is no custom template for single course, so a singular
   template from the theme will get loaded as per WordPress template hierarchy. 
   See: [https://developer.wordpress.org/themes/basics/template-hierarchy/](https://developer.wordpress.org/themes/basics/template-hierarchy/)
 * LifterLMS hooks into the post content filter ([https://github.com/gocodebox/lifterlms/blob/09c3353aaeb2a8785868f2cf1cf67c4146e94068/includes/functions/llms-functions-content.php#L86](https://github.com/gocodebox/lifterlms/blob/09c3353aaeb2a8785868f2cf1cf67c4146e94068/includes/functions/llms-functions-content.php#L86))
   and runs conditional code for different post types. This is the code run for 
   courses: [https://github.com/gocodebox/lifterlms/blob/09c3353aaeb2a8785868f2cf1cf67c4146e94068/includes/functions/llms-functions-content.php#L37-L51](https://github.com/gocodebox/lifterlms/blob/09c3353aaeb2a8785868f2cf1cf67c4146e94068/includes/functions/llms-functions-content.php#L37-L51)
 * These lines load the before and after templates [https://github.com/gocodebox/lifterlms/blob/09c3353aaeb2a8785868f2cf1cf67c4146e94068/includes/functions/llms-functions-content.php#L50-L51](https://github.com/gocodebox/lifterlms/blob/09c3353aaeb2a8785868f2cf1cf67c4146e94068/includes/functions/llms-functions-content.php#L50-L51)
   using [https://github.com/gocodebox/lifterlms/blob/master/includes/functions/llms.functions.template.php#L2-L32](https://github.com/gocodebox/lifterlms/blob/master/includes/functions/llms.functions.template.php#L2-L32).
 * So, while the rest of the single course template comes from the theme itself,
   these two templates are loaded into the course content area inside `.entry-content`.
 * The actual components of the single course page are then hooked into either the
   before and after templates’ actions here: [https://github.com/gocodebox/lifterlms/blob/master/includes/llms.template.hooks.php#L24-L39](https://github.com/gocodebox/lifterlms/blob/master/includes/llms.template.hooks.php#L24-L39)
 * All the pieces loaded by these hooks are here: [https://github.com/gocodebox/lifterlms/tree/master/templates/course](https://github.com/gocodebox/lifterlms/tree/master/templates/course)
 * So what you’d want to do instead is copy over this templates/course directory
   to your theme following instructions here [https://lifterlms.com/docs/lifterlms-templates/#template-overrides](https://lifterlms.com/docs/lifterlms-templates/#template-overrides).
   Then you can start modifying each individual piece.
 * Also note that if you use the block editor, these actions get unhooked ([https://github.com/gocodebox/lifterlms-blocks/blob/8f376cceb7d6d310a124e225752efd66ba33a297/includes/class-llms-blocks-migrate.php#L186-L211](https://github.com/gocodebox/lifterlms-blocks/blob/8f376cceb7d6d310a124e225752efd66ba33a297/includes/class-llms-blocks-migrate.php#L186-L211))
   so that the user can lay the components out the way they like instead of the 
   fixed order that the hooks above would do.
 * I hope this helps. Do let me know if you need more information or help with this.
 * Best
 *  Thread Starter [tanuki1986](https://wordpress.org/support/users/tanuki1986/)
 * (@tanuki1986)
 * [6 years, 9 months ago](https://wordpress.org/support/topic/template-code-for-single-course/#post-11901488)
 * Thank you [@saurabhshukla](https://wordpress.org/support/users/saurabhshukla/)
   for taking the time to write such an extensive reply.
    I kept working on this
   since my post and what I end up doing is:
 * – create child-theme/loop-templates/content-course.php and child-theme/loop-templates/
   content-lesson.php
 *     ```
       <?php
       /**
        * Partial template for content in single-course.php
        *
        * @package understrap
        */
   
       // Exit if accessed directly.
       defined( 'ABSPATH' ) || exit;
       ?>
   
       <article <?php post_class(); ?> id="post-<?php the_ID(); ?>">
   
       	<header class="entry-header">
   
       		<?php the_title( '<h1 class="entry-title">', '</h1>' ); ?>
   
       	</header><!-- .entry-header -->
           <div class="container">
               <div class="row">
                   <div class="col-8 mx-auto pb-3">
                       <?php echo get_the_post_thumbnail( $post->ID, 'large' ); ?>
                   </div>
               </div>
           </div>
   
   
       	<div class="entry-content">
   
       		<?php the_content(); ?>
   
       		<?php
       		wp_link_pages(
       			array(
       				'before' => '<div class="page-links">' . __( 'Pages:', 'understrap' ),
       				'after'  => '</div>',
       			)
       		);
       		?>
   
       	</div><!-- .entry-content -->
   
       	<footer class="entry-footer">
   
       		<?php edit_post_link( __( 'Edit', 'understrap' ), '<span class="edit-link">', '</span>' ); ?>
   
       	</footer><!-- .entry-footer -->
   
       </article><!-- #post-## -->
       ```
   
 * – create a single-course.php and single-lesson.php with the code from the understrap
   sidebar right template.
 *     ```
       <?php
       /**
        * Template Name: Right Sidebar Layout
        *
        * This template can be used to override the default template and sidebar setup
        *
        * @package understrap
        */
   
       // Exit if accessed directly.
       defined( 'ABSPATH' ) || exit;
   
       get_header();
       $container = get_theme_mod( 'understrap_container_type' );
       ?>
   
       <div class="wrapper" id="page-wrapper">
   
       	<div class="<?php echo esc_attr( $container ); ?>" id="content">
   
       		<div class="row">
   
       			<div
       				class="<?php if ( is_active_sidebar( 'right-sidebar' ) ) : ?>col-md-8<?php else : ?>col-md-12<?php endif; ?> content-area"
       				id="primary">
   
       				<main class="site-main" id="main" role="main">
   
       					<?php while ( have_posts() ) : the_post(); ?>
   
       						<?php get_template_part( 'loop-templates/content', 'course' ); ?>
   
       						<?php
       						// If comments are open or we have at least one comment, load up the comment template.
       						if ( comments_open() || get_comments_number() ) :
       							comments_template();
       						endif;
       						?>
   
       					<?php endwhile; // end of the loop. ?>
   
       				</main><!-- #main -->
   
       			</div><!-- #primary -->
   
       			<?php get_template_part( 'sidebar-templates/sidebar', 'right' ); ?>
   
       		</div><!-- .row -->
   
       	</div><!-- #content -->
   
       </div><!-- #page-wrapper -->
   
       <?php get_footer(); ?>
       ```
   
 * then in the Guttenberg editor
 * for each course
 * <!– wp:llms/course-information /–>
 * <!– wp:llms/pricing-table /–>
 * <!– wp:llms/course-progress –>
    <div class=”wp-block-llms-course-progress”>[lifterlms_course_progress]
   </div> <!– /wp:llms/course-progress –>
 * <!– wp:llms/course-continue-button –>
    <div class=”wp-block-llms-course-continue-
   button” style=”text-align:center”>[lifterlms_course_continue_button]</div> <!–/
   wp:llms/course-continue-button –>
 * <!– wp:llms/course-syllabus /–>
 * for each lesson
 * <!– wp:llms/lesson-progression /–>
 * <!– wp:llms/lesson-navigation /–>
 * It seems to work, the courses and lessons are showing with the sidebar.
 * There is only something a bit weird about the button “mark as complete” displaying
   below the lesson video.
 * When I’m logged in, the button is showing whether I’m seeing the page as myself,
   a visitor or a student, however, when I logout and view the lesson page the button
   isn’t displaying but there’s a message “No HTML was returned.“
 * I will take the time to dig into your reply as it seems that the solution you
   describe is different from what I have done.
 * Do you think that the way I found is a viable option?
 *  [Thomas Patrick Levy](https://wordpress.org/support/users/thomasplevy/)
 * (@thomasplevy)
 * [6 years, 8 months ago](https://wordpress.org/support/topic/template-code-for-single-course/#post-12010313)
 * > When I’m logged in, the button is showing whether I’m seeing the page as myself,
   > a visitor or a student, however, when I logout and view the lesson page the
   > button isn’t displaying but there’s a message “No HTML was returned.“
 * This is a known bug that can be resolved by setting the visibility settings of
   the mark complete button to be “Enrolled Student Only”
 * The block outputs that “No HTML was returned” message when the template function
   for the the button doesn’t show anything (which happens when the user is logged
   out). This only happens on *free* lessons so and it’s easy to workaround so we
   haven’t prioritized a fix yet.
 * Any other questions let me know,
 *  Thread Starter [tanuki1986](https://wordpress.org/support/users/tanuki1986/)
 * (@tanuki1986)
 * [6 years, 7 months ago](https://wordpress.org/support/topic/template-code-for-single-course/#post-12025275)
 * Thank you [@thomasplevy](https://wordpress.org/support/users/thomasplevy/) for
   your reply.
    As a matter of fact, yes I do have another question. I still have
   the problem that I posted [here](https://github.com/gocodebox/lifterlms/issues/922)
 * The website is hosted at this [IP](http://104.248.255.4/)
 * Someone on [stackoverflow](https://stackoverflow.com/questions/57869700/how-to-identify-and-de-enque-conflicting-scripts-on-wordpress)
   advised getting to know the dev tools to find where the issue is coming from.
   
   I followed a basic course on udemy but still don’t know how to proceed to find
   how to solve this.
 * I can see on your github that someone was assigned to the case, so thank you 
   and I hope to have a solution soon or some kind of direction to follow.
 *  [Thomas Patrick Levy](https://wordpress.org/support/users/thomasplevy/)
 * (@thomasplevy)
 * [6 years, 7 months ago](https://wordpress.org/support/topic/template-code-for-single-course/#post-12029233)
 * [@tanuki1986](https://wordpress.org/support/users/tanuki1986/),
 * As you can see it is currently assigned but it’s in our “Future” milestone which
   means that we don’t currently have an ETA on when we’ll actually be working on
   it.
 * We’re treating it as a “minor” issue and I know that’s a bummer if it’s affecting
   you personally but we only have so much internal human-resource power and we 
   focus our time on the things that have the highest immediate impact for the largest
   number of users.
 * My last comment notes that we’re looking at maybe q1 2020 for actually working
   on this. I’m sorry…

Viewing 5 replies - 1 through 5 (of 5 total)

The topic ‘Template code for single course’ is closed to new replies.

 * ![](https://ps.w.org/lifterlms/assets/icon.svg?rev=2034507)
 * [LifterLMS - WP LMS for eLearning, Online Courses, & Quizzes](https://wordpress.org/plugins/lifterlms/)
 * [Frequently Asked Questions](https://wordpress.org/plugins/lifterlms/#faq)
 * [Support Threads](https://wordpress.org/support/plugin/lifterlms/)
 * [Active Topics](https://wordpress.org/support/plugin/lifterlms/active/)
 * [Unresolved Topics](https://wordpress.org/support/plugin/lifterlms/unresolved/)
 * [Reviews](https://wordpress.org/support/plugin/lifterlms/reviews/)

 * 5 replies
 * 3 participants
 * Last reply from: [Thomas Patrick Levy](https://wordpress.org/support/users/thomasplevy/)
 * Last activity: [6 years, 7 months ago](https://wordpress.org/support/topic/template-code-for-single-course/#post-12029233)
 * Status: resolved