WP Manifestindependent plugin directory
manifest / ecommerce / edu-advance

Episode Classes

Map WooCommerce virtual products to episode-based classes with secure video playback, resume functionality, and Elementor widgets.

★ 0stars

Install

Download source zip No release zip yet

This is the repository archive. It installs, but the folder name will carry the branch suffix and updates will not flow.

Install straight from GitHub with WP-CLI:

wp plugin install https://github.com/bkkalana/edu-advance/archive/refs/heads/main.zip
No built-in updater. New versions won't appear under Dashboard → Updates. Install new releases yourself, or let Git Updater track the repository.

Episode Courses - WordPress Plugin

A comprehensive WordPress plugin that maps WooCommerce virtual products to episode-based courses with secure video playback, resume functionality, and Elementor widgets.

Features

  • Course Management: Create courses with multiple episodes from WordPress Media Library
  • WooCommerce Integration: Automatic access granting on product purchase
  • Secure Video Playback: Signed, time-limited URLs for video security
  • Resume Functionality: Automatically resume playback from last watched position
  • Elementor Widgets: Course archive and player widgets for easy page building
  • Multiple CDN Support: Local, AWS S3, BunnyCDN, and Vimeo providers
  • Access Control: Preview episodes and locked content for non-purchasers
  • Progress Tracking: Save and track user progress per episode

Installation

  1. Upload the plugin folder to /wp-content/plugins/
  2. Activate the plugin through the 'Plugins' menu in WordPress
  3. Ensure WooCommerce is installed and activated
  4. Configure settings at Courses > Settings

Requirements

  • WordPress 5.8+
  • PHP 7.4+
  • WooCommerce 5.0+
  • Elementor (optional, for widgets)

Configuration

1. Provider Setup

Go to Courses > Settings > Provider and select your video hosting:

  • Local: Videos stored in WordPress Media Library
  • AWS S3: Requires Access Key, Secret Key, Bucket, and Region
  • BunnyCDN: Requires Token and Library ID
  • Vimeo: Requires Access Token

2. Create a Course

  1. Go to Courses > Add New
  2. Set course title, description, and thumbnail
  3. Map to a WooCommerce product in the sidebar metabox
  4. Add episodes using the "Add Episode from Media Library" button
  5. Configure episode order, titles, descriptions, and preview flags

3. Elementor Widgets

Course Archive Widget:

  • Display courses in a grid layout
  • Show price, excerpt, and buy button
  • Configurable columns and ordering

Course Player Widget:

  • Two-column layout (playlist + player)
  • Adjustable column widths
  • Episode thumbnails option
  • Autoplay next episode option

Usage

Shortcodes

Course Player:

[epcourse_player id="123"]

My Courses:

[epcourse_my_courses]

REST API Endpoints

  • GET /wp-json/epcourse/v1/course/{id} - Get course data
  • POST /wp-json/epcourse/v1/progress - Save playback progress
  • GET /wp-json/epcourse/v1/signed-url?episode_id={id} - Get signed video URL
  • GET /wp-json/epcourse/v1/my-courses - Get user's courses
  • GET /wp-json/epcourse/v1/access/{course_id} - Check access
  • POST /wp-json/epcourse/v1/grant - Grant access (admin only)

Security Features

  • HMAC-signed URLs with configurable expiry
  • User entitlement verification before video access
  • Byte-range support for efficient streaming
  • X-Sendfile support for large files
  • Nonce verification on all AJAX requests

Hooks & Filters

Filters

  • epcourse_generate_signed_url - Customize signed URL generation
  • epcourse_user_has_access - Customize access checking
  • epcourse_episode_meta - Modify episode metadata

Actions

  • epcourse_access_granted - Fired when access is granted
  • epcourse_access_revoked - Fired when access is revoked

Database Schema

wp_course_user_access

Stores user access records:

  • user_id - WordPress user ID
  • course_id - Course post ID
  • woo_order_id - Related WooCommerce order ID
  • granted_at - When access was granted
  • expires_at - When access expires (NULL for lifetime)

Troubleshooting

Videos not playing:

  • Check signed URL expiry time in settings
  • Verify user has access to the course
  • Check file permissions for local files

Progress not saving:

  • Ensure user is logged in
  • Check browser console for JavaScript errors
  • Verify REST API is accessible

Elementor widgets not showing:

  • Ensure Elementor is installed and activated
  • Clear Elementor cache
  • Check widget category in Elementor panel

Support

For issues, feature requests, or contributions, please contact the plugin developer.

License

GPL v2 or later

Changelog

1.0.0

  • Initial release
  • Course and episode management
  • WooCommerce integration
  • Secure video playback
  • Elementor widgets
  • Progress tracking
  • Multiple CDN support