Browse: Home / Hooks /

sfwd_lms_has_access

apply_filters( 'sfwd_lms_has_access',  boolean $has_access,  int $post_id,  int $user_id )

Filters whether a user has access to the course.


Description #


Parameters #

$has_access

(boolean) Whether the user has access to the course or not.

$post_id

(int) Post ID.

$user_id

(int) User ID.


Source #

File: includes/course/ld-course-user-functions.php


Examples #

Note: Extended code example below not guaranteed, you may need to consult with a developer

 <?php
/**
 * Example usage for sfwd_lms_has_access filter.
 */
add_filter(
	'sfwd_lms_has_access',
	function( $has_access = false, $step_id = 0, $user_id = 0 ) {
		// Only override if current access is false.
		if ( true !== $has_access ) {
			if ( empty( $user_id ) ) {
				$user_id = get_current_user_id();
			}

			if ( ( ! empty( $user_id ) ) && ( ! empty( $step_id ) ) ) {
				$course_id = learndash_get_course_id( $step_id );
				if ( ! empty( $course_id ) ) {
					$user_meta_course_progress = get_user_meta( $user_id, '_sfwd-course_progress', true );
					if ( ( is_array( $user_meta_course_progress ) ) && ( isset( $user_meta_course_progress[ $course_id ] ) ) ) {
						// If here the user does not have access but had access to the course at some point.
						$step_post_type = get_post_type( $step_id );
						if ( 'sfwd-courses' == $step_post_type ) {
							$has_access = true;
						} elseif ( 'sfwd-lessons' == $step_post_type ) {
							// If the user has previously completed the course > lesson then allow access.
							if ( ( isset( $user_meta_course_progress[ $course_id ]['lessons'][ $step_id ] ) ) && ( $user_meta_course_progress[ $course_id ]['lessons'][ $step_id ] ) ) {
								$has_access = true;
							}
						} elseif ( 'sfwd-topic' == $step_post_type ) {
							$lesson_id = learndash_get_lesson_id( $step_id, $course_id );
							if ( ! empty( $lesson_id ) ) {
								// If the user has previously completed the course > lesson > topic then allow access.
								if ( ( isset( $user_meta_course_progress[ $course_id ]['topics'][ $lesson_id ][ $step_id ] ) ) && ( $user_meta_course_progress[ $course_id ]['topics'][ $lesson_id ][ $step_id ] ) ) {
									$has_access = true;
								}
							}
						}
					}
				}
			}
		}

		// Always return $has_access
		return $has_access;
	},
	1001,
	3
);
add_filter(
	'sfwd_lms_has_access',
	function( $return, $post_id, $user_id ) {
		if ( empty( $user_id ) ) {
			if ( ! is_user_logged_in() ) {
				return $return;
			} else {
				$user_id = get_current_user_id();
			}
		}

		$course_id = learndash_get_course_id( $post_id );
		if ( empty( $course_id ) ) {
			return $return;
		} else {
			$allowed_course_ids = array( 949 );

			if ( ! in_array( $course_id, $allowed_course_ids ) ) {
				return $return;
			}

			// User must have specified role in order to access the courses listed in the $allowed_course_ids array
			if ( user_can( $user_id, 'subscriber' ) ) {
				$return = true;
			}

			/*
			 Example 2: User must have specified capability in order to access the courses listed in the $allowed_course_ids array
			if(user_can($user_id, "3a_textbook"))
			$return = true; */
		}

		return $return;
	},
	10,
	3
);

add_filter(
	'sfwd_lms_has_access',
	function( $access, $post_id = 0, $user_id = 0 ) {
		// Fill in detailed logic checking user_id and $post_id.

		// Always return $access;
		return $access;
	},
	99,
	3
);

add_filter(
	'sfwd_lms_has_access',
	function( $has_access = false, $post_id = 0, $user_id = 0 ) {
		if ( empty( $user_id ) ) {
			if ( is_user_logged_in() ) {
				$user_id = get_current_user_id();
			} else {
				$user_id = 0;
			}
		}

		if ( ( ! empty( $post_id ) ) && ( ! empty( $user_id ) ) ) {
			$lesson_id = 0;
			$post_type = get_post_type( $post_id );
			if ( $post_type == 'sfwd-lessons' ) {
				$lesson_id = $post_id;
			} elseif ( in_array( $post_type, array( 'sfwd-topic', 'sfwd-quiz' ) ) ) {
				$lesson_id = learndash_get_setting( $post_id, 'lesson' );
			}

			if ( ! empty( $lesson_id ) ) {
				$lesson_access_from = ld_lesson_access_from( $lesson_id, get_current_user_id() );
				if ( ! empty( $lesson_access_from ) ) {

					// If here then the lesson is drip and the user does not yet have access.
					// So we redirect to course
					$course_id = $course_id = learndash_get_course_id( $post_id );
					if ( ! empty( $course_id ) ) {
						wp_redirect( get_permalink( $course_id ) );
					}
				}
			}
		}

		// Default is always return $has_access
		return $has_access;

	},
	1,
	3
);
 

Changelog #

Changelog
Version Description
2.1.0 Introduced.