=== 4WP Style Switcher === Contributors: 4wpdev Tags: full-site-editing, theme.json, dark mode, style variations, block-theme Requires at least: 6.4 Tested up to: 7.0 Requires PHP: 7.4 Stable tag: 1.0.1 License: GPLv2 or later License URI: https://www.gnu.org/licenses/gpl-2.0.html Apply theme.json style variations per page or let visitors switch styles on the frontend (FSE block themes). == Description == 4WP Style Switcher reads **style variations** from the active block theme (`theme.json` and `/styles/*.json`). A plugin by [4wp.dev](https://4wp.dev/). **4WP** is our project brand; the letters "WP" appear only as part of that brand name, not as a reference to WordPress. This plugin is not affiliated with, endorsed, or sponsored by WordPress. Source code and releases: [github.com/4wpdev/4wp-style-switcher](https://github.com/4wpdev/4wp-style-switcher) = Development = Human-readable PHP source is in the public GitHub repository above. The plugin ZIP includes `src/` (PSR-4 autoload via `src/Autoload.php` when `vendor/` is absent). No npm build step — front-end scripts ship as plain JS in `assets/`. **Live demo (WordPress Playground):** https://playground.wordpress.net/?blueprint-url=https://raw.githubusercontent.com/4wpdev/4wp-style-switcher/v1.0.0/.wordpress-org/assets/blueprints/blueprint.json The demo site **Style Switcher** uses Twenty Twenty-Five: About, Morning, Afternoon, and Evening pages with per-page styles, A/B light vs dark, a bottom-right visitor switcher, and Light/Dark in the header and footer menus. **Page style (editor)** — pick a variation for a page; optionally lock it so visitors cannot override it. **Frontend switcher** — visitors choose from allowed variations; the choice is stored in localStorage and synced to a cookie for server-side rendering. **Light / Dark (navigation block)** — add the Light/Dark block inside Navigation; map two variations (sun/moon icons). **A/B testing** — split new visitors between two variations; daily aggregate stats monitor the traffic split. = Privacy = When the visitor switcher or A/B testing is enabled, the plugin may store the selected style variation in a browser cookie (`forwp_ss_style`) and in localStorage on the visitor device. No personal data is sent to third-party services. A/B stats are aggregated counts stored in your WordPress database. == Blocks == This plugin provides 1 block. * **Light / Dark** — menu toggle between two mapped theme style variations (sun/moon icons). == Installation == 1. Upload and activate the plugin. 2. Go to **Settings → 4WP Style Switcher**. 3. On **Variations**, check which style variations visitors may use. 4. Under **General**, set the default variation and optional Light/Dark mapping. 5. Edit a page → **Page style** panel to assign or lock a variation. 6. In the site editor, insert **Light / Dark** inside the **Navigation** block. == Frequently Asked Questions == = Which themes are supported? = Block themes (FSE) that ship style variations under the theme’s `/styles/` directory. = Where is the Playground demo configured? = In the GitHub repository: `playground/setup.php` and `.wordpress-org/assets/blueprints/blueprint.json`. = Does the floating switcher list every theme variation? = It lists variations allowed on the **Variations** settings tab. The menu Light/Dark block uses only the two variations mapped under **General**. == Screenshots == 1. Settings — General tab (default variation, visitor switcher, Light/Dark mapping). 2. Settings — Variations tab (allowed style variations). 3. Frontend — floating style switcher and menu Light/Dark toggle on Twenty Twenty-Five. == Upgrade Notice == = 1.0.1 = Review T1: Plugin URI points to 4wp.dev; removed Playground URL constant from plugin PHP (demo link remains in readme only). = 1.0.0 = First WordPress.org release. Plugin Check fixes, readme trademark disclaimer, Playground blueprint v1.0.0. = 0.2.5 = Performance: request-level caching for style resolution and theme.json variation lookups. = 0.2.4 = Playground demo: per-page theme.json titles, Afternoon locked, Light/Dark disabled when locked. = 0.2.3 = = 0.2.1 = Fixes style switching on WordPress Playground (HTTPS cookie + dynamic demo slugs). = 0.2.0 = First feature release: visitor switcher, Light/Dark navigation block, A/B stats, and Playground demo. == Changelog == = 1.0.1 = * Plugin URI: https://4wp.dev/ (GitHub link stays in readme Development section). * Removed `FORWP_STYLE_SWITCHER_PLAYGROUND_URL` from plugin PHP; no remote URLs in runtime code. = 1.0.0 = * First WordPress.org release (1.0.0). * Plugin Check: inline script moved to enqueued assets; security and naming fixes. * readme.txt: 4WP trademark disclaimer, Development, Blocks, Privacy sections. * Playground blueprint and demo links updated for v1.0.0. = 0.2.5 = * Request-level caching in Style_Registry, Style_Resolver, and Style_Applicator (faster page loads). * GitHub README banner; Playground blueprint and demo links updated for v0.2.5. = 0.2.4 = * Playground demo pages use theme.json variation titles (single H1 from template, slug in content). * Morning / Afternoon / Evening / Night pages with matching per-page styles; Afternoon locked. * Light/Dark menu toggle disabled when page style switching is locked. = 0.2.3 = * Per-page style meta, A/B light vs dark, visitor switcher bottom-right, two locked demo pages. * Shared navigation in header and footer template parts. * Fix Documentation tab accordion spacing in admin. = 0.2.2 = * Apply visitor style from the query param on the same request (no redirect; works in Playground iframe). * Clean the style query param from the URL after the page loads. = 0.2.1 = * Fix visitor style switching on WordPress Playground (server-side cookie via query param). * Playground setup resolves variation slugs from the active theme dynamically. * Cookie sync uses Secure flag on HTTPS. = 0.2.0 = * Style registry and resolver for theme.json variations. * Admin settings (General, Variations, A/B Testing) with REST API. * Frontend floating switcher with localStorage and cookie sync. * Light/Dark Gutenberg block for the Navigation menu. * A/B testing with lightweight daily stats table. * WordPress Playground blueprint (Morning / Afternoon / Midnight demo). * Fixes: empty allowed-variations recovery, A/B REST recursion, partial settings save. = 0.1.0 = * Initial scaffold. == Other Notes == **Hooks (developers)** * `forwp_style_switcher_variations` — filter theme variation list. * `forwp_style_switcher_ab_assigned` — after A/B cohort assignment. * `forwp_style_switcher_analytics_track` — analytics events. * `forwp_style_switcher_ab_assignment_enabled` — filter A/B assignment.