• Resolved tanuki1986

    (@tanuki1986)


    Hello,
    for learning purpose I’m trying to integrate Lifterlms with 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
    and
    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 to see the link]

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

    (@saurabhshukla)

    @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.www.ads-software.com/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) 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

    These lines load the before and after templates 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.

    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

    All the pieces loaded by these hooks are here: 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. 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) 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

    (@tanuki1986)

    Thank you @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?

    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

    (@tanuki1986)

    Thank you @thomasplevy for your reply.
    As a matter of fact, yes I do have another question.
    I still have the problem that I posted here

    The website is hosted at this IP

    Someone on stackoverflow 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.

    @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.