JTZL's Dark Mode

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: dark media 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 pages
  • jtzl_dark_mode_css_variables – Customize dark mode colors
  • jtzl_dark_mode_custom_css – Add custom CSS rules

Installation

  1. Upload the jtzls-dark-mode folder to the /wp-content/plugins/ directory
  2. Activate the plugin through the ‘Plugins’ menu in WordPress
  3. 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: dark media 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_enabled filter 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_variables filter 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 color

Note: 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_css filter 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.

Contributors

Translate “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