PHPackages                             soderlind/network-style-override - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. soderlind/network-style-override

ActiveWordpress-plugin[Utility &amp; Helpers](/categories/utility)

soderlind/network-style-override
================================

Network-wide CSS and theme.json overrides for WordPress Multisite

1.0.4(today)016↑2712.5%GPL-2.0-or-laterJavaScriptPHP &gt;=8.3CI passing

Since Jun 30Pushed todayCompare

[ Source](https://github.com/soderlind/network-style-override)[ Packagist](https://packagist.org/packages/soderlind/network-style-override)[ RSS](/packages/soderlind-network-style-override/feed)WikiDiscussions main Synced today

READMEChangelog (10)Dependencies (4)Versions (22)Used By (0)

Network Style Override
======================

[](#network-style-override)

Network-wide CSS and `theme.json` overrides for WordPress Multisite. Enforce brand consistency across all subsites from a single admin panel.

[![Screenshot 2026-06-30 at 20 01 25](https://private-user-images.githubusercontent.com/1649452/615322586-ca69a5f8-222c-4a45-9b20-6504086e797d.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3ODI5Nzg5MzEsIm5iZiI6MTc4Mjk3ODYzMSwicGF0aCI6Ii8xNjQ5NDUyLzYxNTMyMjU4Ni1jYTY5YTVmOC0yMjJjLTRhNDUtOWIyMC02NTA0MDg2ZTc5N2QucG5nP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI2MDcwMiUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNjA3MDJUMDc1MDMxWiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9ODc0ZDlmN2ZkMmIxYmRiNmE2YzkxY2I1NDIwOGViNWVhOTI5MWIzZDY3NmM2MmRkNjY5ZWFkNTQxMzhjODcwNCZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QmcmVzcG9uc2UtY29udGVudC10eXBlPWltYWdlJTJGcG5nIn0.NgrgJBc38o23H5FNgzRrtvxtCyj_kUNpx5miIBb5jFc)](https://private-user-images.githubusercontent.com/1649452/615322586-ca69a5f8-222c-4a45-9b20-6504086e797d.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3ODI5Nzg5MzEsIm5iZiI6MTc4Mjk3ODYzMSwicGF0aCI6Ii8xNjQ5NDUyLzYxNTMyMjU4Ni1jYTY5YTVmOC0yMjJjLTRhNDUtOWIyMC02NTA0MDg2ZTc5N2QucG5nP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI2MDcwMiUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNjA3MDJUMDc1MDMxWiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9ODc0ZDlmN2ZkMmIxYmRiNmE2YzkxY2I1NDIwOGViNWVhOTI5MWIzZDY3NmM2MmRkNjY5ZWFkNTQxMzhjODcwNCZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QmcmVzcG9uc2UtY29udGVudC10eXBlPWltYWdlJTJGcG5nIn0.NgrgJBc38o23H5FNgzRrtvxtCyj_kUNpx5miIBb5jFc)Features
--------

[](#features)

- **CSS Override** — CodeMirror editor, appended after all theme stylesheets (priority 9999)
- **Theme Overrides** — Per-theme CSS and theme.json overrides with visual fields (colors, typography, spacing, borders) + raw JSON editor
- **Deep Merge** — Values merged into the Global Styles (user) layer via `wp_theme_json_data_user`
- **Per-Site Exemptions** — Network admin can exempt individual sites
- **Revision History** — Last 10 saves with one-click restore
- **Preview** — Test changes on a live site before saving
- **Import / Export** — JSON bundle for dev → staging → production promotion
- **Block Theme Aware** — `theme.json` applies to block themes only; classic themes get CSS only

Requirements
------------

[](#requirements)

- WordPress Multisite 6.8+
- PHP 8.3+
- Network activation only

Installation
------------

[](#installation)

### From GitHub Release (recommended)

[](#from-github-release-recommended)

1. Download the latest `network-style-override.zip` from [Releases](https://github.com/soderlind/network-style-override/releases)
2. Upload via **Network Admin → Plugins → Add New → Upload Plugin**
3. **Network Activate** from Network Admin → Plugins

The plugin includes automatic updates — you'll see new versions in WordPress like any other plugin.

### Via Composer

[](#via-composer)

```
composer require soderlind/network-style-override
```

> **Note:** Requires a Composer-based WordPress setup (e.g., Bedrock) with a repository pointing to Packagist or a custom VCS repository.

### For Development

[](#for-development)

```
cd wp-content/plugins
git clone https://github.com/soderlind/network-style-override.git
cd network-style-override
composer install
npm install && npm run build
```

Then **Network Activate** from Network Admin → Plugins.

Usage
-----

[](#usage)

Navigate to **Network Admin → Themes → Override Style**.

TabPurposeCSSRaw CSS editor (CodeMirror)Theme OverridesPer-theme CSS + theme.json (Visual fields + Raw JSON)SitesPer-site exemption togglesHistoryRevision list with restoreImport / ExportJSON download/uploadDevelopment
-----------

[](#development)

```
# Start dev server (hot reload)
npm run start

# Production build
npm run build

# Run PHP tests
composer test

# Lint JS
npm run lint:js
```

### Project Structure

[](#project-structure)

```
├── network-style-override.php   # Plugin bootstrap
├── src/
│   ├── Plugin.php                 # Hook wiring
│   ├── Admin/                     # Network admin page, REST API, Edit Site screen
│   ├── Override/                  # CSS + theme.json injection
│   ├── Preview/                   # Transient-backed draft preview
│   └── Storage/                   # Settings + Revisions repositories
├── resources/js/
│   ├── index.jsx                  # React entry
│   ├── api.js                     # REST client
│   └── components/                # React UI
├── build/                         # Compiled assets
├── languages/                     # POT file
└── tests/                         # PHPUnit + Brain Monkey

```

### Hooks

[](#hooks)

HookTypeDescription`wp_theme_json_data_user`FilterMerges network `theme.json` override`wp_enqueue_scripts` (9999)ActionEnqueues network CSS override### REST API

[](#rest-api)

All endpoints require `manage_network` capability.

MethodEndpointDescriptionGET`/wp-json/mos/v1/settings`Current CSS, theme.json, exemptionsPOST`/wp-json/mos/v1/settings`Save settings (creates revision)GET`/wp-json/mos/v1/revisions`List last 10 revisionsPOST`/wp-json/mos/v1/revisions/{id}/restore`Restore a revisionGET`/wp-json/mos/v1/sites`All sites with exemption statusPOST`/wp-json/mos/v1/sites/{id}/exemption`Toggle exemptionPOST`/wp-json/mos/v1/preview`Create draft, returns preview URLDELETE`/wp-json/mos/v1/preview/{token}`Discard draftGET`/wp-json/mos/v1/export`Download settings bundlePOST`/wp-json/mos/v1/import`Import settings bundleLicense
-------

[](#license)

GPL-2.0-or-later

Author
------

[](#author)

[Per Søderlind](https://soderlind.no)

###  Health Score

45

—

FairBetter than 91% of packages

Maintenance100

Actively maintained with recent releases

Popularity8

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity57

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~0 days

Total

16

Last Release

0d ago

Major Versions

0.7.1 → 1.0.02026-07-01

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/1649452?v=4)[Per Søderlind](/maintainers/soderlind)[@soderlind](https://github.com/soderlind)

---

Top Contributors

[![soderlind](https://avatars.githubusercontent.com/u/1649452?v=4)](https://github.com/soderlind "soderlind (51 commits)")

---

Tags

wordpress-multisitewordpress-pluginwordpress-styleswordpresscssnetworkmultisitestylesoverridebrandingtheme-json

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/soderlind-network-style-override/health.svg)

```
[![Health](https://phpackages.com/badges/soderlind-network-style-override/health.svg)](https://phpackages.com/packages/soderlind-network-style-override)
```

###  Alternatives

[yieldstudio/tailwind-merge-php

Merge Tailwind CSS classes without style conflicts

4975.4k1](/packages/yieldstudio-tailwind-merge-php)[oveleon/contao-component-style-manager

Style and CSS-Class Manager for Contao Open Source CMS

2337.6k8](/packages/oveleon-contao-component-style-manager)[devaloka/network-wp-query

A WordPress plugin that provides Network-wide WP Query for Multisite environment

161.3k](/packages/devaloka-network-wp-query)[bostondv/acf-ninja-forms

Adds an Advanced Custom Fields field to select one or many Ninja Forms.

1525.1k](/packages/bostondv-acf-ninja-forms)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
