How to Implement a Dark Mode Feature in WordPress

Enhance the user experience of your WordPress site by incorporating a Dark Mode feature. This advanced tutorial will guide you through the process of implementing Dark Mode without relying on plugins. Dark Mode integration involves introducing a user-selectable option to toggle between light and dark color schemes. While some themes natively support Dark Mode, this guide focuses on manual implementation to ensure complete control over design and performance.

Before proceeding with any customizations in WordPress, it’s essential to set up a child theme. A child theme acts as a safe and efficient way to make modifications without affecting the parent theme. If you haven’t set up a child theme yet, follow this tutorial on How to Create a Child Theme for Customization. It will guide you through the process and ensure that your customizations remain intact even after theme updates.

Enabling Dark Mode Support

Dark Mode support is initiated by adding a custom theme feature using the add_theme_support() function. This function informs WordPress that your theme can handle Dark Mode. Open your theme’s functions.php file and insert the following code snippet:

// Enable Dark Mode Support
Code language: PHP (php)

The add_theme_support('dark-mode') function adds Dark Mode support to your theme. While this function does not exist by default in WordPress, themes can define their own custom theme features, and ‘dark-mode’ is used as a custom feature name in this case.

Creating Dark Mode CSS

To style your website’s Dark Mode appearance, you’ll need to craft a dedicated CSS file. Begin by generating a new file named dark-mode.css within your theme’s directory. This file will house the custom styling for your Dark Mode implementation:

