{"id":249575,"date":"2026-01-09T08:59:30","date_gmt":"2026-01-09T08:59:30","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/blockglow-per-block-custom-css\/"},"modified":"2026-09-11T14:45:21","modified_gmt":"2026-09-11T14:45:21","slug":"blockglow","status":"publish","type":"plugin","link":"https:\/\/es-ar.wordpress.org\/plugins\/blockglow\/","author":23123447,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"2.0.0","stable_tag":"2.0.0","tested":"7.1.1","requires":"6.6","requires_php":"8.2","requires_plugins":null,"header_name":"BlockGlow \u2014 Enhance, Optimize & Protect","header_author":"Mary Rose Elbambo","header_description":"Extend every block with a \"Custom CSS\" inspector field. CSS is scoped to the block instance and printed on the front-end.","assets_banners_color":"3f4e65","last_updated":"2026-09-11 14:45:21","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/wordpress.org\/plugins\/blockglow\/","header_author_uri":"https:\/\/profiles.wordpress.org\/eltresse93\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":518,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.1.6":{"tag":"1.1.6","author":"eltresse93","date":"2026-01-09 11:11:35","revision":3435835},"1.1.7":{"tag":"1.1.7","author":"eltresse93","date":"2026-01-11 07:50:00","revision":3436941},"1.2.0":{"tag":"1.2.0","author":"eltresse93","date":"2026-05-11 17:54:04","revision":3529049},"2.0.0":{"tag":"2.0.0","author":"eltresse93","date":"2026-09-11 14:45:21","revision":3691597}},"upgrade_notice":{"2.0.0":"<p>BlockGlow 2.0 introduces an improved Custom CSS editing experience, popup CSS editing, enhanced LCP detection and preload functionality, improved editor preview support, and an improved administration interface.<\/p>","1.3.0":"<p>Introduced Protection features including Honeypot and Cloudflare Turnstile integration for Simple Membership forms.<\/p>","1.2.0":"<p>Introduced Performance Optimization tools, including LCP image preloading and fetchpriority support for improved Core Web Vitals.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3691582,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3691582,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3435790,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3435790,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.1.6","1.1.7","1.2.0","2.0.0"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"BlockGlow Custom CSS panel inside the WordPress Block Editor.","2":"BlockGlow Custom CSS editor with live CSS preview.","3":"BlockGlow Performance Optimization settings.","4":"LCP preload configuration and analysis.","5":"BlockGlow Protection settings.","6":"Cloudflare Turnstile configuration for Simple Membership.","7":"BlockGlow CSS Manager with pagination and bulk actions."}},"plugin_section":[],"plugin_tags":[2001,148076,187,247,600],"plugin_category":[46,59],"plugin_contributors":[253640],"plugin_business_model":[],"class_list":["post-249575","plugin","type-plugin","status-publish","hentry","plugin_tags-custom-css","plugin_tags-gutenberg","plugin_tags-optimization","plugin_tags-performance","plugin_tags-security","plugin_category-editor-and-writing","plugin_category-utilities-and-tools","plugin_contributors-eltresse93","plugin_committers-eltresse93"],"banners":{"banner":"https:\/\/ps.w.org\/blockglow\/assets\/banner-772x250.png?rev=3435790","banner_2x":"https:\/\/ps.w.org\/blockglow\/assets\/banner-1544x500.png?rev=3435790","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/blockglow\/assets\/icon-128x128.png?rev=3691582","icon_2x":"https:\/\/ps.w.org\/blockglow\/assets\/icon-256x256.png?rev=3691582","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>BlockGlow extends the WordPress Block Editor with tools for customizing, optimizing, and protecting your website.<\/p>\n\n<p>Originally built as a per-block Custom CSS solution for Gutenberg, BlockGlow has evolved into a lightweight toolkit for block customization, performance optimization, and spam protection.<\/p>\n\n<p>Features include:<\/p>\n\n<ul>\n<li>Per-block Custom CSS with automatic CSS scoping.<\/li>\n<li>Live CSS preview inside the block editor.<\/li>\n<li>CSS validation and property validation.<\/li>\n<li>Automatic CSS file generation and management.<\/li>\n<li>LCP (Largest Contentful Paint) resource detection and preloading.<\/li>\n<li>Automatic fetchpriority=\"high\" support for critical images.<\/li>\n<li>Honeypot protection for Simple Membership forms.<\/li>\n<li>Cloudflare Turnstile integration for Simple Membership forms.<\/li>\n<li>CSS file management tools.<\/li>\n<li>Secure file handling and capability checks.<\/li>\n<\/ul>\n\n<h3>Enhance<\/h3>\n\n<p>BlockGlow adds a \"BlockGlow \u2014 Custom CSS\" panel to the inspector of Gutenberg blocks.<\/p>\n\n<p>Use the Custom CSS editor to apply styles to an individual block without affecting other instances of the same block.<\/p>\n\n<p>Features include:<\/p>\n\n<ul>\n<li>Per-block Custom CSS.<\/li>\n<li>Automatic CSS scoping using a unique BlockGlow ID.<\/li>\n<li>Live CSS preview inside the block editor.<\/li>\n<li>CSS validation.<\/li>\n<li>CSS property validation.<\/li>\n<li>CodeMirror-based editor when available.<\/li>\n<li>Fallback textarea editor with Tab and Shift+Tab support.<\/li>\n<li>Automatic CSS file generation.<\/li>\n<li>CSS file cleanup when styles are removed.<\/li>\n<li>Graceful fallback to inline styles when CSS file generation is unavailable.<\/li>\n<li>CSS Manager for managing generated CSS files.<\/li>\n<li>Popup CSS editing for updating CSS from other blocks when supported.<\/li>\n<\/ul>\n\n<h3>Optimize<\/h3>\n\n<p>BlockGlow includes performance tools designed to help improve page loading and Core Web Vitals.<\/p>\n\n<p>Current optimization features include:<\/p>\n\n<ul>\n<li>LCP resource detection.<\/li>\n<li>LCP image preloading.<\/li>\n<li>Automatic fetchpriority=\"high\" support for critical images.<\/li>\n<li>Optional LCP preload support for selected post types.<\/li>\n<li>LCP analysis and re-analysis tools.<\/li>\n<li>Saved LCP resource management.<\/li>\n<\/ul>\n\n<p>When LCP preload is enabled, BlockGlow can detect the LCP resource for a page and save the resource URL for subsequent preloading.<\/p>\n\n<h3>Protect<\/h3>\n\n<p>BlockGlow includes optional protection features designed to help reduce automated spam submissions and registrations.<\/p>\n\n<p>Current protection features include:<\/p>\n\n<ul>\n<li>Honeypot protection for Simple Membership forms.<\/li>\n<li>Cloudflare Turnstile integration for Simple Membership forms.<\/li>\n<\/ul>\n\n<p>These protection features can be enabled and configured from the BlockGlow administration area.<\/p>\n\n<h3>External Services<\/h3>\n\n<p>BlockGlow optionally integrates with Cloudflare Turnstile to provide spam and abuse protection for supported Simple Membership forms.<\/p>\n\n<p>Cloudflare Turnstile is only used when the Cloudflare Turnstile protection feature is enabled and configured by the site administrator.<\/p>\n\n<p>When enabled, BlockGlow loads the Cloudflare Turnstile JavaScript from Cloudflare's servers. When a user interacts with a protected form, Turnstile generates a verification token. BlockGlow sends the token to Cloudflare's Turnstile verification service to verify the request.<\/p>\n\n<p>Service:\nhttps:\/\/www.cloudflare.com\/products\/turnstile\/<\/p>\n\n<p>Turnstile documentation:\nhttps:\/\/developers.cloudflare.com\/turnstile\/<\/p>\n\n<p>Cloudflare Privacy Policy:\nhttps:\/\/www.cloudflare.com\/privacypolicy\/<\/p>\n\n<p>Cloudflare Terms of Service:\nhttps:\/\/www.cloudflare.com\/terms\/<\/p>\n\n<p>Please review Cloudflare's documentation and policies for information about how Cloudflare processes data when Turnstile is used.<\/p>\n\n<h3>How CSS Scoping Works<\/h3>\n\n<p>BlockGlow creates a unique BlockGlow ID for each block instance and uses it to scope custom CSS.<\/p>\n\n<p>For example:<\/p>\n\n<pre><code>`\n<\/code><\/pre>\n\n<p>[data-blockglow-id=\"bg-xxxxxxx\"] h2 {\n    color: red;\n}\n    `<\/p>\n\n<p>The CSS is scoped to the individual block instance so that styles do not unintentionally affect other blocks.<\/p>\n\n<p>You can also use <code>&amp;<\/code> as a shorthand for the BlockGlow wrapper in the Custom CSS editor.<\/p>\n\n<p>Example:<\/p>\n\n<pre><code>`\n<\/code><\/pre>\n\n<p>&amp; .my-class {\n    color: red;\n}\n    `<\/p>\n\n<p>BlockGlow automatically replaces <code>&amp;<\/code> with the appropriate BlockGlow selector for the editor preview and front-end output.<\/p>\n\n<h3>Support<\/h3>\n\n<p>BlockGlow is actively developed with a focus on helping WordPress users enhance, optimize, and protect their WordPress websites.<\/p>\n\n<p>Feature requests, bug reports, and suggestions are welcome.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install BlockGlow through the WordPress Plugin Directory or upload the <code>blockglow<\/code> folder to the <code>\/wp-content\/plugins\/<\/code> directory.<\/li>\n<li>Activate BlockGlow through the Plugins screen in WordPress.<\/li>\n<li>Ensure the <code>wp-content\/uploads\/<\/code> directory is writable.<\/li>\n<li>Go to the BlockGlow administration page.<\/li>\n<li>Configure the Enhance, Optimize, and Protect features you want to use.<\/li>\n<li>If using Cloudflare Turnstile, enable the feature and enter your Cloudflare Turnstile site and secret keys.<\/li>\n<li>Start customizing your blocks and configuring the available optimization and protection features.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"what%20does%20blockglow%20do%3F\"><h3>What does BlockGlow do?<\/h3><\/dt>\n<dd><p>BlockGlow provides tools for block-level CSS customization, performance optimization, LCP resource preloading, and optional spam protection.<\/p><\/dd>\n<dt id=\"does%20blockglow%20work%20with%20the%20gutenberg%20block%20editor%3F\"><h3>Does BlockGlow work with the Gutenberg Block Editor?<\/h3><\/dt>\n<dd><p>Yes. BlockGlow is designed for the WordPress Block Editor and provides a Custom CSS panel for Gutenberg blocks.<\/p><\/dd>\n<dt id=\"will%20my%20custom%20css%20affect%20other%20blocks%3F\"><h3>Will my custom CSS affect other blocks?<\/h3><\/dt>\n<dd><p>Normally, no. BlockGlow automatically scopes custom CSS to the individual block instance using a unique BlockGlow ID.<\/p><\/dd>\n<dt id=\"where%20are%20generated%20css%20files%20stored%3F\"><h3>Where are generated CSS files stored?<\/h3><\/dt>\n<dd><p>Generated CSS files are stored in:<\/p>\n\n<pre><code>`\n<\/code><\/pre>\n\n<p>wp-content\/uploads\/blockglow\/\n    `<\/p>\n\n<p>Files use a naming format similar to:<\/p>\n\n<pre><code>`\n<\/code><\/pre>\n\n<p>blockglow-.css\n    `<\/p><\/dd>\n<dt id=\"what%20happens%20if%20blockglow%20cannot%20create%20a%20css%20file%3F\"><h3>What happens if BlockGlow cannot create a CSS file?<\/h3><\/dt>\n<dd><p>BlockGlow can fall back to inline CSS when CSS file generation is unavailable.<\/p><\/dd>\n<dt id=\"what%20performance%20features%20are%20included%3F\"><h3>What performance features are included?<\/h3><\/dt>\n<dd><p>BlockGlow currently provides:<\/p>\n\n<ul>\n<li>LCP resource detection.<\/li>\n<li>LCP resource preloading.<\/li>\n<li>Automatic fetchpriority=\"high\" support for critical images.<\/li>\n<li>LCP analysis and re-analysis tools.<\/li>\n<\/ul><\/dd>\n<dt id=\"what%20protection%20features%20are%20included%3F\"><h3>What protection features are included?<\/h3><\/dt>\n<dd><p>BlockGlow currently provides:<\/p>\n\n<ul>\n<li>Honeypot protection for Simple Membership forms.<\/li>\n<li>Cloudflare Turnstile integration for Simple Membership forms.<\/li>\n<\/ul><\/dd>\n<dt id=\"is%20cloudflare%20turnstile%20required%3F\"><h3>Is Cloudflare Turnstile required?<\/h3><\/dt>\n<dd><p>No. Cloudflare Turnstile is optional.<\/p>\n\n<p>It is only used when the Turnstile protection feature is enabled and properly configured.<\/p><\/dd>\n<dt id=\"does%20blockglow%20load%20cloudflare%20turnstile%20on%20every%20page%3F\"><h3>Does BlockGlow load Cloudflare Turnstile on every page?<\/h3><\/dt>\n<dd><p>BlockGlow only enqueues the Cloudflare Turnstile script when the Turnstile protection feature is enabled and a Turnstile site key has been configured.<\/p><\/dd>\n<dt id=\"how%20do%20i%20delete%20generated%20css%20files%3F\"><h3>How do I delete generated CSS files?<\/h3><\/dt>\n<dd><p>Use the BlockGlow CSS Manager to manage generated CSS files, or remove the Custom CSS from the relevant block and update the post or page.<\/p><\/dd>\n<dt id=\"is%20blockglow%20safe%20for%20production%20websites%3F\"><h3>Is BlockGlow safe for production websites?<\/h3><\/dt>\n<dd><p>BlockGlow is designed for production use and includes nonce validation, capability checks, input sanitization, output escaping, and secure file handling.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>2.0.0<\/h4>\n\n<ul>\n<li>New: Improved per-block Custom CSS editor.<\/li>\n<li>New: Added popup CSS editing for updating other blocks' custom CSS.<\/li>\n<li>New: Added CSS validation and improved CSS editing experience.<\/li>\n<li>New: Added LCP preload support for enabled post types.<\/li>\n<li>New: Added automatic LCP resource detection and preloading.<\/li>\n<li>New: Added LCP analysis and re-analysis tools.<\/li>\n<li>Improved: Improved handling of generated CSS files.<\/li>\n<li>Improved: Improved BlockGlow administration interface.<\/li>\n<li>Improved: Improved CSS preview inside the WordPress Block Editor.<\/li>\n<li>Improved: Improved editor iframe compatibility.<\/li>\n<li>Improved: Improved security and request validation.<\/li>\n<li>Improved: Improved CSS file management with pagination and bulk actions.<\/li>\n<\/ul>\n\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>Security: Added Honeypot protection for Simple Membership registration forms to help reduce spam registrations.<\/li>\n<li>Security: Added Cloudflare Turnstile integration for Simple Membership forms.<\/li>\n<li>Security: Added a new Protection settings section in the BlockGlow dashboard.<\/li>\n<li>Improved: Continued expansion of BlockGlow as an Enhance, Optimize &amp; Protect toolkit for WordPress.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Performance: Added a new Performance Optimization tab in the admin dashboard.<\/li>\n<li>Performance: Added support for preloading the LCP image and applying fetchpriority=\"high\" to improve Largest Contentful Paint (LCP) performance and page loading speed.<\/li>\n<\/ul>\n\n<h4>1.1.7 (2026-01-11)<\/h4>\n\n<ul>\n<li>Fixed: Fixed the redirect URL after deleting a CSS file in the BlockGlow admin page.<\/li>\n<\/ul>\n\n<h4>1.1.6<\/h4>\n\n<ul>\n<li>Update: Create a new blockglowId when a block is duplicated or copied.<\/li>\n<li>Update: Added pagination and multiple selection for deleting CSS files in the BlockGlow admin page.<\/li>\n<\/ul>\n\n<h4>1.1.5<\/h4>\n\n<ul>\n<li>Admin: Fixed a nonce issue.<\/li>\n<\/ul>\n\n<h4>1.1.4<\/h4>\n\n<ul>\n<li>Admin: Removed the CSS filename when creating the delete nonce.<\/li>\n<\/ul>\n\n<h4>1.1.3<\/h4>\n\n<ul>\n<li>Fixed: Reordered logic in BlockGlow_Admin::handle_delete_file() so nonce validation runs before processing user input.<\/li>\n<li>Fixed: Addressed security scanner warnings for missing nonce checks on file deletion requests.<\/li>\n<li>Improved: Raw file input is now only read after successful nonce verification and capability checks.<\/li>\n<\/ul>\n\n<h4>1.1.2<\/h4>\n\n<ul>\n<li>Security: Added stricter nonce validation and capability checks for file deletion handlers.<\/li>\n<li>Security: Improved inline CSS handling for untrusted users.<\/li>\n<li>Admin: Standardized sanitization of request inputs and improved admin enqueue logic.<\/li>\n<\/ul>\n\n<h4>1.1.1<\/h4>\n\n<ul>\n<li>Security: Tightened admin navigation and delete handlers.<\/li>\n<li>Admin: Removed the Import\/Export submenu and tab from the admin UI.<\/li>\n<li>Code Quality: Fixed PHPCS internationalization warnings and added translator context where needed.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Minor: Improved editor reliability and added an option to toggle in-editor rendering of custom CSS.<\/li>\n<\/ul>\n\n<h4>1.0.5<\/h4>\n\n<ul>\n<li>Editor: Improved attribute attachment in the block editor.<\/li>\n<li>Editor: Added a clientId-based selector fallback.<\/li>\n<li>Editor: Added a ToggleControl to enable or disable editor CSS rendering.<\/li>\n<li>Editor: Added the generated CSS file path to the block inspector.<\/li>\n<\/ul>\n\n<h4>1.0.4<\/h4>\n\n<ul>\n<li>Security: Improved sanitization and nonce validation.<\/li>\n<li>Code Quality: Resolved PHPCS warnings.<\/li>\n<\/ul>\n\n<h4>1.0.3<\/h4>\n\n<ul>\n<li>Security: Replaced use of $_REQUEST with explicit request handling.<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Security: Added nonce verification and capability checks.<\/li>\n<li>Output Safety: Improved inline CSS handling.<\/li>\n<li>Editor: Improved fallback textarea styling.<\/li>\n<li>Misc: Various bug fixes and code quality improvements.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Improved front-end output using data attributes instead of wrapper elements.<\/li>\n<li>Switched inline stylesheet handling to WordPress style APIs.<\/li>\n<li>Added stronger admin-side security.<\/li>\n<li>Improved sanitization and request handling.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First release.<\/li>\n<\/ul>","raw_excerpt":"Enhance, optimize, and protect your WordPress website with block-level CSS customization, performance tools, and security features.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/es-ar.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/249575","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/es-ar.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/es-ar.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/es-ar.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=249575"}],"author":[{"embeddable":true,"href":"https:\/\/es-ar.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/eltresse93"}],"wp:attachment":[{"href":"https:\/\/es-ar.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=249575"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/es-ar.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=249575"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/es-ar.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=249575"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/es-ar.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=249575"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/es-ar.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=249575"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/es-ar.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=249575"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}