Skip to content

Commit cd49e3a

Browse files
authored
WPML: Show user courses for sensei_user_courses shortcode in different languages (#7583)
1 parent 714fc89 commit cd49e3a

15 files changed

+194
-63
lines changed

changelog/fix-wpml-my-courses

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
Significance: patch
2+
Type: added
3+
4+
Show user courses for different languages using sensei_user_courses shortcode.

includes/blocks/course-list/class-sensei-course-list-block.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public function maybe_render_login_form( $block_content, $block ) {
4040
$is_course_list_block = 'course' === ( $block['attrs']['query']['postType'] ?? '' ) &&
4141
false !== strpos( ( $block['attrs']['className'] ?? '' ), 'wp-block-sensei-lms-course-list' );
4242

43-
$is_my_courses_page = get_the_ID() === (int) Sensei()->settings->get( 'my_course_page' );
43+
$is_my_courses_page = get_the_ID() === (int) Sensei()->settings->get_my_courses_page_id();
4444

4545
if (
4646
$is_course_list_block &&

includes/class-sensei-course.php

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2925,7 +2925,7 @@ public static function course_query_filter( $query ) {
29252925
}
29262926
}
29272927
// for the my courses page
2928-
elseif ( isset( $post ) && is_page() && Sensei()->settings->get( 'my_course_page' ) == $post->ID ) {
2928+
elseif ( isset( $post ) && is_page() && Sensei()->settings->get_my_courses_page_id() == $post->ID ) {
29292929
/**
29302930
* Filters number of courses per page on the my courses page as set in the settings.
29312931
*
@@ -4587,18 +4587,15 @@ public function maybe_redirect_to_login_from_course_completion() {
45874587
return;
45884588
}
45894589

4590-
$settings = Sensei()->settings->get_settings();
4591-
4592-
$completed_page_id = intval( $settings['course_completed_page'] ?? 0 );
4593-
4590+
$completed_page_id = intval( Sensei()->settings->get( 'course_completed_page' ) );
45944591
if ( $completed_page_id < 1 || get_the_ID() !== $completed_page_id ) {
45954592
return;
45964593
}
45974594

4598-
$my_courses_url = null;
4599-
4600-
if ( isset( $settings['my_course_page'] ) && 0 < intval( $settings['my_course_page'] ) ) {
4601-
$my_courses_url = get_permalink( $settings['my_course_page'] );
4595+
$my_courses_url = null;
4596+
$my_courses_page_id = Sensei()->settings->get_my_courses_page_id();
4597+
if ( 0 < $my_courses_page_id ) {
4598+
$my_courses_url = get_permalink( $my_courses_page_id );
46024599
}
46034600

46044601
$redirect_to_url = $my_courses_url ?? home_url( '/wp-login.php' );

includes/class-sensei-frontend.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -323,7 +323,7 @@ public function sensei_setup_nav_menu_item( $item ) {
323323

324324
if ( 'nav-menus.php' != $pagenow && ! defined( 'DOING_AJAX' ) && isset( $item->url ) && 'custom' == $item->type ) {
325325
// Set up Sensei menu links.
326-
$my_account_page_id = intval( Sensei()->settings->settings['my_course_page'] );
326+
$my_account_page_id = Sensei()->settings->get_my_courses_page_id();
327327
$course_page_url = Sensei_Course::get_courses_page_url();
328328
$lesson_archive_url = get_post_type_archive_link( 'lesson' );
329329
$my_courses_url = get_permalink( $my_account_page_id );

includes/class-sensei-learner.php

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -429,10 +429,22 @@ public function get_enrolled_courses_query_args( $user_id, $base_query_args = []
429429
$query_args = array_merge( $default_args, $base_query_args );
430430
$learner_term = self::get_learner_term( $user_id );
431431

432+
/**
433+
* Filters the term ID used in the query to fetch a learner's enrolled courses.
434+
*
435+
* @hook sensei_learner_get_enrolled_courses_query_args_term_id
436+
*
437+
* @since $$next-version$$
438+
*
439+
* @param {int} $term_id The term ID.
440+
* @return {int} The term ID.
441+
*/
442+
$term_id = apply_filters( 'sensei_learner_get_enrolled_courses_query_args_term_id', $learner_term->term_id );
443+
432444
$query_args['post_type'] = 'course';
433445
$query_args['tax_query'][] = [
434446
'taxonomy' => Sensei_PostTypes::LEARNER_TAXONOMY_NAME,
435-
'terms' => $learner_term->term_id,
447+
'terms' => $term_id,
436448
'include_children' => false,
437449
];
438450

@@ -477,7 +489,8 @@ private function before_enrolled_courses_query( $user_id ) {
477489
* @return int[]
478490
*/
479491
private function get_course_ids_by_progress_status( $user_id, $status ) {
480-
$course_ids = [];
492+
$course_ids = array();
493+
481494
$course_statuses = Sensei_Utils::sensei_check_for_activity(
482495
[
483496
'user_id' => $user_id,
@@ -496,6 +509,18 @@ private function get_course_ids_by_progress_status( $user_id, $status ) {
496509
$course_ids[] = intval( $status->comment_post_ID );
497510
}
498511

512+
/**
513+
* Filters the course IDs when getting them for a user by progress status.
514+
*
515+
* @hook sensei_learner_get_course_ids_by_progress_status_course_ids
516+
*
517+
* @param {int[]} $course_ids Course IDs.
518+
* @param {int} $user_id User ID.
519+
* @param {string} $status Progress status.
520+
* @return {int[]} Course IDs.
521+
*/
522+
$course_ids = apply_filters( 'sensei_learner_get_course_ids_by_progress_status_course_ids', $course_ids, $user_id, $status );
523+
499524
return $course_ids;
500525
}
501526

includes/class-sensei-messages.php

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -652,14 +652,9 @@ public function message_login() {
652652
return;
653653
}
654654

655-
$settings = Sensei()->settings->get_settings();
656-
if ( isset( $settings['my_course_page'] )
657-
&& 0 < intval( $settings['my_course_page'] ) ) {
658-
659-
$my_courses_page_id = $settings['my_course_page'];
660-
655+
$my_courses_page_id = Sensei()->settings->get_my_courses_page_id();
656+
if ( 0 < $my_courses_page_id ) {
661657
$my_courses_url = get_permalink( $my_courses_page_id );
662-
663658
}
664659

665660
if ( is_single() && is_singular( $this->post_type )

includes/class-sensei-settings.php

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,29 @@ public function get( $setting_name ) {
7575
return false;
7676
}
7777

78+
/**
79+
* Get my courses page ID.
80+
*
81+
* @since $$next-version$$
82+
*
83+
* @return int
84+
*/
85+
public function get_my_courses_page_id() {
86+
/**
87+
* Filters the My Courses page ID.
88+
*
89+
* @hook sensei_settings_my_course_page_id
90+
*
91+
* @since $$next-version$$
92+
*
93+
* @param {int} $page_id The My Courses page ID.
94+
* @return {int} Filtered My Courses page ID.
95+
*/
96+
$page_id = apply_filters( 'sensei_settings_my_course_page_id', $this->get( 'my_course_page' ) );
97+
98+
return absint( $page_id );
99+
}
100+
78101
/**
79102
* @since 1.9.0
80103
*

includes/enrolment/class-sensei-course-manual-enrolment-provider.php

Lines changed: 8 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -97,25 +97,15 @@ protected function get_initial_enrolment_status( $user_id, $course_id ) {
9797
*/
9898
public function enrol_learner( $user_id, $course_id ) {
9999

100-
/**
101-
* Filter the course ID for manual enrolment when the student is being added to the course.
102-
*
103-
* @hook sensei_course_manual_enrolment_enroll_learner_course_id
104-
*
105-
* @param {int} $course_id Course post ID.
106-
* @return {int} Filtered course ID.
107-
*/
108-
$filtered_course_id = apply_filters( 'sensei_course_manual_enrolment_enroll_learner_course_id', $course_id );
109-
110100
// Check if they are already manually enrolled.
111-
if ( $this->is_enrolled( $user_id, $filtered_course_id ) ) {
101+
if ( $this->is_enrolled( $user_id, $course_id ) ) {
112102
return true;
113103
}
114104

115-
$this->set_enrolment_status( $user_id, $filtered_course_id, true );
116-
Sensei_Course_Enrolment_Manager::trigger_course_enrolment_check( $user_id, $filtered_course_id );
105+
$this->set_enrolment_status( $user_id, $course_id, true );
106+
Sensei_Course_Enrolment_Manager::trigger_course_enrolment_check( $user_id, $course_id );
117107

118-
if ( ! $this->is_enrolled( $user_id, $filtered_course_id ) ) {
108+
if ( ! $this->is_enrolled( $user_id, $course_id ) ) {
119109
return false;
120110
}
121111

@@ -142,25 +132,15 @@ public function enrol_learner( $user_id, $course_id ) {
142132
*/
143133
public function withdraw_learner( $user_id, $course_id ) {
144134

145-
/**
146-
* Filter the course ID for manual enrolment when the student is being removed from the course.
147-
*
148-
* @hook sensei_course_manual_enrolment_withdraw_learner_course_id
149-
*
150-
* @param {int} $course_id Course post ID.
151-
* @return {int} Filtered course ID.
152-
*/
153-
$filtered_course_id = apply_filters( 'sensei_course_manual_enrolment_withdraw_learner_course_id', $course_id );
154-
155135
// Check if they aren't manually enrolled.
156-
if ( ! $this->is_enrolled( $user_id, $filtered_course_id ) ) {
136+
if ( ! $this->is_enrolled( $user_id, $course_id ) ) {
157137
return true;
158138
}
159139

160-
$this->set_enrolment_status( $user_id, $filtered_course_id, false );
161-
Sensei_Course_Enrolment_Manager::trigger_course_enrolment_check( $user_id, $filtered_course_id );
140+
$this->set_enrolment_status( $user_id, $course_id, false );
141+
Sensei_Course_Enrolment_Manager::trigger_course_enrolment_check( $user_id, $course_id );
162142

163-
if ( $this->is_enrolled( $user_id, $filtered_course_id ) ) {
143+
if ( $this->is_enrolled( $user_id, $course_id ) ) {
164144
return false;
165145
}
166146

includes/sensei-functions.php

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ function is_sensei() {
2525
$is_sensei = true;
2626
} elseif ( is_object( $post ) && ! is_wp_error( $post ) ) {
2727
$course_page_id = intval( Sensei()->settings->settings['course_page'] );
28-
$my_courses_page_id = intval( Sensei()->settings->settings['my_course_page'] );
28+
$my_courses_page_id = Sensei()->settings->get_my_courses_page_id();
2929
$course_completed_page_id = intval( Sensei()->settings->settings['course_completed_page'] );
3030

3131
if ( ! empty( $post->ID ) && in_array( $post->ID, [ $course_page_id, $my_courses_page_id, $course_completed_page_id ], true ) ) {
@@ -353,18 +353,18 @@ function sensei_user_registration_url( bool $return_wp_registration_url = true,
353353
* @param {bool} $wp_register_link Whether to use the default WordPress registration link, default: false.
354354
* @return {bool} Filtered value.
355355
*/
356-
$wp_register_link = apply_filters( 'sensei_use_wp_register_link', false );
357-
$registration_url = '';
358-
$settings = Sensei()->settings->get_settings();
356+
$wp_register_link = apply_filters( 'sensei_use_wp_register_link', false );
357+
$registration_url = '';
358+
$my_courses_page_id = Sensei()->settings->get_my_courses_page_id();
359359

360-
if ( empty( $settings['my_course_page'] ) || $wp_register_link ) {
360+
if ( empty( $my_courses_page_id ) || $wp_register_link ) {
361361
if ( ! $return_wp_registration_url ) {
362362
return null;
363363
}
364364

365365
$registration_url = wp_registration_url();
366366
} else {
367-
$registration_url = get_permalink( intval( $settings['my_course_page'] ) );
367+
$registration_url = get_permalink( $my_courses_page_id );
368368
}
369369

370370
if ( ! empty( $redirect ) ) {
@@ -401,7 +401,7 @@ function sensei_user_registration_url( bool $return_wp_registration_url = true,
401401
*/
402402
function sensei_user_login_url( string $redirect = '' ) {
403403
$login_url = '';
404-
$my_courses_page_id = intval( Sensei()->settings->get( 'my_course_page' ) );
404+
$my_courses_page_id = Sensei()->settings->get_my_courses_page_id();
405405
$page = get_post( $my_courses_page_id );
406406

407407
if ( $my_courses_page_id && isset( $page->ID ) && 'page' == get_post_type( $page->ID ) ) {

includes/shortcodes/class-sensei-shortcode-user-courses.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@ public function __construct( $attributes, $content, $shortcode ) {
169169
private function is_my_courses() {
170170
global $wp_query;
171171

172-
return $wp_query->is_page() && $wp_query->get_queried_object_id() === absint( Sensei()->settings->get( 'my_course_page' ) );
172+
return $wp_query->is_page() && $wp_query->get_queried_object_id() === Sensei()->settings->get_my_courses_page_id();
173173
}
174174

175175
private function should_filter_course_by_status( $course_status, $user_id ) {

0 commit comments

Comments
 (0)