Enhanced Custom CSS — Custom CSS that knows where it belongs
WORDPRESS PLUGIN FREE · GPLv2

Custom CSS that knows where it belongs.

One entry per job — scoped to the pages that need it, versioned on every save, previewed live, and never published broken.

REQUIRES WP 6.2+· PHP 7.4+· BLOCK + CLASSIC EDITOR· NO ACCOUNT, NO TRACKING
‹ Entries Checkout field cleanup UNSAVED Draft ⌄ Save draft Publish2
1 2 3 4 5 6 7 8 9 10 11
/* Checkout: tidy the field grid */
.woocommerce-checkout .form-row {
display: grid;
grid-template-columns: 1fr 1fr;
}
 
@media (min-width: 782px) {
gap: 1.5rem
padding-inline: 2rem;
width: expression(…);
}
PROBLEMS 2 ERRORS · 1 WARNING Click a problem to jump to the line
ERROR 8:15 Missing semicolon — “padding-inline” was read as part of the gap value.Add ; after 1.5rem.
ERROR 10:10 expression() isn’t allowed in custom CSS.It runs JavaScript from a stylesheet, so it can’t be saved as live CSS.
2 ERRORS · 1 WARNING SCOPE: 2 RULES|612 B → 431 B MINIFIED
ScopeDeliveryHistory
THIS CSS LOADS ON
Anything with the slug /checkout or /thank-you. Nowhere else.
EverywhereEvery page, post and archive.
Only where my rules matchPost types, single pages, slugs or terms.
/checkout/thank-you
WHAT A THEME’S CSS BOX DOESN’T DO

Three things worth leaving that little box for.

2Two errors block publishing.
No errors. Ready to publish.

Nothing broken goes live

Mistakes are flagged as you type, with the line and the reason in plain words. Drafts can stay messy — publishing is locked until the errors are gone.

THIS CSS LOADS ON
All Pages, the post “Spring campaign”, and anything with the slug /checkout.

It loads where you say

Whole site, or only the post types, single pages, slugs and terms that need it. The panel states the result as a sentence, so you never have to reason it out.

2 HOURS AGOYOUR EDITOR NOW
top: 0;
– opacity: .98;
}
top: 0;
+ blur(8px);
}

Every save is a snapshot

Compare any two versions side by side and restore in one click. Restoring never deletes anything — it saves the old version on top.

LIVE PREVIEW

See it on the real site before anyone else does.

Split the editor with your actual site and watch every keystroke land — no saving, no publishing, no “open a tab and refresh”. Pick any page the entry loads on, or any path at all, at phone, tablet or full width.

Hold Compare to flip between the site as it is now and the site with your draft. When it looks right, publish.

Previewing never saves — a live entry stays untouched while you experiment on it
Open the preview in a full tab, or copy a link a colleague can see for 24 hours
A preview link without a logged-in, permitted user shows nothing at all
SPLIT PREVIEW · /PRICING 7821024FULL
.pricing-table th { position: sticky; top: 0; backdrop-filter: blur(8px); }
DRAFT CSS APPLIED LIVE UNSAVED BUFFER · ONLY YOU CAN SEE THIS
ON THE PAGE ITSELF

“Something is styling this page and I don’t know what.”

Every post and page edit screen gets a panel listing the CSS that loads on it, and why each entry matches — a slug, a post type, a category, or simply everywhere.

Switch one off for this page alone without touching its rules. Write new CSS scoped to the page you’re looking at. Both editors, same panel.

Separates what’s live here from drafts that merely match
Per-page opt-out that never edits the entry’s own scope
Read-only for people who can edit pages but not CSS
PageBlock
Summary
Enhanced Custom CSS3
3 stylesheets load on this page.
3 LIVE · 1 MATCHING DRAFT
LOADING HERE
Pricing table polishSlug: /pricing
Header & nav tweaksLoads everywhereOFF ON THIS PAGE
MATCHES, NOT PUBLISHED YET
Checkout field cleanupPost type: Pages 2 ERRORS
New CSS for this page

The rest of it, briefly.

DELIVERY

Inline <style> with no extra request, or a hash-versioned .css file the browser caches. Per entry, or one site default.

COMBINED FILES

File-delivered entries that share a scope ship as one combined stylesheet — one request even with dozens of entries. On by default.

MINIFIED

Served minified, and the editor shows you the before and after size as you write.

FIND BY PAGE

Filter the entries list by any page to see exactly what loads there and why — or flip it and list the pages that turned something off.

THEME LOCK

Tie an entry to your current theme. Switch themes and it stops loading; switch back and it resumes — nothing to remember, nothing to delete.

ACCESS

Editing CSS is a capability you grant per role, not a side effect of being an Editor. Administrators always have it.

POST TYPES

Hide the post types you never style — invoices, orders, field groups — so the scope builder stays short.

IMPORT

Bring CSS in as a pasted block, a .css file, or a full export from another site — everything arrives as drafts, validated before it can go live.

EXPORT

Take everything as separate .css files, one merged stylesheet, or a full JSON backup with history.

NO LOCK-IN

Nothing leaves your server. Delete the plugin and your entries stay — unless you ask it to clean up.

Questions people ask first.

Will it slow my site down?

Inline delivery adds no request at all. File delivery costs one request that the browser caches, with a hash in the filename so it updates the moment you publish — and entries sharing a scope combine into a single file.

Does it work with page builders and block themes?

Yes. Scope by post type, slug or term, and set an entry to print after your theme’s stylesheets so your overrides win without !important.

What happens to my CSS if I uninstall?

It survives. Deleting everything on uninstall is a setting, off by default — and you can export a full backup first.

Can I move my existing CSS in?

Paste it straight into a new entry, upload a .css file, or import a backup from another site running the plugin — scope, delivery and history included. Then split it as you go: a header entry, a checkout entry, a print entry. That’s the habit the plugin is built around.

Can someone see my draft before it’s live?

You can copy a preview link that works for 24 hours — but only for people logged in with the CSS permission. Leaked or expired, it shows nothing.

Drafts can be messy. Live CSS can’t.

Free, GPLv2, and built to stay out of your way.

css.php