PluginProbe
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses / 4.4.8
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses v4.4.8
4.4.8 4.4.7 4.4.6 4.4.5 4.4.4 4.4.3 4.4.2 4.4.1 4.4.0 4.3.9.1 4.3.9 4.3.8 4.3.7 4.1.6.9 4.1.6.9.1 4.1.6.9.2 4.1.6.9.3 4.1.6.9.4 4.1.7 4.1.7.1 4.1.7.2 4.1.7.3 4.1.7.3.1 4.1.7.3.2 4.2.0 All 139 releases
← All changes | inc/lp-template-hooks.php +520 -520 4.3.94.4.8 View file →
@@ -1,520 +1,520 @@
1 -<?php
2 -/**
3 - * Build courses content
4 - */
5 -
6 -/*****************************************/
7 -/** */
8 -/** DOCUMENTATION */
9 -/** */
10 -/*****************************************/
11 -
12 -/**
13 - * Core template classes: LP_Template_General, LP_Template_Profile, LP_Template_Course.
14 - *
15 - * + Get instance of a template: LearnPress::instance()->template( TYPE ) e.g: LearnPress::instance()->template( 'course' )
16 - * + LearnPress::instance()->template( TYPE )->func(CALLBACK) => hook to an action with function CALLBACK of TYPE class
17 - * + LearnPress::instance()->template( TYPE )->callback( TEMPLATE ) => hook to an action to c
18 - */
19 -
20 -
21 -use LearnPress\Helpers\Template;
22 -use LearnPress\Models\CourseModel;
23 -use LearnPress\Models\UserItems\UserCourseModel;
24 -use LearnPress\Models\UserModel;
25 -use LearnPress\TemplateHooks\Course\ListCoursesTemplate;
26 -use LearnPress\TemplateHooks\Course\SingleCourseTemplate;
27 -use LearnPress\TemplateHooks\UserItem\UserCourseTemplate;
28 -
29 -defined( 'ABSPATH' ) || exit();
30 -
31 -/**
32 - * New functions since 3.0.0
33 - */
34 -
35 -/**
36 - * Header and Footer
37 - *
38 - * @see LP_Template_General::template_header()
39 - * @see LP_Template_General::template_footer()
40 - */
41 -add_action( 'learn-press/template-header', LearnPress::instance()->template( 'general' )->func( 'template_header' ) );
42 -add_action( 'learn-press/template-footer', LearnPress::instance()->template( 'general' )->func( 'template_footer' ) );
43 -
44 -add_action(
45 - 'learn-press/before-main-content',
46 - LearnPress::instance()->template( 'general' )->text( '<div class="lp-archive-courses">', 'lp-archive-courses-open' ),
47 - - 100
48 -);
49 -/**
50 - * Course breadcrumb
51 - *
52 - * @see LP_Template_General::breadcrumb()
53 - */
54 -add_action( 'learn-press/before-main-content', LearnPress::instance()->template( 'general' )->func( 'breadcrumb' ) );
55 -
56 -add_action(
57 - 'learn-press/after-main-content',
58 - LearnPress::instance()->template( 'general' )->text( '</div>', 'lp-archive-courses-close' ),
59 - 100
60 -);
61 -
62 -
63 -/**
64 - * Course buttons
65 - * old hook: learn-press/course-buttons
66 - */
67 -add_action(
68 - 'learn-press/course-buttons',
69 - function () {
70 - $singleCourseTemplate = SingleCourseTemplate::instance();
71 - $course = CourseModel::find( get_the_ID(), true );
72 - $user = UserModel::find( get_current_user_id(), true );
73 - $userCourseModel = UserCourseModel::find( get_current_user_id(), get_the_ID(), true );
74 - $userCourseTemplate = UserCourseTemplate::instance();
75 -
76 - // Button enroll
77 - echo $singleCourseTemplate->html_btn_enroll_course( $course, $user );
78 - // Button purchase
79 - echo $singleCourseTemplate->html_btn_purchase_course( $course, $user );
80 - // Button external
81 - echo '<div style="display:flex;flex-direction:column">';
82 - echo $singleCourseTemplate->html_btn_external( $course, $user );
83 - echo '</div>';
84 - if ( $userCourseModel instanceof UserCourseModel ) {
85 - // Button retake
86 - echo $userCourseTemplate->html_btn_retake( $userCourseModel );
87 - // Button continue
88 - echo '<div style="margin-bottom: 10px">';
89 - echo $userCourseTemplate->html_btn_continue( $userCourseModel );
90 - echo '</div>';
91 - // Button finish
92 - echo $userCourseTemplate->html_btn_finish( $userCourseModel );
93 - }
94 - },
95 - 5
96 -);
97 -
98 -/** BEGIN: Archive course */
99 -add_action( 'learn-press/before-courses-loop', LearnPress::instance()->template( 'course' )->func( 'courses_top_bar' ), 10 );
100 -
101 -/** BEGIN: Archive course loop item */
102 -add_action(
103 - 'learn-press/courses-loop-item-title',
104 - LearnPress::instance()->template( 'course' )->callback( 'loop/course/title.php' ),
105 - 20
106 -);
107 -
108 -/** END: Archive course loop item */
109 -
110 -/** Archive course pagination */
111 -if ( LP_Settings::theme_no_support_load_courses_ajax() ) {
112 - add_action(
113 - 'learn-press/after-courses-loop',
114 - LearnPress::instance()->template( 'course' )->callback( 'loop/course/pagination.php' )
115 - );
116 -} else {
117 - add_action(
118 - 'learn-press/after-courses-loop',
119 - function () {
120 - $listCourseTemplate = ListCoursesTemplate::instance();
121 - $pagination_type = LP_Settings::get_option( 'course_pagination_type', 'number' );
122 - $enableAjaxLoadCourses = LP_Settings_Courses::is_ajax_load_courses();
123 - $enableNoLoadAjaxFirst = LP_Settings_Courses::is_no_load_ajax_first_courses();
124 - if ( $enableAjaxLoadCourses && $pagination_type !== 'number' ) {
125 - if ( $enableNoLoadAjaxFirst ) {
126 - if ( 'load-more' === $pagination_type ) {
127 - echo $listCourseTemplate->html_pagination_load_more();
128 - } elseif ( 'infinite' === $pagination_type ) {
129 - echo $listCourseTemplate->html_pagination_infinite();
130 - }
131 - }
132 -
133 - return;
134 - }
135 -
136 - if ( ! $enableAjaxLoadCourses || ( $enableAjaxLoadCourses && $enableNoLoadAjaxFirst ) ) {
137 - Template::instance()->get_frontend_template( 'loop/course/pagination.php' );
138 - }
139 - },
140 - 10
141 - );
142 -}
143 -/** END: Archive course */
144 -
145 -/** BEGIN: Main content of single course */
146 -
147 -
148 -// Sidebar and content
149 -add_action( 'learn-press/single-course-summary', LearnPress::instance()->template( 'course' )->callback( 'single-course/content' ), 10 );
150 -
151 -// Content
152 -add_action(
153 - 'learn-press/course-content-summary',
154 - LearnPress::instance()->template( 'course' )->text(
155 - '<div class="course-detail-info"> <div class="lp-content-area"> <div class="course-info-left">',
156 - 'course-info-left-open'
157 - ),
158 - 10
159 -);
160 -add_action(
161 - 'learn-press/course-content-summary',
162 - LearnPress::instance()->template( 'course' )->callback( 'single-course/meta-primary' ),
163 - 10
164 -);
165 -add_action( 'learn-press/course-content-summary', LearnPress::instance()->template( 'course' )->callback( 'single-course/title' ), 10 );
166 -add_action(
167 - 'learn-press/course-content-summary',
168 - LearnPress::instance()->template( 'course' )->callback( 'single-course/meta-secondary' ),
169 - 10
170 -);
171 -add_action(
172 - 'learn-press/course-content-summary',
173 - LearnPress::instance()->template( 'course' )->text( ' </div> </div> </div>', 'course-info-left-close' ),
174 - 15
175 -);
176 -
177 -add_action(
178 - 'learn-press/course-content-summary',
179 - LearnPress::instance()->template( 'course' )->text( '<div class="lp-entry-content lp-content-area">', 'lp-entry-content-open' ),
180 - 30
181 -);
182 -add_action(
183 - 'learn-press/course-content-summary',
184 - LearnPress::instance()->template( 'course' )->text( '<div class="entry-content-left">', 'entry-content-left-open' ),
185 - 35
186 -);
187 -//add_action(
188 -// 'learn-press/course-content-summary',
189 -// LearnPress::instance()->template( 'course' )->func( 'course_extra_boxes_position_control' ),
190 -// 39
191 -//);
192 -//add_action( 'learn-press/course-content-summary', LearnPress::instance()->template( 'course' )->func( 'course_extra_boxes' ), 40 );
193 -// add_action( 'learn-press/course-content-summary', LearnPress::instance()->template( 'course' )->callback( 'single-course/progress' ), 40 );
194 -// add_action( 'learn-press/course-content-summary', LearnPress::instance()->template( 'course' )->func( 'remaining_time' ), 50 );
195 -add_action(
196 - 'learn-press/course-content-summary',
197 - LearnPress::instance()->template( 'course' )->callback( 'single-course/tabs/tabs' ),
198 - 60
199 -);
200 -// appear at bottom after enrolled
201 -add_action( 'learn-press/course-content-summary', LearnPress::instance()->template( 'course' )->func( 'course_extra_boxes' ), 70 );
202 -
203 -add_action( 'learn-press/course-content-summary', LearnPress::instance()->template( 'course' )->func( 'course_comment_template' ), 75 );
204 -
205 -add_action(
206 - 'learn-press/course-content-summary',
207 - LearnPress::instance()->template( 'course' )->text( '<!-- end entry content left --> </div>', 'entry-content-left-close' ),
208 - 80
209 -);
210 -
211 -add_action( 'learn-press/course-content-summary', LearnPress::instance()->template( 'course' )->callback( 'single-course/sidebar' ), 85 );
212 -
213 -add_action(
214 - 'learn-press/course-content-summary',
215 - LearnPress::instance()->template( 'course' )->text( ' </div>', 'lp-entry-content-close' ),
216 - 100
217 -);
218 -
219 -// Meta
220 -add_action(
221 - 'learn-press/course-meta-primary-left',
222 - LearnPress::instance()->template( 'course' )->callback( 'single-course/meta/instructor' ),
223 - 10
224 -);
225 -add_action(
226 - 'learn-press/course-meta-primary-left',
227 - LearnPress::instance()->template( 'course' )->callback( 'single-course/meta/category' ),
228 - 20
229 -);
230 -
231 -add_action(
232 - 'learn-press/course-meta-secondary-left',
233 - LearnPress::instance()->template( 'course' )->callback( 'single-course/meta/duration' ),
234 - 10
235 -);
236 -add_action(
237 - 'learn-press/course-meta-secondary-left',
238 - LearnPress::instance()->template( 'course' )->callback( 'single-course/meta/level' ),
239 - 20
240 -);
241 -/**
242 - * @see LP_Template_Course::count_object()
243 - */
244 -add_action( 'learn-press/course-meta-secondary-left', LearnPress::instance()->template( 'course' )->func( 'count_object' ), 20 );
245 -
246 -
247 -// Sidebar content
248 -/**
249 - * @see LP_Template_Course::course_sidebar_preview()
250 - * @see LP_Template_Course::course_extra_key_features()
251 - * @see LP_Template_Course::course_extra_requirements()
252 - */
253 -add_action( 'learn-press/course-summary-sidebar', LearnPress::instance()->template( 'course' )->func( 'course_sidebar_preview' ), 10 );
254 -add_action( 'learn-press/course-summary-sidebar', LearnPress::instance()->template( 'course' )->func( 'course_featured_review' ), 20 );
255 -// add_action( 'learn-press/course-summary-sidebar', LearnPress::instance()->template( 'course' )->func( 'course_extra_key_features' ), 20 );
256 -// add_action( 'learn-press/course-summary-sidebar', LearnPress::instance()->template( 'course' )->func( 'course_extra_requirements' ), 30 );
257 -
258 -/** END: Main content of single course */
259 -
260 -/** BEGIN: Course section */
261 -add_action(
262 - 'learn-press/section-summary',
263 - LearnPress::instance()->template( 'course' )->callback( 'single-course/section/title.php', array( 'section' ) ),
264 - 10
265 -);
266 -add_action(
267 - 'learn-press/section-summary',
268 - LearnPress::instance()->template( 'course' )->callback( 'single-course/section/content.php', array( 'section' ) ),
269 - 20
270 -);
271 -
272 -add_action(
273 - 'learn-press/after-section-loop-item-title',
274 - LearnPress::instance()->template( 'course' )->callback(
275 - 'single-course/section/item-meta.php',
276 - array(
277 - 'item',
278 - 'section',
279 - )
280 - ),
281 - 10,
282 - 2
283 -);
284 -
285 -/** BEGIN: Quiz item */
286 -
287 -/**
288 - * @see LP_Template_Course::quiz_meta_questions()
289 - * @see LP_Template_Course::item_meta_duration()
290 - * @see LP_Template_Course::quiz_meta_final()
291 - */
292 -add_action(
293 - 'learn-press/course-section-item/before-lp_quiz-meta',
294 - LearnPress::instance()->template( 'course' )->func( 'quiz_meta_questions' ),
295 - 10
296 -);
297 -add_action(
298 - 'learn-press/course-section-item/before-lp_quiz-meta',
299 - LearnPress::instance()->template( 'course' )->func( 'item_meta_duration' ),
300 - 20
301 -);
302 -add_action(
303 - 'learn-press/course-section-item/before-lp_quiz-meta',
304 - LearnPress::instance()->template( 'course' )->func( 'quiz_meta_final' ),
305 - 30
306 -);
307 -/** END: Quiz item */
308 -
309 -/** BEGIN: Lesson item */
310 -add_action(
311 - 'learn-press/course-section-item/before-lp_lesson-meta',
312 - LearnPress::instance()->template( 'course' )->func( 'item_meta_duration' ),
313 - 10
314 -);
315 -/** END: Lesson item */
316 -
317 -/** END: Course section */
318 -
319 -/** BEGIN: Popup */
320 -/**
321 - * @see single-button-toggle-sidebar
322 - */
323 -add_action(
324 - 'learn-press/single-button-toggle-sidebar',
325 - LearnPress::instance()->template( 'course' )->text( '<input type="checkbox" id="sidebar-toggle" title="Show/Hide curriculum" />', 'single-button-toggle-sidebar' ),
326 - 5
327 -);
328 -
329 -/**
330 - * @see LP_Template_Course::popup_header()
331 - * @see LP_Template_Course::popup_sidebar()
332 - * @see LP_Template_Course::popup_content()
333 - * @see LP_Template_Course::popup_footer()
334 - */
335 -add_action( 'learn-press/single-item-summary', LearnPress::instance()->template( 'course' )->func( 'popup_header' ), 10 );
336 -add_action( 'learn-press/single-item-summary', LearnPress::instance()->template( 'course' )->func( 'popup_sidebar' ), 20 );
337 -add_action( 'learn-press/single-item-summary', LearnPress::instance()->template( 'course' )->func( 'popup_content' ), 30 );
338 -add_action( 'learn-press/single-item-summary', LearnPress::instance()->template( 'course' )->func( 'popup_footer' ), 40 );
339 -
340 -/**
341 - * @see LP_Template_Course::popup_footer_nav()
342 - */
343 -add_action( 'learn-press/popup-footer', LearnPress::instance()->template( 'course' )->func( 'popup_footer_nav' ), 10 );
344 -/** END: Popup */
345 -
346 -/** BEGIN: Popup quiz */
347 -/**
348 - * @see LP_Template_Course::course_finish_button()
349 - */
350 -//add_action( 'learn-press/quiz-buttons', LearnPress::instance()->template( 'course' )->func( 'course_finish_button' ), 10 );
351 -/** END: Popup quiz */
352 -
353 -/** BEGIN: Popup lesson */
354 -
355 -/**
356 - * @see LP_Template_Course::item_lesson_title()
357 - * @see LP_Template_Course::item_lesson_content()
358 - * @see LP_Template_Course::item_lesson_complete_button()
359 - */
360 -add_action(
361 - 'learn-press/before-content-item-summary/lp_lesson',
362 - LearnPress::instance()->template( 'course' )->func( 'item_lesson_title' ),
363 - 10
364 -);
365 -add_action(
366 - 'learn-press/content-item-summary/lp_lesson',
367 - LearnPress::instance()->template( 'course' )->func( 'item_lesson_content' ),
368 - 10
369 -);
370 -add_action(
371 - 'learn-press/after-content-item-summary/lp_lesson',
372 - LearnPress::instance()->template( 'course' )->func( 'item_lesson_material' ),
373 - 10
374 -);
375 -add_action(
376 - 'learn-press/after-content-item-summary/lp_lesson',
377 - LearnPress::instance()->template( 'course' )->func( 'item_lesson_complete_button' ),
378 - 11
379 -);
380 -add_action(
381 - 'learn-press/after-content-item-summary/lp_lesson',
382 - function () {
383 - $userCourseModel = UserCourseModel::find( get_current_user_id(), get_the_ID(), true );
384 - $userCourseTemplate = UserCourseTemplate::instance();
385 -
386 - if ( $userCourseModel instanceof UserCourseModel ) {
387 - echo $userCourseTemplate->html_btn_finish( $userCourseModel );
388 - }
389 - },
390 - 15
391 -);
392 -/** END: Popup lesson */
393 -
394 -/**
395 - * @see LP_Template_Course::course_item_content()
396 - */
397 -add_action( 'learn-press/course-item-content', LearnPress::instance()->template( 'course' )->func( 'course_item_content' ), 5 );
398 -
399 -/** BEGIN: User profile */
400 -
401 -/**
402 - * @see LP_Template_Profile::header()
403 - * @see LP_Template_Profile::tabs()
404 - * @see LP_Template_Profile::content()
405 - */
406 -//add_action( 'learn-press/before-user-profile', LearnPress::instance()->template( 'profile' )->func( 'header' ), 10 );
407 -
408 -add_action( 'learn-press/user-profile', LearnPress::instance()->template( 'profile' )->func( 'sidebar' ), 10 );
409 -add_action( 'learn-press/user-profile', LearnPress::instance()->template( 'profile' )->func( 'content' ), 20 );
410 -
411 -add_action( 'learn-press/user-profile/private', LearnPress::instance()->template( 'profile' )->func( 'sidebar' ), 10 );
412 -
413 -add_action( 'learn-press/user-profile-account', LearnPress::instance()->template( 'profile' )->text( ' <div class="lp-profile-left">', 'user-profile-account-left-open' ), 5 );
414 -add_action( 'learn-press/user-profile-account', LearnPress::instance()->template( 'profile' )->func( 'avatar' ), 10 );
415 -//add_action( 'learn-press/user-profile-account', LearnPress::instance()->template( 'profile' )->func( 'socials' ), 10 );
416 -add_action( 'learn-press/user-profile-account', LearnPress::instance()->template( 'profile' )->text( ' </div>', 'user-profile-account-left-close' ), 15 );
417 -add_action( 'learn-press/user-profile-account', LearnPress::instance()->template( 'profile' )->func( 'header' ), 20 );
418 -
419 -add_action( 'learn-press/user-profile-tabs', LearnPress::instance()->template( 'profile' )->func( 'tabs' ), 10 );
420 -
421 -/**
422 - * @deprecated 4.2.6.2
423 - */
424 -add_action( 'learn-press/profile/orders', LearnPress::instance()->template( 'profile' )->callback( 'profile/tabs/orders/list.php' ), 10 );
425 -/**
426 - * @deprecated 4.2.6.2
427 - */
428 -add_action(
429 - 'learn-press/profile/orders',
430 - LearnPress::instance()->template( 'profile' )->callback( 'profile/tabs/orders/recover-order.php' ),
431 - 20
432 -);
433 -
434 -// Comment from v4.3.2.6, hook not using from v4.2.6.4
435 -//add_action( 'learn-press/profile/order-details', LearnPress::instance()->template( 'profile' )->func( 'order_details' ), 5 );
436 -//add_action( 'learn-press/profile/order-details', LearnPress::instance()->template( 'profile' )->func( 'order_recover' ), 10 );
437 -//add_action( 'learn-press/profile/order-details', LearnPress::instance()->template( 'profile' )->func( 'order_message' ), 15 );
438 -
439 -/**
440 - * @see LP_Template_Profile::dashboard_logged_in()
441 - * @deprecated 4.1.6
442 - */
443 -// add_action( 'learn-press/profile/before-dashboard', LearnPress::instance()->template( 'profile' )->func( 'dashboard_statistic' ), 10 );
444 -/*add_action(
445 - 'learn-press/profile/dashboard-summary',
446 - LearnPress::instance()->template( 'profile' )->func( 'dashboard_featured_courses' ),
447 - 20
448 -);*/
449 -/*add_action(
450 - 'learn-press/profile/dashboard-summary',
451 - LearnPress::instance()->template( 'profile' )->func( 'dashboard_latest_courses' ),
452 - 30
453 -);*/
454 -
455 -/**
456 - * @see LP_Template_Profile::dashboard_not_logged_in()
457 - * @see LP_Template_Profile::login_form()
458 - * @see LP_Template_Profile::register_form()
459 - */
460 -add_action( 'learn-press/user-profile', LearnPress::instance()->template( 'profile' )->func( 'dashboard_not_logged_in' ), 5 );
461 -add_action( 'learn-press/user-profile', LearnPress::instance()->template( 'profile' )->func( 'login_form' ), 10 );
462 -add_action( 'learn-press/user-profile', LearnPress::instance()->template( 'profile' )->func( 'register_form' ), 15 );
463 -
464 -/** BEGIN: Checkout page */
465 -/**
466 - * @see LP_Template_Checkout::review_order()
467 - */
468 -add_action( 'learn-press/before-checkout-form', LearnPress::instance()->template( 'checkout' )->func( 'review_order' ), 10 );
469 -add_action( 'learn-press/after-checkout-form', LearnPress::instance()->template( 'checkout' )->func( 'account_logged_in' ), 20 );
470 -add_action( 'learn-press/after-checkout-form', LearnPress::instance()->template( 'checkout' )->func( 'account_register' ), 30 );
471 -add_action( 'learn-press/after-checkout-form', LearnPress::instance()->template( 'checkout' )->func( 'account_login' ), 40 );
472 -add_action( 'learn-press/after-checkout-form', LearnPress::instance()->template( 'checkout' )->func( 'guest_checkout' ), 50 );
473 -add_action( 'learn-press/after-checkout-form', LearnPress::instance()->template( 'checkout' )->func( 'order_comment' ), 60 );
474 -add_action( 'learn-press/after-checkout-form', LearnPress::instance()->template( 'checkout' )->func( 'payment' ), 70 );
475 -add_action( 'learn-press/after-checkout-form', LearnPress::instance()->template( 'checkout' )->func( 'terms' ), 80 );
476 -
477 -// ******************************************************************************************************************* //
478 -
479 -//add_action( 'learn-press/content-item-summary-class', 'learn_press_content_item_summary_classes', 15 );
480 -add_action(
481 - 'learn-press/before-content-item-summary/lp_quiz',
482 - LearnPress::instance()->template( 'course' )->callback( 'content-quiz/title.php' ),
483 - 5
484 -);
485 -add_action( 'learn-press/content-item-summary/lp_quiz', LearnPress::instance()->template( 'course' )->callback( 'content-quiz/js' ), 25 );
486 -// add_action( 'learn-press/parse-course-item', 'learn_press_control_displaying_course_item', 5 ); // comment by tungnx
487 -//add_action( 'learn-press/after-single-course', 'learn_press_single_course_args', 5 );
488 -add_filter( 'document_title_parts', 'learn_press_single_document_title_parts', 5 );
489 -
490 -add_filter( 'body_class', 'learn_press_body_classes', 10 );
491 -add_filter( 'post_class', 'learn_press_course_class', 15, 3 );
492 -//add_action( 'wp_head', 'learn_press_single_course_args', 5 );
493 -add_action(
494 - 'learn-press/before-checkout-order-review',
495 - LearnPress::instance()->template( 'course' )->callback( 'checkout/form-logged-in.php' ),
496 - 10
497 -);
498 -
499 -add_filter( 'excerpt_length', 'learn_press_custom_excerpt_length', 999 );
500 -// add_filter( 'learn_press_get_template', LearnPress::instance()->template( 'general' )->func( 'filter_block_content_template' ), 10, 5 );
501 -
502 -/**
503 - * Filter to hide the section if there is no item.
504 - *
505 - * @param bool $visible
506 - * @param LP_Course_Section $section
507 - * @param LP_Course $course
508 - *
509 - * @return bool
510 - * @since 4.0.0
511 - */
512 -function learn_press_filter_section_visible( $visible, $section, $course ) {
513 - if ( ! $section->get_items() ) {
514 - $visible = false;
515 - }
516 -
517 - return $visible;
518 -}
519 -
520 -add_filter( 'learn-press/section-visible', 'learn_press_filter_section_visible', 10, 3 );
1 +<?php
2 +/**
3 + * Build courses content
4 + */
5 +
6 +/*****************************************/
7 +/** */
8 +/** DOCUMENTATION */
9 +/** */
10 +/*****************************************/
11 +
12 +/**
13 + * Core template classes: LP_Template_General, LP_Template_Profile, LP_Template_Course.
14 + *
15 + * + Get instance of a template: LearnPress::instance()->template( TYPE ) e.g: LearnPress::instance()->template( 'course' )
16 + * + LearnPress::instance()->template( TYPE )->func(CALLBACK) => hook to an action with function CALLBACK of TYPE class
17 + * + LearnPress::instance()->template( TYPE )->callback( TEMPLATE ) => hook to an action to c
18 + */
19 +
20 +
21 +use LearnPress\Helpers\Template;
22 +use LearnPress\Models\CourseModel;
23 +use LearnPress\Models\UserItems\UserCourseModel;
24 +use LearnPress\Models\UserModel;
25 +use LearnPress\TemplateHooks\Course\ListCoursesTemplate;
26 +use LearnPress\TemplateHooks\Course\SingleCourseTemplate;
27 +use LearnPress\TemplateHooks\UserItem\UserCourseTemplate;
28 +
29 +defined( 'ABSPATH' ) || exit();
30 +
31 +/**
32 + * New functions since 3.0.0
33 + */
34 +
35 +/**
36 + * Header and Footer
37 + *
38 + * @see LP_Template_General::template_header()
39 + * @see LP_Template_General::template_footer()
40 + */
41 +add_action( 'learn-press/template-header', LearnPress::instance()->template( 'general' )->func( 'template_header' ) );
42 +add_action( 'learn-press/template-footer', LearnPress::instance()->template( 'general' )->func( 'template_footer' ) );
43 +
44 +add_action(
45 + 'learn-press/before-main-content',
46 + LearnPress::instance()->template( 'general' )->text( '<div class="lp-archive-courses">', 'lp-archive-courses-open' ),
47 + - 100
48 +);
49 +/**
50 + * Course breadcrumb
51 + *
52 + * @see LP_Template_General::breadcrumb()
53 + */
54 +add_action( 'learn-press/before-main-content', LearnPress::instance()->template( 'general' )->func( 'breadcrumb' ) );
55 +
56 +add_action(
57 + 'learn-press/after-main-content',
58 + LearnPress::instance()->template( 'general' )->text( '</div>', 'lp-archive-courses-close' ),
59 + 100
60 +);
61 +
62 +
63 +/**
64 + * Course buttons
65 + * old hook: learn-press/course-buttons
66 + */
67 +add_action(
68 + 'learn-press/course-buttons',
69 + function () {
70 + $singleCourseTemplate = SingleCourseTemplate::instance();
71 + $course = CourseModel::find( get_the_ID(), true );
72 + $user = UserModel::find( get_current_user_id(), true );
73 + $userCourseModel = UserCourseModel::find( get_current_user_id(), get_the_ID(), true );
74 + $userCourseTemplate = UserCourseTemplate::instance();
75 +
76 + // Button enroll
77 + echo $singleCourseTemplate->html_btn_enroll_course( $course, $user );
78 + // Button purchase
79 + echo $singleCourseTemplate->html_btn_purchase_course( $course, $user );
80 + // Button external
81 + echo '<div style="display:flex;flex-direction:column">';
82 + echo $singleCourseTemplate->html_btn_external( $course, $user );
83 + echo '</div>';
84 + if ( $userCourseModel instanceof UserCourseModel ) {
85 + // Button retake
86 + echo $userCourseTemplate->html_btn_retake( $userCourseModel );
87 + // Button continue
88 + echo '<div style="margin-bottom: 10px">';
89 + echo $userCourseTemplate->html_btn_continue( $userCourseModel );
90 + echo '</div>';
91 + // Button finish
92 + echo $userCourseTemplate->html_btn_finish( $userCourseModel );
93 + }
94 + },
95 + 5
96 +);
97 +
98 +/** BEGIN: Archive course */
99 +add_action( 'learn-press/before-courses-loop', LearnPress::instance()->template( 'course' )->func( 'courses_top_bar' ), 10 );
100 +
101 +/** BEGIN: Archive course loop item */
102 +add_action(
103 + 'learn-press/courses-loop-item-title',
104 + LearnPress::instance()->template( 'course' )->callback( 'loop/course/title.php' ),
105 + 20
106 +);
107 +
108 +/** END: Archive course loop item */
109 +
110 +/** Archive course pagination */
111 +if ( LP_Settings::theme_no_support_load_courses_ajax() ) {
112 + add_action(
113 + 'learn-press/after-courses-loop',
114 + LearnPress::instance()->template( 'course' )->callback( 'loop/course/pagination.php' )
115 + );
116 +} else {
117 + add_action(
118 + 'learn-press/after-courses-loop',
119 + function () {
120 + $listCourseTemplate = ListCoursesTemplate::instance();
121 + $pagination_type = LP_Settings::get_option( 'course_pagination_type', 'number' );
122 + $enableAjaxLoadCourses = LP_Settings_Courses::is_ajax_load_courses();
123 + $enableNoLoadAjaxFirst = LP_Settings_Courses::is_no_load_ajax_first_courses();
124 + if ( $enableAjaxLoadCourses && $pagination_type !== 'number' ) {
125 + if ( $enableNoLoadAjaxFirst ) {
126 + if ( 'load-more' === $pagination_type ) {
127 + echo $listCourseTemplate->html_pagination_load_more();
128 + } elseif ( 'infinite' === $pagination_type ) {
129 + echo $listCourseTemplate->html_pagination_infinite();
130 + }
131 + }
132 +
133 + return;
134 + }
135 +
136 + if ( ! $enableAjaxLoadCourses || ( $enableAjaxLoadCourses && $enableNoLoadAjaxFirst ) ) {
137 + Template::instance()->get_frontend_template( 'loop/course/pagination.php' );
138 + }
139 + },
140 + 10
141 + );
142 +}
143 +/** END: Archive course */
144 +
145 +/** BEGIN: Main content of single course */
146 +
147 +
148 +// Sidebar and content
149 +add_action( 'learn-press/single-course-summary', LearnPress::instance()->template( 'course' )->callback( 'single-course/content' ), 10 );
150 +
151 +// Content
152 +add_action(
153 + 'learn-press/course-content-summary',
154 + LearnPress::instance()->template( 'course' )->text(
155 + '<div class="course-detail-info"> <div class="lp-content-area"> <div class="course-info-left">',
156 + 'course-info-left-open'
157 + ),
158 + 10
159 +);
160 +add_action(
161 + 'learn-press/course-content-summary',
162 + LearnPress::instance()->template( 'course' )->callback( 'single-course/meta-primary' ),
163 + 10
164 +);
165 +add_action( 'learn-press/course-content-summary', LearnPress::instance()->template( 'course' )->callback( 'single-course/title' ), 10 );
166 +add_action(
167 + 'learn-press/course-content-summary',
168 + LearnPress::instance()->template( 'course' )->callback( 'single-course/meta-secondary' ),
169 + 10
170 +);
171 +add_action(
172 + 'learn-press/course-content-summary',
173 + LearnPress::instance()->template( 'course' )->text( ' </div> </div> </div>', 'course-info-left-close' ),
174 + 15
175 +);
176 +
177 +add_action(
178 + 'learn-press/course-content-summary',
179 + LearnPress::instance()->template( 'course' )->text( '<div class="lp-entry-content lp-content-area">', 'lp-entry-content-open' ),
180 + 30
181 +);
182 +add_action(
183 + 'learn-press/course-content-summary',
184 + LearnPress::instance()->template( 'course' )->text( '<div class="entry-content-left">', 'entry-content-left-open' ),
185 + 35
186 +);
187 +//add_action(
188 +// 'learn-press/course-content-summary',
189 +// LearnPress::instance()->template( 'course' )->func( 'course_extra_boxes_position_control' ),
190 +// 39
191 +//);
192 +//add_action( 'learn-press/course-content-summary', LearnPress::instance()->template( 'course' )->func( 'course_extra_boxes' ), 40 );
193 +// add_action( 'learn-press/course-content-summary', LearnPress::instance()->template( 'course' )->callback( 'single-course/progress' ), 40 );
194 +// add_action( 'learn-press/course-content-summary', LearnPress::instance()->template( 'course' )->func( 'remaining_time' ), 50 );
195 +add_action(
196 + 'learn-press/course-content-summary',
197 + LearnPress::instance()->template( 'course' )->callback( 'single-course/tabs/tabs' ),
198 + 60
199 +);
200 +// appear at bottom after enrolled
201 +add_action( 'learn-press/course-content-summary', LearnPress::instance()->template( 'course' )->func( 'course_extra_boxes' ), 70 );
202 +
203 +add_action( 'learn-press/course-content-summary', LearnPress::instance()->template( 'course' )->func( 'course_comment_template' ), 75 );
204 +
205 +add_action(
206 + 'learn-press/course-content-summary',
207 + LearnPress::instance()->template( 'course' )->text( '<!-- end entry content left --> </div>', 'entry-content-left-close' ),
208 + 80
209 +);
210 +
211 +add_action( 'learn-press/course-content-summary', LearnPress::instance()->template( 'course' )->callback( 'single-course/sidebar' ), 85 );
212 +
213 +add_action(
214 + 'learn-press/course-content-summary',
215 + LearnPress::instance()->template( 'course' )->text( ' </div>', 'lp-entry-content-close' ),
216 + 100
217 +);
218 +
219 +// Meta
220 +add_action(
221 + 'learn-press/course-meta-primary-left',
222 + LearnPress::instance()->template( 'course' )->callback( 'single-course/meta/instructor' ),
223 + 10
224 +);
225 +add_action(
226 + 'learn-press/course-meta-primary-left',
227 + LearnPress::instance()->template( 'course' )->callback( 'single-course/meta/category' ),
228 + 20
229 +);
230 +
231 +add_action(
232 + 'learn-press/course-meta-secondary-left',
233 + LearnPress::instance()->template( 'course' )->callback( 'single-course/meta/duration' ),
234 + 10
235 +);
236 +add_action(
237 + 'learn-press/course-meta-secondary-left',
238 + LearnPress::instance()->template( 'course' )->callback( 'single-course/meta/level' ),
239 + 20
240 +);
241 +/**
242 + * @see LP_Template_Course::count_object()
243 + */
244 +add_action( 'learn-press/course-meta-secondary-left', LearnPress::instance()->template( 'course' )->func( 'count_object' ), 20 );
245 +
246 +
247 +// Sidebar content
248 +/**
249 + * @see LP_Template_Course::course_sidebar_preview()
250 + * @see LP_Template_Course::course_extra_key_features()
251 + * @see LP_Template_Course::course_extra_requirements()
252 + */
253 +add_action( 'learn-press/course-summary-sidebar', LearnPress::instance()->template( 'course' )->func( 'course_sidebar_preview' ), 10 );
254 +add_action( 'learn-press/course-summary-sidebar', LearnPress::instance()->template( 'course' )->func( 'course_featured_review' ), 20 );
255 +// add_action( 'learn-press/course-summary-sidebar', LearnPress::instance()->template( 'course' )->func( 'course_extra_key_features' ), 20 );
256 +// add_action( 'learn-press/course-summary-sidebar', LearnPress::instance()->template( 'course' )->func( 'course_extra_requirements' ), 30 );
257 +
258 +/** END: Main content of single course */
259 +
260 +/** BEGIN: Course section */
261 +add_action(
262 + 'learn-press/section-summary',
263 + LearnPress::instance()->template( 'course' )->callback( 'single-course/section/title.php', array( 'section' ) ),
264 + 10
265 +);
266 +add_action(
267 + 'learn-press/section-summary',
268 + LearnPress::instance()->template( 'course' )->callback( 'single-course/section/content.php', array( 'section' ) ),
269 + 20
270 +);
271 +
272 +add_action(
273 + 'learn-press/after-section-loop-item-title',
274 + LearnPress::instance()->template( 'course' )->callback(
275 + 'single-course/section/item-meta.php',
276 + array(
277 + 'item',
278 + 'section',
279 + )
280 + ),
281 + 10,
282 + 2
283 +);
284 +
285 +/** BEGIN: Quiz item */
286 +
287 +/**
288 + * @see LP_Template_Course::quiz_meta_questions()
289 + * @see LP_Template_Course::item_meta_duration()
290 + * @see LP_Template_Course::quiz_meta_final()
291 + */
292 +add_action(
293 + 'learn-press/course-section-item/before-lp_quiz-meta',
294 + LearnPress::instance()->template( 'course' )->func( 'quiz_meta_questions' ),
295 + 10
296 +);
297 +add_action(
298 + 'learn-press/course-section-item/before-lp_quiz-meta',
299 + LearnPress::instance()->template( 'course' )->func( 'item_meta_duration' ),
300 + 20
301 +);
302 +add_action(
303 + 'learn-press/course-section-item/before-lp_quiz-meta',
304 + LearnPress::instance()->template( 'course' )->func( 'quiz_meta_final' ),
305 + 30
306 +);
307 +/** END: Quiz item */
308 +
309 +/** BEGIN: Lesson item */
310 +add_action(
311 + 'learn-press/course-section-item/before-lp_lesson-meta',
312 + LearnPress::instance()->template( 'course' )->func( 'item_meta_duration' ),
313 + 10
314 +);
315 +/** END: Lesson item */
316 +
317 +/** END: Course section */
318 +
319 +/** BEGIN: Popup */
320 +/**
321 + * @see single-button-toggle-sidebar
322 + */
323 +add_action(
324 + 'learn-press/single-button-toggle-sidebar',
325 + LearnPress::instance()->template( 'course' )->text( '<input type="checkbox" id="sidebar-toggle" title="Show/Hide curriculum" />', 'single-button-toggle-sidebar' ),
326 + 5
327 +);
328 +
329 +/**
330 + * @see LP_Template_Course::popup_header()
331 + * @see LP_Template_Course::popup_sidebar()
332 + * @see LP_Template_Course::popup_content()
333 + * @see LP_Template_Course::popup_footer()
334 + */
335 +add_action( 'learn-press/single-item-summary', LearnPress::instance()->template( 'course' )->func( 'popup_header' ), 10 );
336 +add_action( 'learn-press/single-item-summary', LearnPress::instance()->template( 'course' )->func( 'popup_sidebar' ), 20 );
337 +add_action( 'learn-press/single-item-summary', LearnPress::instance()->template( 'course' )->func( 'popup_content' ), 30 );
338 +add_action( 'learn-press/single-item-summary', LearnPress::instance()->template( 'course' )->func( 'popup_footer' ), 40 );
339 +
340 +/**
341 + * @see LP_Template_Course::popup_footer_nav()
342 + */
343 +add_action( 'learn-press/popup-footer', LearnPress::instance()->template( 'course' )->func( 'popup_footer_nav' ), 10 );
344 +/** END: Popup */
345 +
346 +/** BEGIN: Popup quiz */
347 +/**
348 + * @see LP_Template_Course::course_finish_button()
349 + */
350 +//add_action( 'learn-press/quiz-buttons', LearnPress::instance()->template( 'course' )->func( 'course_finish_button' ), 10 );
351 +/** END: Popup quiz */
352 +
353 +/** BEGIN: Popup lesson */
354 +
355 +/**
356 + * @see LP_Template_Course::item_lesson_title()
357 + * @see LP_Template_Course::item_lesson_content()
358 + * @see LP_Template_Course::item_lesson_complete_button()
359 + */
360 +add_action(
361 + 'learn-press/before-content-item-summary/lp_lesson',
362 + LearnPress::instance()->template( 'course' )->func( 'item_lesson_title' ),
363 + 10
364 +);
365 +add_action(
366 + 'learn-press/content-item-summary/lp_lesson',
367 + LearnPress::instance()->template( 'course' )->func( 'item_lesson_content' ),
368 + 10
369 +);
370 +add_action(
371 + 'learn-press/after-content-item-summary/lp_lesson',
372 + LearnPress::instance()->template( 'course' )->func( 'item_lesson_material' ),
373 + 10
374 +);
375 +add_action(
376 + 'learn-press/after-content-item-summary/lp_lesson',
377 + LearnPress::instance()->template( 'course' )->func( 'item_lesson_complete_button' ),
378 + 11
379 +);
380 +add_action(
381 + 'learn-press/after-content-item-summary/lp_lesson',
382 + function () {
383 + $userCourseModel = UserCourseModel::find( get_current_user_id(), get_the_ID(), true );
384 + $userCourseTemplate = UserCourseTemplate::instance();
385 +
386 + if ( $userCourseModel instanceof UserCourseModel ) {
387 + echo $userCourseTemplate->html_btn_finish( $userCourseModel );
388 + }
389 + },
390 + 15
391 +);
392 +/** END: Popup lesson */
393 +
394 +/**
395 + * @see LP_Template_Course::course_item_content()
396 + */
397 +add_action( 'learn-press/course-item-content', LearnPress::instance()->template( 'course' )->func( 'course_item_content' ), 5 );
398 +
399 +/** BEGIN: User profile */
400 +
401 +/**
402 + * @see LP_Template_Profile::header()
403 + * @see LP_Template_Profile::tabs()
404 + * @see LP_Template_Profile::content()
405 + */
406 +//add_action( 'learn-press/before-user-profile', LearnPress::instance()->template( 'profile' )->func( 'header' ), 10 );
407 +
408 +add_action( 'learn-press/user-profile', LearnPress::instance()->template( 'profile' )->func( 'sidebar' ), 10 );
409 +add_action( 'learn-press/user-profile', LearnPress::instance()->template( 'profile' )->func( 'content' ), 20 );
410 +
411 +add_action( 'learn-press/user-profile/private', LearnPress::instance()->template( 'profile' )->func( 'sidebar' ), 10 );
412 +
413 +add_action( 'learn-press/user-profile-account', LearnPress::instance()->template( 'profile' )->text( ' <div class="lp-profile-left">', 'user-profile-account-left-open' ), 5 );
414 +add_action( 'learn-press/user-profile-account', LearnPress::instance()->template( 'profile' )->func( 'avatar' ), 10 );
415 +//add_action( 'learn-press/user-profile-account', LearnPress::instance()->template( 'profile' )->func( 'socials' ), 10 );
416 +add_action( 'learn-press/user-profile-account', LearnPress::instance()->template( 'profile' )->text( ' </div>', 'user-profile-account-left-close' ), 15 );
417 +add_action( 'learn-press/user-profile-account', LearnPress::instance()->template( 'profile' )->func( 'header' ), 20 );
418 +
419 +add_action( 'learn-press/user-profile-tabs', LearnPress::instance()->template( 'profile' )->func( 'tabs' ), 10 );
420 +
421 +/**
422 + * @deprecated 4.2.6.2
423 + */
424 +add_action( 'learn-press/profile/orders', LearnPress::instance()->template( 'profile' )->callback( 'profile/tabs/orders/list.php' ), 10 );
425 +/**
426 + * @deprecated 4.2.6.2
427 + */
428 +add_action(
429 + 'learn-press/profile/orders',
430 + LearnPress::instance()->template( 'profile' )->callback( 'profile/tabs/orders/recover-order.php' ),
431 + 20
432 +);
433 +
434 +// Comment from v4.3.2.6, hook not using from v4.2.6.4
435 +//add_action( 'learn-press/profile/order-details', LearnPress::instance()->template( 'profile' )->func( 'order_details' ), 5 );
436 +//add_action( 'learn-press/profile/order-details', LearnPress::instance()->template( 'profile' )->func( 'order_recover' ), 10 );
437 +//add_action( 'learn-press/profile/order-details', LearnPress::instance()->template( 'profile' )->func( 'order_message' ), 15 );
438 +
439 +/**
440 + * @see LP_Template_Profile::dashboard_logged_in()
441 + * @deprecated 4.1.6
442 + */
443 +// add_action( 'learn-press/profile/before-dashboard', LearnPress::instance()->template( 'profile' )->func( 'dashboard_statistic' ), 10 );
444 +/*add_action(
445 + 'learn-press/profile/dashboard-summary',
446 + LearnPress::instance()->template( 'profile' )->func( 'dashboard_featured_courses' ),
447 + 20
448 +);*/
449 +/*add_action(
450 + 'learn-press/profile/dashboard-summary',
451 + LearnPress::instance()->template( 'profile' )->func( 'dashboard_latest_courses' ),
452 + 30
453 +);*/
454 +
455 +/**
456 + * @see LP_Template_Profile::dashboard_not_logged_in()
457 + * @see LP_Template_Profile::login_form()
458 + * @see LP_Template_Profile::register_form()
459 + */
460 +add_action( 'learn-press/user-profile', LearnPress::instance()->template( 'profile' )->func( 'dashboard_not_logged_in' ), 5 );
461 +add_action( 'learn-press/user-profile', LearnPress::instance()->template( 'profile' )->func( 'login_form' ), 10 );
462 +add_action( 'learn-press/user-profile', LearnPress::instance()->template( 'profile' )->func( 'register_form' ), 15 );
463 +
464 +/** BEGIN: Checkout page */
465 +/**
466 + * @see LP_Template_Checkout::review_order()
467 + */
468 +add_action( 'learn-press/before-checkout-form', LearnPress::instance()->template( 'checkout' )->func( 'review_order' ), 10 );
469 +add_action( 'learn-press/after-checkout-form', LearnPress::instance()->template( 'checkout' )->func( 'account_logged_in' ), 20 );
470 +add_action( 'learn-press/after-checkout-form', LearnPress::instance()->template( 'checkout' )->func( 'account_register' ), 30 );
471 +add_action( 'learn-press/after-checkout-form', LearnPress::instance()->template( 'checkout' )->func( 'account_login' ), 40 );
472 +add_action( 'learn-press/after-checkout-form', LearnPress::instance()->template( 'checkout' )->func( 'guest_checkout' ), 50 );
473 +add_action( 'learn-press/after-checkout-form', LearnPress::instance()->template( 'checkout' )->func( 'order_comment' ), 60 );
474 +add_action( 'learn-press/after-checkout-form', LearnPress::instance()->template( 'checkout' )->func( 'payment' ), 70 );
475 +add_action( 'learn-press/after-checkout-form', LearnPress::instance()->template( 'checkout' )->func( 'terms' ), 80 );
476 +
477 +// ******************************************************************************************************************* //
478 +
479 +//add_action( 'learn-press/content-item-summary-class', 'learn_press_content_item_summary_classes', 15 );
480 +add_action(
481 + 'learn-press/before-content-item-summary/lp_quiz',
482 + LearnPress::instance()->template( 'course' )->callback( 'content-quiz/title.php' ),
483 + 5
484 +);
485 +add_action( 'learn-press/content-item-summary/lp_quiz', LearnPress::instance()->template( 'course' )->callback( 'content-quiz/js' ), 25 );
486 +// add_action( 'learn-press/parse-course-item', 'learn_press_control_displaying_course_item', 5 ); // comment by tungnx
487 +//add_action( 'learn-press/after-single-course', 'learn_press_single_course_args', 5 );
488 +add_filter( 'document_title_parts', 'learn_press_single_document_title_parts', 5 );
489 +
490 +add_filter( 'body_class', 'learn_press_body_classes', 10 );
491 +add_filter( 'post_class', 'learn_press_course_class', 15, 3 );
492 +//add_action( 'wp_head', 'learn_press_single_course_args', 5 );
493 +add_action(
494 + 'learn-press/before-checkout-order-review',
495 + LearnPress::instance()->template( 'course' )->callback( 'checkout/form-logged-in.php' ),
496 + 10
497 +);
498 +
499 +add_filter( 'excerpt_length', 'learn_press_custom_excerpt_length', 999 );
500 +// add_filter( 'learn_press_get_template', LearnPress::instance()->template( 'general' )->func( 'filter_block_content_template' ), 10, 5 );
501 +
502 +/**
503 + * Filter to hide the section if there is no item.
504 + *
505 + * @param bool $visible
506 + * @param LP_Course_Section $section
507 + * @param LP_Course $course
508 + *
509 + * @return bool
510 + * @since 4.0.0
511 + */
512 +function learn_press_filter_section_visible( $visible, $section, $course ) {
513 + if ( ! $section->get_items() ) {
514 + $visible = false;
515 + }
516 +
517 + return $visible;
518 +}
519 +
520 +add_filter( 'learn-press/section-visible', 'learn_press_filter_section_visible', 10, 3 );