{"id":362386,"date":"2026-09-06T10:34:44","date_gmt":"2026-09-06T10:34:44","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/gt-blocks-for-tutor-lms\/"},"modified":"2026-09-06T10:36:19","modified_gmt":"2026-09-06T10:36:19","slug":"kouib-blocks-for-tutor-lms","status":"publish","type":"plugin","link":"https:\/\/ar.wordpress.org\/plugins\/kouib-blocks-for-tutor-lms\/","author":14451522,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.1","requires":"6.3","requires_php":"7.4","requires_plugins":null,"header_name":"Kouib Blocks for Tutor LMS","header_author":"kouider bounama","header_description":"Professional Gutenberg blocks for Tutor LMS courses: advanced filter, carousel, categories, instant search and platform stats - with a central settings panel compatible with Kadence and theme.json.","assets_banners_color":"cdcbf2","last_updated":"2026-09-06 10:36:19","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/github.com\/kouiderbounama","rating":0,"author_block_rating":0,"active_installs":0,"downloads":50,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"kouiderbounama","date":"2026-09-06 10:36:19","revision":3683323}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3683499,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3683499,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3683569,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3683671,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3683671,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":{"kouib\/courses-categories":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"kouib\/courses-categories","version":"1.0.0","title":"Tutor Courses Categories","description":"Course category boxes for Tutor LMS with a custom icon per category (upload PNG images and replace or remove them)","category":"kouib-blocks","icon":"category","keywords":["tutor","lms","categories","courses","boxes","icons"],"textdomain":"kouib-blocks-for-tutor-lms","attributes":{"columns":{"type":"number","default":3},"columnsTablet":{"type":"number","default":2},"columnsMobile":{"type":"number","default":1},"icons":{"type":"array","default":[]},"showCount":{"type":"boolean","default":true},"hideEmpty":{"type":"boolean","default":true},"openInNewTab":{"type":"boolean","default":false},"primaryColor":{"type":"string","default":"#2a7be4"}},"supports":{"align":["wide","full"],"color":{"text":true,"background":true},"typography":{"fontSize":true,"lineHeight":true},"spacing":{"padding":true,"margin":true}},"editorScript":"file:.\/index.js","editorStyle":"kouib-categories-style","style":"kouib-categories-style"},"kouib\/courses-filter":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"kouib\/courses-filter","version":"1.0.0","title":"Tutor Courses Filter","description":"Filter Tutor LMS courses by category with ordering by student count","category":"kouib-blocks","icon":"welcome-learn-more","keywords":["tutor","lms","courses","filter"],"textdomain":"kouib-blocks-for-tutor-lms","attributes":{"hasShadow":{"type":"boolean","default":true},"perPage":{"type":"number","default":3},"columns":{"type":"number","default":3},"orderby":{"type":"string","default":"date"},"showAll":{"type":"boolean","default":true},"showLevel":{"type":"boolean","default":true},"showRating":{"type":"boolean","default":true},"showLessons":{"type":"boolean","default":true},"showDuration":{"type":"boolean","default":true},"showPrice":{"type":"boolean","default":true},"showStudents":{"type":"boolean","default":true},"showEnrollBtn":{"type":"boolean","default":true},"enrollBtnText":{"type":"string","default":"Enroll in course"},"openInNewTab":{"type":"boolean","default":false},"primaryColor":{"type":"string","default":"#2a7be4"}},"supports":{"align":["wide","full"],"color":{"text":true,"background":true},"typography":{"fontSize":true,"lineHeight":true},"spacing":{"padding":true,"margin":true}},"editorScript":"file:.\/index.js","editorStyle":"kouib-style","style":"kouib-style","viewScript":"kouib-view"},"kouib\/courses-stats":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"kouib\/courses-stats","version":"1.0.0","title":"Platform Stats","description":"Quick platform stats: student, instructor, course and lesson counts with lightweight caching","category":"kouib-blocks","icon":"chart-bar","keywords":["tutor","lms","stats","courses","students"],"textdomain":"kouib-blocks-for-tutor-lms","attributes":{"showStudents":{"type":"boolean","default":true},"showInstructors":{"type":"boolean","default":true},"showCourses":{"type":"boolean","default":true},"showLessons":{"type":"boolean","default":true},"columns":{"type":"number","default":4},"columnsTablet":{"type":"number","default":2},"columnsMobile":{"type":"number","default":1},"primaryColor":{"type":"string","default":"#2a7be4"},"showLabels":{"type":"boolean","default":true},"iconStyle":{"type":"string","default":"outline"}},"supports":{"align":["wide","full"],"color":{"text":true,"background":true},"typography":{"fontSize":true,"lineHeight":true},"spacing":{"padding":true,"margin":true}},"editorScript":"file:.\/index.js","editorStyle":"kouib-stats-style","style":"kouib-stats-style"},"kouib\/courses-search":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"kouib\/courses-search","version":"1.0.0","title":"Tutor Courses Search","description":"Instant search across Tutor LMS courses with live AJAX results \u2014 no page reload","category":"kouib-blocks","icon":"search","keywords":["tutor","lms","search","courses"],"textdomain":"kouib-blocks-for-tutor-lms","attributes":{"placeholder":{"type":"string","default":"Search for a course..."},"fieldWidth":{"type":"number","default":460},"formAlign":{"type":"string","default":"left"},"overlayResults":{"type":"boolean","default":true},"fieldBg":{"type":"string","default":""},"fieldBorder":{"type":"string","default":""},"fieldText":{"type":"string","default":""},"iconColor":{"type":"string","default":""},"perPage":{"type":"number","default":6},"fullPhrase":{"type":"boolean","default":false},"showThumb":{"type":"boolean","default":true},"showPrice":{"type":"boolean","default":true},"showRating":{"type":"boolean","default":true},"showStudents":{"type":"boolean","default":true},"openInNewTab":{"type":"boolean","default":false},"primaryColor":{"type":"string","default":"#2a7be4"}},"supports":{"align":["wide","full"],"color":{"text":true,"background":true},"typography":{"fontSize":true,"lineHeight":true},"spacing":{"padding":true,"margin":true}},"editorScript":"file:.\/index.js","editorStyle":"kouib-search-style","style":"kouib-search-style","viewScript":"kouib-search-view"},"kouib\/courses-carousel":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"kouib\/courses-carousel","version":"1.0.0","title":"Tutor Courses Carousel","description":"Interactive carousel for displaying Tutor LMS courses with full motion and navigation control","category":"kouib-blocks","icon":"slides","keywords":["tutor","lms","courses","carousel","slider"],"textdomain":"kouib-blocks-for-tutor-lms","attributes":{"hasShadow":{"type":"boolean","default":true},"coursesToShow":{"type":"number","default":3},"categories":{"type":"array","default":[]},"columns":{"type":"number","default":3},"columnsTablet":{"type":"number","default":2},"columnsMobile":{"type":"number","default":1},"orderby":{"type":"string","default":"date"},"autoplay":{"type":"boolean","default":true},"autoplaySpeed":{"type":"number","default":3000},"speed":{"type":"number","default":500},"infiniteLoop":{"type":"boolean","default":true},"showArrows":{"type":"boolean","default":true},"showDots":{"type":"boolean","default":true},"pauseOnHover":{"type":"boolean","default":true},"showLevel":{"type":"boolean","default":true},"showRating":{"type":"boolean","default":true},"showLessons":{"type":"boolean","default":true},"showDuration":{"type":"boolean","default":true},"showPrice":{"type":"boolean","default":true},"showStudents":{"type":"boolean","default":true},"showEnrollBtn":{"type":"boolean","default":true},"enrollBtnText":{"type":"string","default":"Enroll in course"},"openInNewTab":{"type":"boolean","default":false},"primaryColor":{"type":"string","default":"#2a7be4"}},"supports":{"align":["wide","full"],"color":{"text":true,"background":true},"typography":{"fontSize":true,"lineHeight":true},"spacing":{"padding":true,"margin":true}},"editorScript":"file:.\/index.js","editorStyle":"kouib-carousel-style","style":"kouib-carousel-style","viewScript":"kouib-carousel-view"}},"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"Platform stats: icon + number + label.","2":"Courses filter with category buttons.","3":"Courses carousel.","4":"Category boxes with counter and custom icons.","5":"Quick search with instant results."}},"plugin_section":[],"plugin_tags":[786,7114,2236,148076,179218],"plugin_category":[50],"plugin_contributors":[279384],"plugin_business_model":[],"class_list":["post-362386","plugin","type-plugin","status-publish","hentry","plugin_tags-carousel","plugin_tags-courses","plugin_tags-filter","plugin_tags-gutenberg","plugin_tags-tutor-lms","plugin_category-media","plugin_contributors-kouiderbounama","plugin_committers-kouiderbounama"],"banners":{"banner":"https:\/\/ps.w.org\/kouib-blocks-for-tutor-lms\/assets\/banner-772x250.png?rev=3683671","banner_2x":"https:\/\/ps.w.org\/kouib-blocks-for-tutor-lms\/assets\/banner-1544x500.png?rev=3683671","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/kouib-blocks-for-tutor-lms\/assets\/icon.svg?rev=3683569","icon":"https:\/\/ps.w.org\/kouib-blocks-for-tutor-lms\/assets\/icon.svg?rev=3683569","icon_2x":false,"generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>The <strong>Kouib Blocks for Tutor LMS<\/strong> package turns a static course listing into a fast, interactive experience inside the Gutenberg block editor \u2014 no complex setup. Add a block and display it anywhere.<\/p>\n\n<p><strong>The five blocks:<\/strong><\/p>\n\n<ol>\n<li><strong>Courses Filter<\/strong> \u2014 a grid of courses with category buttons, custom ordering by student count, and a cache per settings combination. Works on the frontend and in the editor (ServerSideRender).<\/li>\n<li><strong>Courses Carousel<\/strong> \u2014 a responsive slider with side arrows, columns adjustable from the editor, and ordering by newest, most enrolled, or random.<\/li>\n<li><strong>Course Category Boxes<\/strong> \u2014 a grid of categories with a course counter and a link per category, plus a custom icon (PNG\/SVG) per category uploaded straight from the media library.<\/li>\n<li><strong>Quick Search<\/strong> \u2014 an instant (AJAX) search field with live results and no page reload, featuring:\n\n<ul>\n<li>Full Arabic normalization: (\u0623\/\u0625\/\u0622\/\u0671 \u2192 \u0627), (\u0629 \u2192 \u0647), (\u0649 \u2192 \u064a) and diacritics removal, so searching \"\u0627\u0644\u062d\u0633\u0627\u0628\" also finds \"\u0627\u0644\u0645\u062d\u0627\u0633\u0628\u0629\".<\/li>\n<li>Smart relevance ranking: title match &gt; starts with the phrase &gt; contains it.<\/li>\n<li>A \"match exact phrase\" option and a two-letter minimum for words.<\/li>\n<li>Form colors, size and shape adjustable from the editor, with results floating over the page when needed.<\/li>\n<\/ul><\/li>\n<li><strong>Platform Stats<\/strong> \u2014 prominent counters (icon + number + label) for students, instructors, courses and lessons, with a responsive grid (3 breakpoints) and a full panel to show\/hide each statistic and its style.<\/li>\n<\/ol>\n\n<p><strong>Guaranteed performance:<\/strong>\n- Transient cache for every piece (ready HTML or stat numbers) with an active-keys registry.\n- Automatic invalidation on saving\/deleting a course, on new student enrollments, or on rating updates.\n- Light queries: no row-by-row enrollment counting; instructor stats via a single query.\n- Each block's assets load only when the block is present \u2014 no extra CSS\/JS on pages that don't need it.<\/p>\n\n<p><strong>Translation &amp; Arabic:<\/strong>\n- All strings use <code>__()<\/code> with the <code>kouib-blocks-for-tutor-lms<\/code> text domain and are ready for .po\/.mo.\n- Full RTL support and numbers formatted with <code>number_format_i18n<\/code>.\n- Compatible with Kadence and other themes that respect theme.json.<\/p>\n\n<h3>Source Code<\/h3>\n\n<p>The source code for this plugin is publicly available at:\nhttps:\/\/github.com\/kouiderbounama\/kouib-blocks-for-tutor-lms<\/p>\n\n<p>The source code for the compiled block editor scripts is also included in the <code>src\/<\/code> directory of this plugin. Each block's <code>edit.jsx<\/code> file is the human-readable source that generates the corresponding <code>build\/*\/index.js<\/code> file.<\/p>\n\n<p>To regenerate the compiled files:<\/p>\n\n<ol>\n<li>Install Node.js 18+ and run <code>npm install<\/code> in the plugin root.<\/li>\n<li>Run <code>npx wp-scripts build<\/code> to compile the <code>src\/<\/code> directory into <code>build\/<\/code>.<\/li>\n<li>Run <code>node build-i18n.js<\/code> to regenerate translation files.<\/li>\n<\/ol>\n\n<p>The vanilla JavaScript files in <code>assets\/js\/<\/code> (carousel.js, search.js, view.js) are hand-written source files and are not generated by build tools.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin folder to <code>\/wp-content\/plugins\/<\/code> or install it from \"Plugins \u2192 Add New \u2192 Upload Plugin\" (zip file).<\/li>\n<li>Activate the plugin from the \"Plugins\" screen.<\/li>\n<li>Activate <strong>Tutor LMS<\/strong> (the plugin works without it, but shows zero courses).<\/li>\n<li>Open the editor and add any block from the <strong>Kouib Blocks<\/strong> category at the top of the block inserter.<\/li>\n<li>Configure each block from the sidebar settings panel, then publish the page.<\/li>\n<\/ol>\n\n<p><strong>Optional tuning:<\/strong> the HTML cache duration, via the filter:<\/p>\n\n<pre><code>add_filter( 'kouib_cache_ttl', fn() =&gt; 2 * HOUR_IN_SECONDS );\n<\/code><\/pre>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20the%20plugin%20work%20without%20tutor%20lms%3F\"><h3>Does the plugin work without Tutor LMS?<\/h3><\/dt>\n<dd><p>Yes, it activates and registers the blocks; but zero courses\/lessons appear because the content types belong to Tutor. The students statistic relies on the total WordPress user count.<\/p><\/dd>\n<dt id=\"does%20it%20affect%20site%20speed%3F\"><h3>Does it affect site speed?<\/h3><\/dt>\n<dd><p>No; each block gets its own cache, data is computed with light SQL statements and stored in a Transient (30 minutes, adjustable via the filter above), and each block's assets load only when the block is used.<\/p><\/dd>\n<dt id=\"how%20do%20i%20recompute%20student%20counts%20after%20changes%3F\"><h3>How do I recompute student counts after changes?<\/h3><\/dt>\n<dd><p>They are refreshed automatically on: saving\/deleting a course, a new enrollment, or any <code>tutor_after_*<\/code> event \u2014 and the whole cache is flushed when the plugin is updated.<\/p><\/dd>\n<dt id=\"is%20there%20an%20api%20for%20programmatic%20customization%3F\"><h3>Is there an API for programmatic customization?<\/h3><\/dt>\n<dd><p>Yes: <code>kouib_cache_ttl<\/code> (duration), the shared render key <code>kouib_render_course_card<\/code>, and the reusable cache layer <code>kouib_register_active_key<\/code>\/<code>kouib_flush_courses_cache<\/code>.<\/p><\/dd>\n<dt id=\"do%20i%20need%20coding%20skills%20to%20use%20it%3F\"><h3>Do I need coding skills to use it?<\/h3><\/dt>\n<dd><p>No; everything happens in the editor: live preview, colors, columns, icons, show\/hide elements.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>Initial release<\/h4>\n\n<ul>\n<li>Five blocks for Tutor LMS: Courses Filter, Courses Carousel, Course Category Boxes, Quick Search and Platform Stats.<\/li>\n<li>Transient cache per piece with automatic invalidation and selective asset loading.<\/li>\n<li>Central settings panel, full RTL support, Arabic-tolerant search and a bundled Arabic translation.<\/li>\n<li>Clean uninstall (settings and cache removed on deletion).<\/li>\n<\/ul>","raw_excerpt":"Professional Gutenberg blocks for Tutor LMS courses: category filter, carousel, boxes, quick search and platform stats. Full RTL support.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ar.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/362386","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ar.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/ar.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/ar.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=362386"}],"author":[{"embeddable":true,"href":"https:\/\/ar.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/kouiderbounama"}],"wp:attachment":[{"href":"https:\/\/ar.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=362386"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/ar.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=362386"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/ar.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=362386"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/ar.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=362386"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/ar.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=362386"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/ar.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=362386"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}