/* dark-mode.css */
body.dark-mode {
    background-color: #121212;
    color: #ffffff;
    /* Add more custom styling as needed */
Code language: CSS (css)

Within this CSS file, you have the flexibility to define various styles that transform your site’s appearance when Dark Mode is activated.

Enqueuing Dark Mode CSS

To enqueue (load) your Dark Mode CSS file onto the site’s frontend, you need to utilize the wp_enqueue_style() function. Open your functions.php file and include the following code snippet:

// Enqueue Dark Mode CSS
function enqueue_dark_mode_css() {
    if (is_dark_mode_enabled()) {
        wp_enqueue_style('dark-mode', get_template_directory_uri() . '/dark-mode.css', array(), '1.0', 'all');
add_action('wp_enqueue_scripts', 'enqueue_dark_mode_css');
Code language: PHP (php)

The enqueue_dark_mode_css() function enqueues the Dark Mode CSS file. It uses the wp_enqueue_style() function to load the CSS file only if Dark Mode is enabled, as determined by the is_dark_mode_enabled() function.

Implementing the Dark Mode Toggle

To empower users with the ability to toggle Dark Mode, you can integrate a simple toggle button. Incorporate the following HTML and JavaScript code within your theme’s template files, placing it where you desire the toggle button to appear:

<!-- Dark Mode Toggle Button -->
<button id="dark-mode-toggle">Toggle Dark Mode</button>

<!-- JavaScript to handle toggle functionality -->
    document.getElementById('dark-mode-toggle').addEventListener('click', function() {
Code language: JavaScript (javascript)

The Dark Mode toggle button is created using HTML. The accompanying JavaScript code listens for a click event on the button and toggles the 'dark-mode' class on the <body> element, triggering the Dark Mode styling.

Persisting User Preferences

For a seamless user experience, it’s advantageous to remember a user’s Dark Mode preference. Utilizing cookies or local storage can achieve this. Below is an example employing cookies to retain the Dark Mode setting:

// Set Dark Mode cookie
function set_dark_mode_cookie() {
    if (isset($_POST['dark-mode']) && $_POST['dark-mode'] === 'on') {
        setcookie('dark-mode', 'on', time() + 3600 * 24 * 30, COOKIEPATH, COOKIE_DOMAIN);
    } else {
        setcookie('dark-mode', 'off', time() - 3600 * 24 * 30, COOKIEPATH, COOKIE_DOMAIN);
add_action('init', 'set_dark_mode_cookie');

// Retrieve Dark Mode preference
function is_dark_mode_enabled() {
    return isset($_COOKIE['dark-mode']) && $_COOKIE['dark-mode'] === 'on';
Code language: PHP (php)

Setting a Dark Mode preference for users is crucial to maintaining a seamless experience across visits. In this step, we leverage cookies to achieve this. Cookies are small pieces of data stored on a user’s device and passed back to the server with each request.

Setting the Dark Mode Cookie:

The set_dark_mode_cookie() function is responsible for setting the Dark Mode cookie. When a user interacts with the Dark Mode toggle button and selects Dark Mode ('on'), the function sets a cookie named 'dark-mode' with a value of 'on'. If the user opts for the light theme ('off'), the cookie is set with a value of 'off'. The cookie’s expiration time is set for 30 days in the future for 'on' and 30 days in the past for 'off'.

  • setcookie('dark-mode', 'on', time() + 3600 * 24 * 30, COOKIEPATH, COOKIE_DOMAIN);
  • setcookie('dark-mode', 'off', time() - 3600 * 24 * 30, COOKIEPATH, COOKIE_DOMAIN);

This ensures that a user’s Dark Mode preference persists over time, even if they close their browser and return to your site later.

Retrieving the Dark Mode Preference:

The is_dark_mode_enabled() function checks whether the 'dark-mode' cookie is set to 'on', indicating that the user has selected Dark Mode. If the cookie is set and its value is 'on', the function returns true, indicating that Dark Mode should be enabled. Otherwise, it returns false.

  • return isset($_COOKIE['dark-mode']) && $_COOKIE['dark-mode'] === 'on';

By retrieving the Dark Mode preference, your WordPress site can dynamically apply the appropriate styles and provide a consistent experience based on user selections.

That’s it! By following this comprehensive guide, you’ve accomplished the seamless integration of a Dark Mode feature into your WordPress site. This sophisticated enhancement not only elevates readability but also bestows a modern and appealing aesthetic. You’ve harnessed the power of WordPress theming and coding standards to provide users with an enriched browsing experience.

Leave your feedback and help us improve ๐Ÿถ

We hope you found this article helpful! If you have any questions, feedback, or spot any errors, please let us know in the comments. Your input is valuable and helps us improve. If you liked this article, please consider sharing it with others. And if you really enjoyed it, you can show your support by buying us a cup of coffee โ˜•๏ธ or donating via PayPal ๐Ÿ’ฐ.

More free knowledge, because why not?


  • Hello and thanks for the great article on the above subject.

    I would like to make two suggestion:

    1. Adding the option to use local storage to save the user preferences will be excellent as most users outrightly reject the storing of any cookies on their systems

    2. Checking system preferences for dark/light mode setting: this will also be a great addition to the above code in order to give users the option of choosing another color mode other than the primary setting on the system or site.

    Thanks and appreciate your kind consideration of the above.

    • Hi Shyne,

      Thank you for your thoughtful suggestions and positive feedback on the article!

      Utilizing Local Storage: You’re absolutely right; incorporating local storage for saving user preferences is a fantastic idea, especially considering users’ concerns about cookies. This method ensures a seamless experience while respecting user privacy. We’ll update the tutorial to include detailed instructions on implementing local storage for saving preferences.

      Checking System Preferences: It’s an excellent suggestion to detect and honor the user’s system preferences for dark or light mode. This addition will enhance user experience by offering them the option to align their site’s appearance with their system settings or choose a different mode altogether. We’ll include instructions on how to check system preferences in the tutorial to provide users with more customization options.

      We sincerely appreciate your input, and we’re committed to incorporating these enhancements into the tutorial to make it even more comprehensive and user-friendly. If you have any further suggestions or questions, please don’t hesitate to let us know!


Your thoughts matter, leave a reply ๐Ÿ’ฌ

Your email address will not be published. Required fields are marked *