PluginProbe
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses / 4.4.10
LearnPress – WordPress LMS Plugin for Create and Sell Online Courses v4.4.10
4.4.10 4.4.9.1 4.4.9 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 All 142 releases
← All changes | inc/TemplateHooks/Course/ListCoursesTemplate.php +39 -24 4.4.6 → 4.4.10 View file →
@@ -85,9 +85,9 @@
85 85 * @param array $settings
86 86 *
87 87 * @return stdClass { content: string_html }
88 88 * @since 4.2.5.7
89 - * @version 1.0.5
89 + * @version 1.0.6
90 90 */
91 91 public static function render_courses( array $settings = [] ): stdClass {
92 92 $filter = new LP_Course_Filter();
93 93 Courses::handle_params_for_query_courses( $filter, $settings );
@@ -111,24 +111,26 @@
111 111 foreach ( $courses as $courseObj ) {
112 112 $course = CourseModel::find( $courseObj->ID, true );
113 113 $html_courses .= static::render_course( $course, $settings );
114 114 }
115 +
116 + $section_courses = apply_filters(
117 + 'learn-press/layout/list-courses/section/courses',
118 + [
119 + 'wrap' => sprintf(
120 + '<ul class="learn-press-courses lp-list-courses-no-css %1$s" data-layout="%1$s">',
121 + esc_attr( $skin )
122 + ),
123 + 'courses' => $html_courses,
124 + 'wrap_end' => '</ul>',
125 + ],
126 + $courses,
127 + $settings
128 + );
129 +
130 + $html_courses = Template::combine_components( $section_courses );
115 131 }
116 132
117 - $section_courses = apply_filters(
118 - 'learn-press/layout/list-courses/section/courses',
119 - [
120 - 'wrap' => sprintf(
121 - '<ul class="learn-press-courses lp-list-courses-no-css %1$s" data-layout="%1$s">',
122 - $skin
123 - ),
124 - 'courses' => $html_courses,
125 - 'wrap_end' => '</ul>',
126 - ],
127 - $courses,
128 - $settings
129 - );
130 -
131 133 $section_top = apply_filters(
132 134 'learn-press/layout/list-courses/section/top',
133 135 [
134 136 'wrapper' => '<div class="lp-courses-bar">',
@@ -163,9 +165,9 @@
163 165 $section = apply_filters(
164 166 'learn-press/layout/list-courses/section',
165 167 [
166 168 'top' => Template::combine_components( $section_top ),
167 - 'courses' => Template::combine_components( $section_courses ),
169 + 'courses' => $html_courses,
168 170 'pagination' => $html_pagination,
169 171 ],
170 172 $courses,
171 173 $settings
@@ -205,9 +207,9 @@
205 207 [
206 208 'wrapper' => '<div class="course-thumbnail">',
207 209 'img' => sprintf(
208 210 '<a href="%s">%s</a>',
209 - $course->get_permalink(),
211 + esc_url( $course->get_permalink() ),
210 212 $singleCourseTemplate->html_image( $course )
211 213 ),
212 214 'wrapper_end' => '</div>',
213 215 ],
@@ -265,16 +267,16 @@
265 267 //'course_footer' => '<div class="course-footer">',
266 268 'price' => $singleCourseTemplate->html_price( $course ),
267 269 'btn_read_more' => sprintf(
268 270 '<div class="course-readmore"><a href="%s">%s</a></div>',
269 - $course->get_permalink(),
271 + esc_url( $course->get_permalink() ),
270 272 $btn_read_more_text
271 273 ),
272 274 'btn_view_list' => $show_view_students ? sprintf(
273 275 '<div class="lp-wrap-btn-view-course-students">
274 - <button type="button" class="lp-button lp-btn-view-students" data-course-id="%d" data-course-title="%s">%s</button>
276 + <button type="button" class="lp-button lp-btn-view-students" data-course-id="%s" data-course-title="%s">%s</button>
275 277 </div>',
276 - $course->get_id(),
278 + esc_attr( $course->get_id() ),
277 279 esc_attr( $course->get_title() ),
278 280 esc_html__( 'View List Students', 'learnpress' )
279 281 ) : '',
280 282 //'course_footer_end' => '</div>',
@@ -298,9 +300,9 @@
298 300 [
299 301 'wrapper' => '<div class="course-content">',
300 302 'title' => sprintf(
301 303 '<h3 class="wap-course-title"><a class="course-permalink" href="%s">%s</a></h3>',
302 - $course->get_permalink(),
304 + esc_url( $course->get_permalink() ),
303 305 $singleCourseTemplate->html_title( $course )
304 306 ),
305 307 'featured' => $singleCourseTemplate->html_featured( $course ),
306 308 'wrapper_instructor_cate' => '<div class="course-instructor-category">',
@@ -522,9 +524,14 @@
522 524
523 525 $content = '<ul class="courses-layouts-display-list">';
524 526 foreach ( $layouts as $k => $v ) {
525 527 $active = ( $data['courses_layout_default'] ?? '' ) === $k ? 'active' : '';
526 - $content .= '<li class="courses-layout ' . $active . '" data-layout="' . $k . '">' . $v . '</li>';
528 + $content .= sprintf(
529 + '<li class="courses-layout %s" data-layout="%s">%s</li>',
530 + esc_attr( $active ),
531 + esc_attr( $k ),
532 + $v
533 + );
527 534 }
528 535 $content .= '</ul>';
529 536
530 537 return Template::instance()->nest_elements( $html_wrapper, $content );
@@ -557,9 +564,14 @@
557 564 );
558 565
559 566 $content = '<select name="order_by" class="courses-order-by">';
560 567 foreach ( $values as $k => $v ) {
561 - $content .= '<option value="' . $k . '" ' . selected( $default_value, $k, false ) . '>' . $v . '</option>';
568 + $content .= sprintf(
569 + '<option value="%s" %s>%s</option>',
570 + esc_attr( $k ),
571 + selected( $default_value, $k, false ),
572 + $v
573 + );
562 574 }
563 575 $content .= '</select>';
564 576
565 577 return Template::instance()->nest_elements( $html_wrapper, $content );
@@ -672,9 +684,12 @@
672 684 _n( 'Course Found', 'Courses Found', $total_courses, 'learnpress' )
673 685 );
674 686 $view_all = sprintf(
675 687 '<a href="%s">%s</a>',
676 - add_query_arg( 'c_search', $key_search, learn_press_get_page_link( 'courses' ) ),
688 + esc_url( add_query_arg(
689 + 'c_search',
690 + $key_search,
691 + learn_press_get_page_link( 'courses' ) ) ),
677 692 __( 'View All', 'learnpress' )
678 693 );
679 694
680 695 // Section.