WordPress

php – Learndash Notifications – Wyślij powiadomienie, jeśli kurs nie został jeszcze ukończony

  • 11 maja, 2023
  • 3 min read
php – Learndash Notifications – Wyślij powiadomienie, jeśli kurs nie został jeszcze ukończony


Mam użytkowników, którzy muszą ukończyć kurs w ciągu 15 dni. Próbuję ustawić powiadomienia przypominające dla użytkowników, którzy jeszcze nie ukończyli kursu. Nie chcę, aby kurs wygasł za 15 dni, ponieważ jeśli użytkownik jeszcze go nie ukończył, chcę, aby nadal mógł się zalogować i ukończyć. Z tego powodu ustawiam kurs na wygaśnięcie po 100 dniach i wysyłam przypomnienia na 90 dni przed tym terminem, korzystając z wyzwalacza „X” dni przed wygaśnięciem kursu. Problem polega na tym, że chcę wysyłać te e-maile tylko wtedy, gdy nie ukończyli jeszcze kursu. Poniżej znajduje się odpowiedni kod z wtyczki Learndash Notification.

/**
 * Send learndash notification email when user's course is about to expire in X days
 */
function learndash_notifications_course_expires() {
    // Fired in cron.php
    // Get all courses
    $courses = learndash_notifications_get_all_courses();

    // Get all notifications
    $notifications = learndash_notifications_get_notifications( 'course_expires' );

    // Foreach courses
    foreach ( $courses as $c ) {
        $c_meta = get_post_meta( $c->ID, '_sfwd-courses', true );
        $c_meta = maybe_unserialize( $c_meta );

        // If course doesn't has expiration setting, continue
        if ( ( ! isset( $c_meta['sfwd-courses_expire_access'] ) || ( isset( $c_meta['sfwd-courses_expire_access'] ) && $c_meta['sfwd-courses_expire_access'] != 'on' ) )
            ||
            ( ! isset( $c_meta['sfwd-courses_expire_access_days'] ) || ( isset( $c_meta['sfwd-courses_expire_access_days'] ) && $c_meta['sfwd-courses_expire_access_days'] == 0 ) ) ) {
            continue;
        }

        // Course access list
        $c_access_list = learndash_get_users_for_course( $c->ID );
        $c_access_list = ! empty( $c_access_list ) && is_a( $c_access_list, 'WP_User_Query' ) ? $c_access_list->get_results() : [];

        // If course has no access list, continue
        if ( empty( $c_access_list ) ) continue;

        $c_access_days = (int) $c_meta['sfwd-courses_expire_access_days'];

        // Foreach users who have access
        foreach ( $c_access_list as $u_id ) {
            $allow = apply_filters( 'learndash_notifications_send_course_expires_notification_for_completed_users', true, $u_id, $c );

            if ( ! $allow && learndash_course_completed( $u_id, $c->ID ) ) {
                continue;
            }

            $access_from = (int) get_user_meta( $u_id, 'course_' . $c->ID . '_access_from', true );

            // Foreach notifications
            foreach ( $notifications as $n ) {
                $n_days = get_post_meta( $n->ID, '_ld_notifications_course_expires_days', true );

                // If users' course access is equal to setting, send notifications
                if ( ! empty( $access_from ) && date( 'Y-m-d H' ) == date( 'Y-m-d H', strtotime( '-' . $n_days . ' days', strtotime( '+' . $c_access_days . ' days', $access_from ) ) ) ) {
                    learndash_notifications_send_notification( $n, $u_id, $c->ID );
                }
            }
        }
    }
}

Jeśli zmienię linię

        foreach ( $c_access_list as $u_id ) {
            $allow = apply_filters( 'learndash_notifications_send_course_expires_notification_for_completed_users', true, $u_id, $c );

z true na false, czy to oznacza, że ​​e-maile nie zostaną wysłane, jeśli użytkownik ukończył kurs? Dzięki!

Warto przeczytać!  Jak wyświetlić najczęściej komentowane posty w WordPress (2 sposoby)


Źródło