{"id":246586,"date":"2025-08-24T06:23:22","date_gmt":"2025-08-24T06:23:22","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/course-layouts-elementor-addon-for-tutorlms\/"},"modified":"2026-08-07T08:21:52","modified_gmt":"2026-08-07T08:21:52","slug":"course-layouts-elementor-addon-for-tutorlms","status":"publish","type":"plugin","link":"https:\/\/fr.wordpress.org\/plugins\/course-layouts-elementor-addon-for-tutorlms\/","author":20447401,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.2","stable_tag":"1.0.2","tested":"6.8.8","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"Course Layouts \u2013 Elementor Addon for TutorLMS","header_author":"userelements","header_description":"Display TutorLMS courses in a grid using a custom Elementor widget.","assets_banners_color":"667ef4","last_updated":"2026-08-07 08:21:52","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"http:\/\/userelements.com\/course-tutorlms-elementor","header_author_uri":"http:\/\/userelements.com\/","rating":0,"author_block_rating":0,"active_installs":70,"downloads":841,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.1":{"tag":"1.0.1","author":"userelements","date":"2025-08-24 06:23:50"},"1.0.2":{"tag":"1.0.2","author":"userelements","date":"2026-08-07 08:21:52"}},"upgrade_notice":[],"ratings":[],"assets_icons":[],"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3349129,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3349129,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.1","1.0.2"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3349129,"resolution":"1","location":"assets","locale":"","width":1254,"height":708},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3349129,"resolution":"2","location":"assets","locale":"","width":1896,"height":862},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3349129,"resolution":"3","location":"assets","locale":"","width":1238,"height":669},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3349129,"resolution":"4","location":"assets","locale":"","width":1230,"height":467}},"screenshots":{"1":"Course Directory Grid Widget in Elementor Editor","2":"Course Categories Grid Widget Configuration","3":"Composable discovery layout with Filter Panel, Search, and Sort bar","4":"Course grid styling options in Elementor"}},"plugin_section":[],"plugin_tags":[8102,76538,2195,26514,207392],"plugin_category":[],"plugin_contributors":[210940],"plugin_business_model":[],"class_list":["post-246586","plugin","type-plugin","status-publish","hentry","plugin_tags-course","plugin_tags-elementor","plugin_tags-lms","plugin_tags-online-courses","plugin_tags-tutorlms","plugin_contributors-userelements","plugin_committers-userelements"],"banners":{"banner":"https:\/\/ps.w.org\/course-layouts-elementor-addon-for-tutorlms\/assets\/banner-772x250.png?rev=3349129","banner_2x":"https:\/\/ps.w.org\/course-layouts-elementor-addon-for-tutorlms\/assets\/banner-1544x500.png?rev=3349129","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/course-layouts-elementor-addon-for-tutorlms_667ef4.svg","icon_2x":false,"generated":true},"screenshots":[{"src":"https:\/\/ps.w.org\/course-layouts-elementor-addon-for-tutorlms\/assets\/screenshot-1.png?rev=3349129","caption":"Course Directory Grid Widget in Elementor Editor"},{"src":"https:\/\/ps.w.org\/course-layouts-elementor-addon-for-tutorlms\/assets\/screenshot-2.png?rev=3349129","caption":"Course Categories Grid Widget Configuration"},{"src":"https:\/\/ps.w.org\/course-layouts-elementor-addon-for-tutorlms\/assets\/screenshot-3.png?rev=3349129","caption":"Composable discovery layout with Filter Panel, Search, and Sort bar"},{"src":"https:\/\/ps.w.org\/course-layouts-elementor-addon-for-tutorlms\/assets\/screenshot-4.png?rev=3349129","caption":"Course grid styling options in Elementor"}],"raw_content":"<!--section=description-->\n<p>Course Layouts \u2013 Elementor Addon for TutorLMS gives you a complete set of Elementor widgets to design course discovery pages, student dashboards, and instructor directories for Tutor LMS\u2014without writing code.<\/p>\n\n<p>Place filters in a sidebar, search in a header, and the course grid anywhere on the page. Link them with a shared <strong>Listing ID<\/strong> and they work together instantly via AJAX. Every layout is fully customizable in Elementor, with responsive column controls, extensive style options, and optional Elementor Loop Item templates for pixel-perfect course cards.<\/p>\n\n<h4>Why use Course Layouts?<\/h4>\n\n<ul>\n<li><strong>All-in-one course discovery<\/strong> \u2014 Grid, filters, search, sort, chips, and pagination in one cohesive system<\/li>\n<li><strong>Design freedom<\/strong> \u2014 Built-in cards or your own Elementor Loop Item \/ Saved Template designs<\/li>\n<li><strong>Composable layouts<\/strong> \u2014 Split discovery controls across your page (sidebar filters, top search, bottom grid)<\/li>\n<li><strong>Personalized experiences<\/strong> \u2014 Show enrolled, in-progress, completed, or wishlisted courses per student<\/li>\n<li><strong>Theme Builder ready<\/strong> \u2014 \"Current Query\" mode respects archive taxonomies, authors, and search in AJAX<\/li>\n<li><strong>Conversion-focused cards<\/strong> \u2014 Smart price labels, enrollment CTAs, progress bars, badges, and wishlist<\/li>\n<li><strong>SEO support<\/strong> \u2014 Optional ItemList \/ Course JSON-LD schema on course grids (3+ courses)<\/li>\n<li><strong>Accessible &amp; fast<\/strong> \u2014 ARIA labels, live result announcements, skeleton loading, and debounced AJAX<\/li>\n<\/ul>\n\n<h4>Elementor Widgets (10)<\/h4>\n\n<p>All widgets live under the <strong>Essential TutorLMS<\/strong> category in Elementor.<\/p>\n\n<p><strong>Course Directory Grid<\/strong>\nThe main course listing widget. Responsive 1\u20136 column grid, built-in card or Loop Item skin, embedded or standalone filters\/search, pagination, and full styling controls.<\/p>\n\n<p><strong>Course Categories Grid<\/strong>\nDisplay course categories in a card or list layout with image, title, description, course count, and optional view button. Sort by name, slug, ID, course count, description, or random.<\/p>\n\n<p><strong>Course Filter Panel<\/strong>\nStandalone filter sidebar or horizontal bar. Connects to any Course Directory Grid via Listing ID. Up to 8 configurable filter fields with Clear All.<\/p>\n\n<p><strong>Course Search<\/strong>\nStandalone debounced search box linked to a course listing by Listing ID.<\/p>\n\n<p><strong>Active Filter Chips<\/strong>\nRemovable filter pills that reflect the current filter state\u2014ideal for zero-results recovery and quick filter removal.<\/p>\n\n<p><strong>Sort &amp; Result Count<\/strong>\nStandalone sort dropdown (newest, title, popularity, price) plus live \"Showing X\u2013Y of Z\" result count.<\/p>\n\n<p><strong>My Courses<\/strong>\nStudent dashboard grid (extends Course Directory Grid) pre-set for enrolled, in-progress, completed, or wishlisted courses with progress display.<\/p>\n\n<p><strong>Continue Learning<\/strong>\nHighlights the student's most recent in-progress course with thumbnail, next lesson, progress bar, and resume button.<\/p>\n\n<p><strong>Instructor Directory<\/strong>\nBrowse Tutor instructors in a responsive grid with search, category filter, ratings, course\/student counts, bio, and profile CTA.<\/p>\n\n<h4>Composable Discovery (Listing ID + CLETA.Bus)<\/h4>\n\n<p>Version 1.3 introduces a pub\/sub architecture so discovery widgets can live anywhere on the page:<\/p>\n\n<ol>\n<li>Set a <strong>Listing ID<\/strong> on the Course Directory Grid (default: <code>courses<\/code>).<\/li>\n<li>Add Filter Panel, Search, Active Filter Chips, and Sort &amp; Result Count widgets anywhere.<\/li>\n<li>Give each the same Listing ID\u2014they sync automatically via <code>CLETA.Bus<\/code>.<\/li>\n<\/ol>\n\n<p>Filters, search, sort, and pagination update the grid over AJAX without a full page reload. Filter state can be written to URL parameters for bookmarking, sharing, and browser Back\/Forward navigation.<\/p>\n\n<h4>Filtering &amp; Search<\/h4>\n\n<p><strong>Filter field types:<\/strong> category, level (Tutor 4.x meta), tags, instructor, price, rating, duration, and custom meta key.<\/p>\n\n<p><strong>Filter styles:<\/strong> dropdown, checkbox, radio buttons, and range slider (price, rating, duration use real catalog min\/max\/step values, cached for performance).<\/p>\n\n<p><strong>Smart facets:<\/strong> option counts beside each value; empty options hidden automatically.<\/p>\n\n<p><strong>Auto-apply:<\/strong> filters apply on change; range sliders debounce before reload.<\/p>\n\n<p><strong>Search:<\/strong> debounced AJAX search across course titles and related fields; works embedded in the grid or via the standalone Search widget.<\/p>\n\n<p><strong>Combine filters:<\/strong> up to 6 filter fields in the grid widget, up to 8 in the standalone Filter Panel.<\/p>\n\n<h4>Query Sources<\/h4>\n\n<p>Control which courses appear in the grid:<\/p>\n\n<ul>\n<li><strong>All courses<\/strong> \u2014 full catalog (optionally limited by category)<\/li>\n<li><strong>Current Query<\/strong> \u2014 respects Theme Builder archive context (category, tag, author, search)<\/li>\n<li><strong>Enrolled<\/strong> \u2014 courses the logged-in student is enrolled in<\/li>\n<li><strong>Not enrolled<\/strong> \u2014 courses the student has not joined<\/li>\n<li><strong>In progress<\/strong> \u2014 started but not completed<\/li>\n<li><strong>Completed<\/strong> \u2014 finished courses<\/li>\n<li><strong>Wishlisted<\/strong> \u2014 courses on the student's wishlist<\/li>\n<\/ul>\n\n<p>Personalised sources require a logged-in student. My Courses defaults to enrolled with quick switching between student-specific lists.<\/p>\n\n<h4>Course Cards<\/h4>\n\n<p><strong>Built-in card skin<\/strong> toggles for:<\/p>\n\n<ul>\n<li>Featured image with configurable size<\/li>\n<li>Title, excerpt (configurable length), and whole-card link<\/li>\n<li>Price (free, sale, membership, subscription-aware labels)<\/li>\n<li>Rating, duration, lesson count, enrollment count<\/li>\n<li>Instructor name and link<\/li>\n<li>Categories, level, tags, and benefits<\/li>\n<li>State-aware CTA: Enroll \/ Buy \/ Start \/ Continue<\/li>\n<li>Progress bar for enrolled students<\/li>\n<li>Badges: New, Free, Bestseller (enrollment threshold filterable)<\/li>\n<li>Wishlist heart (integrates with Tutor LMS wishlist)<\/li>\n<li>Skeleton loading placeholders during AJAX updates<\/li>\n<\/ul>\n\n<p><strong>Loop Item \/ Saved Template skin<\/strong> lets you design cards in Elementor Pro Loop Items or any Saved Template, bind Tutor Dynamic Tags, and use them in the grid\u2014including during AJAX filter, load-more, and pagination responses.<\/p>\n\n<h4>Elementor Dynamic Tags<\/h4>\n\n<p>A <strong>Tutor LMS (CLETA)<\/strong> dynamic tag group exposes course fields for use in any Elementor widget or Loop Item:<\/p>\n\n<ul>\n<li>Course Title<\/li>\n<li>Course Price<\/li>\n<li>Course Level<\/li>\n<li>Course Duration<\/li>\n<li>Course Lesson Count<\/li>\n<li>Course Enrollment Count<\/li>\n<li>Course Rating<\/li>\n<li>Course Instructor Name<\/li>\n<li>Course Instructor URL<\/li>\n<li>Course Progress %<\/li>\n<li>Course Enrollment Status<\/li>\n<li>Course URL (permalink)<\/li>\n<\/ul>\n\n<h4>Pagination<\/h4>\n\n<ul>\n<li><strong>Page numbers<\/strong> \u2014 classic numbered pagination with position control<\/li>\n<li><strong>Load More<\/strong> \u2014 append next page on button click<\/li>\n<li><strong>Infinite scroll<\/strong> \u2014 auto-load as the user scrolls<\/li>\n<li>Configurable courses per page (1\u2013100)<\/li>\n<li>Accurate \"Showing X\u2013Y of Z\" counts<\/li>\n<\/ul>\n\n<h4>Sorting<\/h4>\n\n<p>Default sort in widget settings or via the Sort &amp; Result Count bar:<\/p>\n\n<ul>\n<li>Date (newest \/ oldest)<\/li>\n<li>Title (A\u2013Z \/ Z\u2013A)<\/li>\n<li>Popular (review count)<\/li>\n<li>Price (low to high \/ high to low)<\/li>\n<li>ID, name, modified, menu order, random<\/li>\n<\/ul>\n\n<h4>Instructor Directory<\/h4>\n\n<ul>\n<li>Responsive 1\u20134 column grid<\/li>\n<li>Filter by course categories taught<\/li>\n<li>Minimum rating threshold (3+, 4+, 5 stars)<\/li>\n<li>Sort by name, newest, or highest rated<\/li>\n<li>Front-end search and category filter<\/li>\n<li>Card toggles: avatar, name, job title, bio (truncated), course count, rating, student count, profile CTA<\/li>\n<li>Pagination<\/li>\n<\/ul>\n\n<h4>SEO Schema Markup<\/h4>\n\n<p>The Course Directory Grid outputs JSON-LD <strong>ItemList<\/strong> schema with nested <strong>Course<\/strong> entities when 3 or more courses are displayed. Includes title, description, URL, image, instructor, provider, and pricing where available.<\/p>\n\n<p>Auto-injection on single course pages is intentionally disabled to avoid conflicts with Tutor LMS, Yoast SEO, or Rank Math.<\/p>\n\n<h4>Performance &amp; Security<\/h4>\n\n<ul>\n<li>Assets register globally; widgets enqueue only what they need<\/li>\n<li>Widget settings cached in transients (server-authoritative on AJAX\u2014client cannot override)<\/li>\n<li>Filter catalog stats (price, duration, level facets) cached and busted on course save\/delete<\/li>\n<li>Nonce verification on all AJAX endpoints<\/li>\n<li>Debounced search and range sliders to reduce server requests<\/li>\n<\/ul>\n\n<h4>Accessibility<\/h4>\n\n<ul>\n<li>ARIA labels on filter and search controls<\/li>\n<li><code>aria-live<\/code> regions for result count and grid updates<\/li>\n<li><code>aria-busy<\/code> during AJAX loading<\/li>\n<li>Enter-key handling for search and filter fields<\/li>\n<li>Screen-reader text on sort controls<\/li>\n<\/ul>\n\n<h4>Responsive Design<\/h4>\n\n<p>Both course and category grids include responsive column breakpoints for desktop, tablet, and mobile. Filter panels support vertical (sidebar) and horizontal (toolbar) layouts.<\/p>\n\n<h3>Tutorials &amp; Guides<\/h3>\n\n<ul>\n<li><a href=\"https:\/\/www.userelements.com\/list\/tutor-lms-website-examples\/\">17 Awesome Websites Made with Tutor LMS<\/a><\/li>\n<li><a href=\"https:\/\/www.userelements.com\/tutor-lms-shortcodes\/\">The Complete List of Tutor LMS Shortcodes and How to Use Them \u2013 Tutor LMS<\/a><\/li>\n<li><a href=\"https:\/\/www.userelements.com\/sending-reminder-emails-to-inactive-students-tutor-lms\/\">Sending Reminder Emails to Inactive Students \u2013 Tutor LMS<\/a><\/li>\n<li><a href=\"https:\/\/www.userelements.com\/tutor-lms-get-student-information-in-php\/\">Tutor LMS \u2013 Get Student Information in PHP<\/a><\/li>\n<li><a href=\"https:\/\/www.userelements.com\/remove-tutor-reviews\/\">How to Hide, Remove or Disable Reviews or Star Rating in Tutor LMS<\/a><\/li>\n<li><a href=\"https:\/\/userelements.com\/create-user-directory-elementor\/\">Create a User Directory with Elementor<\/a><\/li>\n<li><a href=\"https:\/\/www.userelements.com\/list\/best-wordpress-lms-plugins\/\">Best WordPress LMS Plugins to Create and Sell Courses Online<\/a><\/li>\n<\/ul>\n\n<h3>More Plugins by UserElements<\/h3>\n\n<ul>\n<li><a href=\"https:\/\/www.userelements.com\/mightymenu-tutorlms\/\">Personalized User Menu for TutorLMS<\/a><\/li>\n<li><a href=\"https:\/\/www.userelements.com\/wp-user-data\/\">WP User Data<\/a><\/li>\n<li><a href=\"https:\/\/www.userelements.com\/user-broadcast-email\/\">User Broadcast Email<\/a><\/li>\n<li><a href=\"https:\/\/wordpress.org\/plugins\/product-table-for-elementor\">Elementor Product Table for WooCommerce<\/a><\/li>\n<\/ul>\n\n<h3>Support<\/h3>\n\n<p>For technical support, feature requests, or general questions, please visit userelements.com or create a support ticket in the WordPress.org plugin forum.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin files to the <code>\/wp-content\/plugins\/course-layouts-elementor-addon-for-tutorlms<\/code> directory, or install through the WordPress plugins screen.<\/li>\n<li>Activate the plugin through the <strong>Plugins<\/strong> screen in WordPress.<\/li>\n<li>Ensure both <strong>Elementor<\/strong> and <strong>Tutor LMS<\/strong> are installed and activated.<\/li>\n<li>Edit any page with Elementor and find widgets under <strong>Essential TutorLMS<\/strong>.<\/li>\n<li>For a basic course catalog: add <strong>Course Directory Grid<\/strong>, configure columns and card options, enable pagination if needed.<\/li>\n<li>For a composable layout: set a <strong>Listing ID<\/strong> on the grid, then add <strong>Course Filter Panel<\/strong>, <strong>Course Search<\/strong>, <strong>Active Filter Chips<\/strong>, and <strong>Sort &amp; Result Count<\/strong> with the same ID.<\/li>\n<li>For student dashboards: add <strong>Continue Learning<\/strong> and <strong>My Courses<\/strong> to your dashboard page.<\/li>\n<li>For custom card designs: create an Elementor Loop Item template, bind Tutor Dynamic Tags, then select it under <strong>Card Skin \u2192 Loop Item \/ Template<\/strong> on the grid.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20plugin%20require%20tutor%20lms%3F\"><h3>Does this plugin require Tutor LMS?<\/h3><\/dt>\n<dd><p>Yes. Course Layouts extends Tutor LMS with Elementor widgets. Tutor LMS must be installed and active.<\/p><\/dd>\n<dt id=\"does%20this%20plugin%20require%20elementor%3F\"><h3>Does this plugin require Elementor?<\/h3><\/dt>\n<dd><p>Yes. All widgets are built for the Elementor page builder. Elementor Pro is optional but recommended for Loop Item templates.<\/p><\/dd>\n<dt id=\"how%20do%20standalone%20filters%20connect%20to%20the%20course%20grid%3F\"><h3>How do standalone filters connect to the course grid?<\/h3><\/dt>\n<dd><p>Set the same <strong>Listing ID<\/strong> on the Course Directory Grid and on any standalone widget (Filter Panel, Search, Chips, Sort bar). They communicate via the built-in CLETA.Bus without extra configuration.<\/p><\/dd>\n<dt id=\"can%20i%20customize%20the%20course%20grid%20layout%3F\"><h3>Can I customize the course grid layout?<\/h3><\/dt>\n<dd><p>Yes. Choose 1\u20136 responsive columns, toggle every card element, and style cards, titles, meta, pagination, and filters in Elementor. For fully custom designs, switch to the Loop Item \/ Saved Template card skin. List and masonry layouts for the course grid are planned for a future release.<\/p><\/dd>\n<dt id=\"can%20i%20design%20my%20own%20course%20cards%3F\"><h3>Can I design my own course cards?<\/h3><\/dt>\n<dd><p>Yes. Set <strong>Card Skin<\/strong> to <strong>Loop Item \/ Template<\/strong>, create a Loop Item in Elementor Theme Builder (or pick a Saved Template), bind <strong>Tutor LMS (CLETA)<\/strong> Dynamic Tags, and select the template on the widget. Custom cards work with AJAX filtering, load more, and pagination.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20support%20filtering%20and%20search%3F\"><h3>Does the plugin support filtering and search?<\/h3><\/dt>\n<dd><p>Yes. Filter by category, level, instructor, tags, price, rating, and duration\u2014with facet counts, range sliders, and auto-apply. Search is available embedded in the grid or via the standalone Search widget.<\/p><\/dd>\n<dt id=\"can%20i%20build%20a%20student%20dashboard%3F\"><h3>Can I build a student dashboard?<\/h3><\/dt>\n<dd><p>Yes. Use <strong>Continue Learning<\/strong> for the latest in-progress course and <strong>My Courses<\/strong> for enrolled, in-progress, completed, or wishlisted course grids with progress bars and resume CTAs.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20support%20instructor%20listings%3F\"><h3>Does the plugin support instructor listings?<\/h3><\/dt>\n<dd><p>Yes. The <strong>Instructor Directory<\/strong> widget lists Tutor instructors with search, category filter, ratings, course\/student counts, bios, and profile links.<\/p><\/dd>\n<dt id=\"is%20the%20plugin%20responsive%3F\"><h3>Is the plugin responsive?<\/h3><\/dt>\n<dd><p>Yes. Course and category grids include responsive column breakpoints. Filter panels support vertical and horizontal layouts.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20support%20seo%3F\"><h3>Does the plugin support SEO?<\/h3><\/dt>\n<dd><p>The Course Directory Grid outputs ItemList \/ Course JSON-LD schema when displaying 3 or more courses. Single-course schema auto-injection is disabled to avoid duplicate markup from Tutor LMS or SEO plugins.<\/p><\/dd>\n<dt id=\"can%20i%20use%20pagination%20with%20the%20course%20grid%3F\"><h3>Can I use pagination with the course grid?<\/h3><\/dt>\n<dd><p>Yes. Choose numbered pagination, a load-more button, or infinite scroll. Configure courses per page from 1 to 100.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20work%20with%20woocommerce%3F\"><h3>Does the plugin work with WooCommerce?<\/h3><\/dt>\n<dd><p>Yes. Course prices and purchasable state come from Tutor LMS, including WooCommerce monetization. CTAs link to the course page for enrollment or checkout.<\/p><\/dd>\n<dt id=\"can%20i%20filter%20courses%20by%20multiple%20criteria%3F\"><h3>Can I filter courses by multiple criteria?<\/h3><\/dt>\n<dd><p>Yes. Combine up to 6 filter fields in the grid (or 8 in the standalone Filter Panel). Active Filter Chips show applied filters and let visitors remove them individually.<\/p><\/dd>\n<dt id=\"are%20filter%20selections%20shareable%20via%20url%3F\"><h3>Are filter selections shareable via URL?<\/h3><\/dt>\n<dd><p>Yes. Enable <strong>URL Parameters<\/strong> on the grid. Filter and search state is written to the URL and restored on page load and browser Back\/Forward.<\/p><\/dd>\n<dt id=\"is%20the%20plugin%20accessible%3F\"><h3>Is the plugin accessible?<\/h3><\/dt>\n<dd><p>Filter and search controls include ARIA labels, live region announcements for result updates, and Enter-key handling. Skeleton loading uses <code>aria-busy<\/code> during AJAX requests.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20support%20theme%20builder%20archives%3F\"><h3>Does the plugin support Theme Builder archives?<\/h3><\/dt>\n<dd><p>Yes. Set <strong>Query Source<\/strong> to <strong>Current Query<\/strong> inside an Elementor Theme Builder archive template. The widget snapshots the archive tax\/author\/search context so AJAX filtering stays scoped to the archive.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Honest readme: removed claims for layouts, columns, price\/CTA display, and filters that were not implemented<\/li>\n<li>Assets register-only; enqueued via Elementor widget dependencies<\/li>\n<li>Removed site-wide Elementor post scan on AJAX fallback; settings cached in a transient at render time<\/li>\n<li>Fixed Tutor 4.x price API usage (get_raw_course_price) for schema and meta helpers<\/li>\n<li>Fixed load-more ignoring sort order; fixed pagination \"Showing X\u2013Y of Z\" count<\/li>\n<li>Guarded frontend JS against missing localized widget settings<\/li>\n<li>Schema: use real course duration meta; stop fabricating timeRequired; stop truncating descriptions to 60 chars<\/li>\n<li>Removed empty content_template that blanked the Elementor editor preview<\/li>\n<li>Removed shadow of Tutor core get_tutor_course_duration_context(); disabled auto schema on single course pages<\/li>\n<li>Listing ID + CLETA.Bus pub\/sub: standalone filters, search, chips, and sort drive any Course Grid<\/li>\n<li>New widgets: Course Filter Panel, Course Search, Active Filter Chips, Sort &amp; Result Count<\/li>\n<li>New widgets: Continue Learning, My Courses (student dashboard)<\/li>\n<li>Elementor Dynamic Tags group for Tutor course fields (price, level, duration, rating, progress, instructor, and more)<\/li>\n<li>Course Grid Listing ID control; URL params work with external filters<\/li>\n<li>Loop Item \/ Saved Template card skin for Course Directory Grid and My Courses (AJAX + load-more aware)<\/li>\n<li>Instructor Directory widget: search, category filter, sort, ratings, course\/student counts, profile CTA<\/li>\n<li>Responsive 1\u20136 column control on the course grid<\/li>\n<li>Price display (free, sale, membership, subscription-aware labels)<\/li>\n<li>State-aware Enroll \/ Buy \/ Start \/ Continue CTA and enrolled progress bar<\/li>\n<li>Working level filter via <code>_tutor_course_level<\/code> meta; price, rating, and duration filters applied in the query<\/li>\n<li>Filter repeater raised to 6 fields; courses_count capped at 100<\/li>\n<li>URL filter state restored on load and on browser Back (popstate); Clear All unchecks checkboxes\/radios<\/li>\n<li>Price sort uses Tutor 4.x <code>tutor_course_price<\/code> meta key<\/li>\n<li>excerpt_length control now honored in the card<\/li>\n<li>Filters auto-apply on change; range sliders debounce reload<\/li>\n<li>Default level filter uses Tutor course_levels() meta (not course-level taxonomy)<\/li>\n<li>AJAX settings are server-authoritative only (no client widget_settings override)<\/li>\n<li>Removed unused search_fields control and dead render_course_meta stub<\/li>\n<li>ARIA labels and Enter-key handling always on (removed feature-flag toggles)<\/li>\n<li>Removed non-functional rating\/enrollment\/duration\/lesson sort options until a sort index exists<\/li>\n<li>Packaging: index.php silencers, uninstall.php (clears cleta_ws_* transients), load_plugin_textdomain + languages\/<\/li>\n<li>Query Source: All \/ Current Query (archive) \/ Enrolled \/ Not enrolled \/ In progress \/ Completed \/ Wishlisted<\/li>\n<li>Current Query snapshots archive tax\/author\/search for AJAX so Theme Builder course archives work<\/li>\n<li>Price and duration filter buckets derived from catalog data + site currency (cached)<\/li>\n<li>Range sliders use real min\/max\/step for price, rating, and duration<\/li>\n<li>Facet counts on category\/tag\/level filters; empty options hidden<\/li>\n<li>Zero-results recovery with removable filter chips<\/li>\n<li>Course badges (New \/ Free \/ Bestseller), wishlist heart, whole-card stretched link<\/li>\n<li>Skeleton loading states and aria-live result announcements<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Fixed wp_enqueue_scripts and other WordPress integration issues<\/li>\n<li>Improved AJAX error handling and security<\/li>\n<li>Enhanced widget settings management<\/li>\n<li>Added better fallback handling for missing dependencies<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release with Course Directory Grid widget<\/li>\n<li>Course Categories Grid widget<\/li>\n<li>Advanced filtering and search functionality<\/li>\n<li>AJAX-powered pagination and load more<\/li>\n<li>SEO schema markup integration<\/li>\n<li>Responsive design and accessibility features<\/li>\n<li>Extensive customization options<\/li>\n<\/ul>","raw_excerpt":"Build TutorLMS course catalogs, filters, student dashboards, and instructor directories in Elementor\u2014with AJAX, dynamic tags, and schema markup.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/246586","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=246586"}],"author":[{"embeddable":true,"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/userelements"}],"wp:attachment":[{"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=246586"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=246586"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=246586"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=246586"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=246586"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=246586"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}