Description
JTZL’s Dark Mode automatically applies dark mode styling to your WordPress site based on your visitors’ operating system preferences. No configuration required – it just works.
Interactive demo:
https://playground.wordpress.net/?blueprint-url=https://wordpress.org/plugins/wp-json/plugins/v1/plugin/jtzls-dark-mode/blueprint.json
Key Features:
- Automatic detection using CSS
prefers-color-scheme: darkmedia query - Zero configuration – works out of the box
- Privacy-respecting – all detection happens client-side
- Theme-agnostic – works with any WordPress theme
- Media preservation – images, videos, and embeds display correctly
- Developer-friendly – extensible via WordPress filter hooks
How It Works:
The plugin uses the CSS prefers-color-scheme media query to detect when a visitor’s operating system is set to dark mode. When detected, dark mode styles are automatically applied without any JavaScript or server-side processing.
Technical Features:
- Modern PHP 8.2+ architecture with dependency injection (PHP-DI)
- Service-oriented design with PSR-4 autoloading
- Separate styling strategies for Block themes (CSS variables) and Classic themes (filter inversion)
- Comprehensive test coverage with PHPUnit
Developer Hooks:
Customize the plugin behavior using these filter hooks:
jtzl_dark_mode_enabled– Enable/disable dark mode on specific pagesjtzl_dark_mode_css_variables– Customize dark mode colorsjtzl_dark_mode_custom_css– Add custom CSS rules
Installation
- Upload the
jtzls-dark-modefolder to the/wp-content/plugins/directory - Activate the plugin through the ‘Plugins’ menu in WordPress
- That’s it! Dark mode will automatically apply based on visitor preferences
FAQ
-
Does this plugin require any configuration?
-
No. JTZL’s Dark Mode works automatically without any settings or configuration.
-
How does dark mode detection work?
-
The plugin uses the CSS
prefers-color-scheme: darkmedia query, which detects your operating system’s color scheme preference. This is a privacy-respecting, client-side-only approach. -
Will this affect my images and videos?
-
No. The plugin includes media preservation rules that ensure images, videos, iframes, and embedded content display without color distortion.
-
Can I disable dark mode on specific pages?
-
Yes. Use the
jtzl_dark_mode_enabledfilter hook:add_filter( 'jtzl_dark_mode_enabled', function( $enabled ) { if ( is_page( 'landing-page' ) ) { return false; } return $enabled; } ); -
Can I customize the dark mode colors?
-
Yes. Use the
jtzl_dark_mode_css_variablesfilter hook to override default CSS variables:add_filter( 'jtzl_dark_mode_css_variables', function( $variables ) { $variables['--id-bg-primary'] = '#0d1117'; $variables['--id-text-primary'] = '#f0f0f0'; return $variables; } );Available CSS variables:
*--id-bg-primary– Primary background color
*--id-bg-secondary– Secondary background color
*--id-text-primary– Primary text color
*--id-text-secondary– Secondary text color
*--id-border-color– Border color
*--id-link-color– Link color
*--id-link-hover– Link hover colorNote: CSS variables only apply to Block themes. Classic themes use filter inversion.
-
Does this work with Full Site Editing (FSE) themes?
-
Yes. JTZL’s Dark Mode uses different styling strategies optimized for each theme type:
- Block themes (FSE): Uses CSS custom properties for precise color control
- Classic themes: Uses CSS filter inversion for broad compatibility
Both approaches ensure proper dark mode rendering without theme modifications.
-
Does this affect the WordPress admin area?
-
No. Dark mode styling is applied only to the public-facing frontend of your site.
-
Can I add custom CSS rules?
-
Yes. Use the
jtzl_dark_mode_custom_cssfilter hook:add_filter( 'jtzl_dark_mode_custom_css', function( $css ) { return $css . '@media (prefers-color-scheme: dark) { .my-element { color: #fff; } }'; } ); -
What are the system requirements?
-
- PHP 8.2 or higher
- WordPress 6.9 or higher
- Composer (for development only)
-
Is there an interactive preview?
-
Yes. Launch a live preview in WordPress Playground:
https://playground.wordpress.net/?blueprint-url=https://wordpress.org/plugins/wp-json/plugins/v1/plugin/jtzls-dark-mode/blueprint.json
Reviews
There are no reviews for this plugin.
Contributors & Developers
“JTZL's Dark Mode” is open source software. The following people have contributed to this plugin.
ContributorsTranslate “JTZL's Dark Mode” into your language.
Interested in development?
Browse the code, check out the SVN repository, or subscribe to the development log by RSS.
Changelog
1.0.0
- Initial release
- Automatic dark mode detection via CSS prefers-color-scheme
- Theme-agnostic styling with CSS custom properties
- Media preservation for images, videos, and embeds
- Developer filter hooks for customization
