{"id":4172,"date":"2026-08-12T19:29:54","date_gmt":"2026-08-12T17:29:54","guid":{"rendered":"https:\/\/iberforma.es\/extensiones\/moodle-theme-rules\/"},"modified":"2026-08-12T19:29:54","modified_gmt":"2026-08-12T17:29:54","slug":"moodle-theme-rules","status":"publish","type":"page","link":"https:\/\/iberforma.es\/en\/extensiones\/moodle-theme-rules\/","title":{"rendered":"Theme Rules for Moodle\u2122: dynamic themes and logos"},"content":{"rendered":"<section class=\"iberforma-extension-hero\">\n  <p class=\"iberforma-extension-kicker\">Dynamic themes and logos for Moodle\u2122<\/p>\n  <h2>Theme Rules: a distinct visual experience for every audience<\/h2>\n  <p class=\"iberforma-extension-lead\">Automatically apply a theme and logo by user, cohort, course, category, group, tag, profile field or device. Everything is managed with visual rules and no code changes.<\/p>\n  <div class=\"iberforma-extension-actions\">\n    <a class=\"iberforma-extension-button\" href=\"https:\/\/github.com\/jlsimon\/moodle-local_themerules\" target=\"_blank\" rel=\"noopener\">View on GitHub<\/a>\n    <a class=\"iberforma-extension-button is-secondary\" href=\"https:\/\/github.com\/jlsimon\/moodle-local_themerules\/releases\/tag\/v0.1.0\" target=\"_blank\" rel=\"noopener\">Download v0.1.0<\/a>\n    <a class=\"iberforma-extension-button is-secondary\" href=\"#guia-theme-rules\">View user guide<\/a>\n  <\/div>\n  <div class=\"iberforma-extension-meta\"><span>Moodle 4.5+<\/span><span>No external dependencies<\/span><span>GNU GPL v3+<\/span><span>Beta v0.1.0<\/span><\/div>\n  <figure class=\"iberforma-extension-shot is-hero\"><img fetchpriority=\"high\" decoding=\"async\" src=\"https:\/\/iberforma.es\/wp-content\/uploads\/2026\/08\/theme-rules-13-final-rule-list-en.png.png\" alt=\"Theme Rules rule list in Moodle\" width=\"1280\" height=\"800\" loading=\"eager\"><figcaption>Ordered, auditable rules control themes and logos from a single screen.<\/figcaption><\/figure>\n<\/section>\n\n<section class=\"iberforma-extension-grid\">\n  <article class=\"iberforma-extension-card\"><h3>Branding by audience<\/h3><p>Give each company, cohort or audience its own theme and logo on one platform.<\/p><\/article>\n  <article class=\"iberforma-extension-card\"><h3>Exam mode<\/h3><p>Enable a clean theme for every course carrying a tag such as <code>exam-mode<\/code>.<\/p><\/article>\n  <article class=\"iberforma-extension-card\"><h3>Design by device<\/h3><p>Use a lighter interface on mobile without changing the desktop experience.<\/p><\/article>\n<\/section>\n\n<section class=\"iberforma-extension-panel\">\n  <h2>Powerful rules without coding<\/h2>\n  <p>The visual builder combines conditions through nested AND\/OR groups. Each rule can change the theme, navigation logo or both; if none matches, Moodle\u2122 keeps its normal behaviour.<\/p>\n  <ul>\n    <li>Conditions by user, course, category and descendants, cohort, group, tag, profile or device.<\/li>\n    <li>Assisted user and course search, with selectors based on the site's real data.<\/li>\n    <li>Top-to-bottom evaluation, with theme and logo resolved independently.<\/li>\n    <li>Reusable logo library with no duplicate files.<\/li>\n    <li>A simulator explains which rules match and what result would apply.<\/li>\n    <li>JSON export and import; imported rules remain disabled for review.<\/li>\n  <\/ul>\n<\/section>\n\n<section class=\"iberforma-extension-panel\">\n  <h2>Safe control before affecting real users<\/h2>\n  <div class=\"iberforma-extension-grid\">\n    <article class=\"iberforma-extension-card\"><h3>Explainable simulation<\/h3><p>Test a user, course and device and see matches, reasons and the result without altering any session.<\/p><\/article>\n    <article class=\"iberforma-extension-card\"><h3>Deliberate activation<\/h3><p>An installation with no rules changes nothing. Imported rules arrive disabled.<\/p><\/article>\n    <article class=\"iberforma-extension-card\"><h3>Moodle\u2122 privacy<\/h3><p>It only reads data already held by Moodle and declares that it stores no personal data.<\/p><\/article>\n  <\/div>\n<\/section>\n\n<section class=\"iberforma-extension-panel\">\n  <h2>Technical sheet<\/h2>\n  <div class=\"iberforma-extension-specs\">\n    <div><strong>Component<\/strong><code>local_themerules<\/code><\/div><div><strong>Type<\/strong>Moodle\u2122 local plugin<\/div>\n    <div><strong>Compatibility<\/strong>Moodle 4.5 or later<\/div><div><strong>Themes<\/strong>Boost-compatible<\/div>\n    <div><strong>Status<\/strong>Beta, version 0.1.0<\/div><div><strong>License<\/strong>GNU GPL v3 or later<\/div>\n    <div><strong>Dependencies<\/strong>None external<\/div><div><strong>Actions<\/strong>Theme and navigation logo<\/div>\n  <\/div>\n<\/section>\n\n<section class=\"iberforma-extension-panel\">\n  <h2>Installation and first steps<\/h2>\n  <ol><li>Download the release and copy the folder as <code>local\/themerules<\/code>.<\/li><li>Open <strong>Site administration \u2192 Notifications<\/strong> or run <code>php admin\/cli\/upgrade.php<\/code>.<\/li><li>Go to <strong>Appearance \u2192 Theme rules<\/strong> and upload logos to the library if needed.<\/li><li>Create a rule, simulate it and enable it when the result is as expected.<\/li><\/ol>\n  <div class=\"iberforma-extension-actions\"><a class=\"iberforma-extension-button\" href=\"https:\/\/github.com\/jlsimon\/moodle-local_themerules\/archive\/refs\/tags\/v0.1.0.zip\" target=\"_blank\" rel=\"noopener\">Download v0.1.0 code<\/a><a class=\"iberforma-extension-button is-secondary\" href=\"https:\/\/github.com\/jlsimon\/moodle-local_themerules\" target=\"_blank\" rel=\"noopener\">Repository and documentation<\/a><\/div>\n<\/section>\n\n<section id=\"guia-theme-rules\" class=\"iberforma-extension-panel mavail-guide\">\n  <h2>Illustrated user guide<\/h2><p>A real walkthrough of setup, three use cases and the validation tools.<\/p>\n  \n  <div lang=\"en\" class=\"mavail-guide-language\">\n    <details open><summary>1. Start without changing Moodle<\/summary><div class=\"mavail-guide-content\"><p>With an empty list, the site keeps its normal theme selection. This screen provides access to rules, logos, simulation, import and export.<\/p><figure class=\"iberforma-extension-shot\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/iberforma.es\/wp-content\/uploads\/2026\/08\/theme-rules-01-rule-list-empty-en.png.png\" alt=\"Empty Theme Rules list\" width=\"1280\" height=\"800\"><figcaption>Nothing changes until a rule is enabled.<\/figcaption><\/figure><\/div><\/details>\n    <details open><summary>2. Create branding rules for several companies<\/summary><div class=\"mavail-guide-content\"><p>The form combines one condition with a theme, a logo or both. Here, two cohorts receive different identities on the same platform.<\/p><div class=\"iberforma-screenshot-grid is-two\"><figure class=\"iberforma-extension-shot\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/iberforma.es\/wp-content\/uploads\/2026\/08\/theme-rules-02-create-rule-form-empty-en.png.png\" alt=\"Empty rule creation form\" width=\"1280\" height=\"800\"><figcaption>New rule form.<\/figcaption><\/figure><figure class=\"iberforma-extension-shot\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/iberforma.es\/wp-content\/uploads\/2026\/08\/theme-rules-03-create-rule-nimbus-filled-en.png.png\" alt=\"Cohort rule with theme and logo\" width=\"1280\" height=\"800\"><figcaption>Nimbus cohort with its own theme and logo.<\/figcaption><\/figure><figure class=\"iberforma-extension-shot\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/iberforma.es\/wp-content\/uploads\/2026\/08\/theme-rules-04-rule-list-two-rules-en.png.png\" alt=\"Two active branding rules\" width=\"1280\" height=\"800\"><figcaption>Visible evaluation order.<\/figcaption><\/figure><\/div><\/div><\/details>\n    <details><summary>3. Check each audience's experience<\/summary><div class=\"mavail-guide-content\"><p>The condition follows the person across the site. Two learners connected to the same installation see their own visual identity.<\/p><div class=\"iberforma-screenshot-grid is-two\"><figure class=\"iberforma-extension-shot\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/iberforma.es\/wp-content\/uploads\/2026\/08\/theme-rules-05-student-diego-nimbus-view-en.png.png\" alt=\"Learner with Nimbus branding\" width=\"1280\" height=\"800\"><figcaption>Nimbus Robotics experience.<\/figcaption><\/figure><figure class=\"iberforma-extension-shot\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/iberforma.es\/wp-content\/uploads\/2026\/08\/theme-rules-06-student-priya-solaris-view-en.png.png\" alt=\"Learner with Solaris branding\" width=\"1280\" height=\"800\"><figcaption>Solaris Retail experience.<\/figcaption><\/figure><\/div><\/div><\/details>\n    <details><summary>4. Enable exam mode with a course tag<\/summary><div class=\"mavail-guide-content\"><p>A course tag can activate a distraction-free theme. Adding or removing it is enough to control future exam sessions.<\/p><div class=\"iberforma-screenshot-grid is-two\"><figure class=\"iberforma-extension-shot\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/iberforma.es\/wp-content\/uploads\/2026\/08\/theme-rules-07-course-baseline-en.png.png\" alt=\"Course with the default theme\" width=\"1280\" height=\"800\"><figcaption>Course before the rule applies.<\/figcaption><\/figure><figure class=\"iberforma-extension-shot\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/iberforma.es\/wp-content\/uploads\/2026\/08\/theme-rules-08-create-rule-exammode-en.png.png\" alt=\"Rule for the exam-mode tag\" width=\"1280\" height=\"800\"><figcaption>Tag-based rule.<\/figcaption><\/figure><figure class=\"iberforma-extension-shot\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/iberforma.es\/wp-content\/uploads\/2026\/08\/theme-rules-09-add-examtag-to-course-en.png.png\" alt=\"Adding the exam-mode tag to a course\" width=\"1280\" height=\"800\"><figcaption>Activation in course settings.<\/figcaption><\/figure><figure class=\"iberforma-extension-shot\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/iberforma.es\/wp-content\/uploads\/2026\/08\/theme-rules-10-course-exammode-after-en.png.png\" alt=\"Course with the exam theme applied\" width=\"1280\" height=\"800\"><figcaption>Distraction-free result.<\/figcaption><\/figure><\/div><\/div><\/details>\n    <details><summary>5. Adapt the theme to mobile<\/summary><div class=\"mavail-guide-content\"><p>The device condition applies a lightweight theme only when Moodle detects a phone; desktop remains unchanged.<\/p><div class=\"iberforma-screenshot-grid is-two\"><figure class=\"iberforma-extension-shot\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/iberforma.es\/wp-content\/uploads\/2026\/08\/theme-rules-11-create-rule-device-en.png.png\" alt=\"Rule for mobile devices\" width=\"1280\" height=\"800\"><figcaption>Condition by device type.<\/figcaption><\/figure><figure class=\"iberforma-extension-shot\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/iberforma.es\/wp-content\/uploads\/2026\/08\/theme-rules-14-course-mobile-view-en.png.png\" alt=\"Course with a mobile theme\" width=\"1170\" height=\"1992\"><figcaption>The same course with a dedicated mobile experience.<\/figcaption><\/figure><\/div><\/div><\/details>\n    <details><summary>6. Simulate, order and move rules<\/summary><div class=\"mavail-guide-content\"><p>The simulator explains every match before changes are enabled. The final list lets administrators order rules and export or import them between environments.<\/p><div class=\"iberforma-screenshot-grid is-two\"><figure class=\"iberforma-extension-shot\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/iberforma.es\/wp-content\/uploads\/2026\/08\/theme-rules-12-simulator-en.png.png\" alt=\"Theme Rules simulator\" width=\"1280\" height=\"1550\"><figcaption>Rule diagnostics and final result.<\/figcaption><\/figure><figure class=\"iberforma-extension-shot\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/iberforma.es\/wp-content\/uploads\/2026\/08\/theme-rules-13-final-rule-list-en.png.png\" alt=\"Final ordered rule list\" width=\"1280\" height=\"800\"><figcaption>Complete, portable configuration.<\/figcaption><\/figure><\/div><\/div><\/details>\n  <\/div>\n<\/section>\n\n<section class=\"iberforma-extension-panel\"><h2>Professional support<\/h2><p>Iberforma can help design the branding strategy, model rules, validate priorities and move configurations between Moodle\u2122 environments.<\/p><div class=\"iberforma-extension-actions\"><a class=\"iberforma-extension-button\" href=\"\/en\/contacto\/\">Ask about Theme Rules<\/a><a class=\"iberforma-extension-button is-secondary\" href=\"\/en\/extensiones\/\">View more open source extensions<\/a><\/div><\/section>","protected":false},"excerpt":{"rendered":"<p>Temas y logos din\u00e1micos para Moodle\u2122 Theme Rules: una experiencia visual distinta para cada audiencia Aplique autom\u00e1ticamente un tema y un logo seg\u00fan usuario, cohorte, curso, categor\u00eda, grupo, etiqueta, campo de perfil o dispositivo. Todo se gestiona con reglas visuales y sin modificar el c\u00f3digo. Ver en GitHub Descargar v0.1.0 Ver gu\u00eda de uso Moodle [&hellip;]<\/p>\n","protected":false},"author":0,"featured_media":0,"parent":4018,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-4172","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/iberforma.es\/en\/wp-json\/wp\/v2\/pages\/4172","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/iberforma.es\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/iberforma.es\/en\/wp-json\/wp\/v2\/types\/page"}],"replies":[{"embeddable":true,"href":"https:\/\/iberforma.es\/en\/wp-json\/wp\/v2\/comments?post=4172"}],"version-history":[{"count":0,"href":"https:\/\/iberforma.es\/en\/wp-json\/wp\/v2\/pages\/4172\/revisions"}],"up":[{"embeddable":true,"href":"https:\/\/iberforma.es\/en\/wp-json\/wp\/v2\/pages\/4018"}],"wp:attachment":[{"href":"https:\/\/iberforma.es\/en\/wp-json\/wp\/v2\/media?parent=4172"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}