お問い合わせはコチラから

WordPressにダークテーマの切り替えスイッチを実装する

サイト運営

最近流行りのダークテーマですが、iOSやWindowsにも導入されており無視できない存在になってきました。

そういう流れからか、テキスト主体の既存サイトで目が疲れないようにダークテーマを導入する機会がありました。

ダークテーマ導入にあたっては、ノーマル時のCSSで設定している色をダークテーマですべて変更する必要があるので、当初は丸ごとCSSを切り替えられる仕組みが必要じゃないか?と考えました。

しかし、実際にはそれほどCSS変更点が多くなく、javascriptによりbodyにclass追加することでCSSを切り替える方法が一番簡単だという結論になりました。

ユーザーごとにテーマを選択可能として、さらにcookieを使って選択値を覚えておくようにします。

この記事では、ユーザーごとにダークテーマの選択を可能とするカスタマイズをご紹介します。

使用するjQueryライブラリ

使用するjQueryライブラリは、jquery.cookie.jsだけです。

<script type="text/javascript" src="<?php echo get_template_directory_uri(); ?>/js/jquery.cookie.js"></script>

参考https://gamesink.net/column/articles/233

bodyタグにclassを追加

テンプレートファイルのbodyタグの部分に直接classを追加してしまうと、body_class()を書けなくなるので、フックで追加しました。

add_filter( 'body_class', 'my_class_names' );
function my_class_names( $classes ) {
	$value = $_COOKIE["DarkMode"];
	if ($value=="Active"){
		$classes[] = 'darkmode';
	}
	return $classes;
}

参考https://gamesink.net/column/articles/233

スイッチのHTML

スイッチのHTMLはbodyタグ以下に入れ込む必要があったので、wp_body_openフックを使います。

name=”dark_switch”の部分は、jQueryの記述と揃えます。

add_action( 'wp_body_open', function(){?>
		<!--ダークテーマ-->
	<div class="toggle_switch">
		<input type="checkbox" name="dark_switch" id="cb_toggle_switch">
		<label for="cb_toggle_switch"></label>
	</div>
	<!--ダークテーマ-->
<?php } );

スイッチのCSS

参考https://migi.me/css/ios-toggle-switch/

.toggle_switch {
    display: table;
    font-size: 30px;
}

.toggle_switch > input {
    display: none;
}

.toggle_switch > label {
    display: block;
    position: relative;
    width: 1.8em;
    height: 1em;
    border-radius: 1em;
    background-color: #2b2a2f;
    cursor: pointer;
}
.toggle_switch > input:checked + label {
    background-color: #2dcb45;
}
.toggle_switch > label::before {
    position: absolute;
    top: 0.05em;
    left: 0.05em;
    width: calc(1em - 0.1em);
    height: calc(1em - 0.1em);
    border-radius: calc(1em - 0.1em);
    background-color: #fff;
    transition: 0.5s;
    content: "";
}
.toggle_switch > input:checked + label::before {
    left: calc(100% - 1em + 0.05em);
}

スイッチの前にダークテーマというテキストを追加したい場合は以下のように疑似要素で対応します。

.toggle_switch:before {
    content: "ダークテーマ";
    position: absolute;
    top: 18px;
    font-size: 14px;
    left: -80px;
}

スイッチの表示位置はテーマによって異なると思いますので、適宜positon:absoluteやfixedで指定してください。

テーマ切り替えのjQuery

jqueryやjquery.cookie.jsよりも後で読み込まれるようにします。

$(function(){
    $.cookie.json = false;
    var darkMode = $.cookie("DarkMode");
 
    // ページ再読み込み時のスイッチ状態判定
    if (darkMode){
        if (darkMode == "Active") {
            $('input[name=dark_switch]:eq(0)').prop('checked', true);
        } else if (darkMode == "notActive") {
            $('input[name=dark_switch]:eq(0)').prop('checked', false);
        }
    }
 
    // スイッチ切り替え時の動作
    $("[name='dark_switch']").change(function() {
        $.cookie.json = false;
        var darkMode = $.cookie("DarkMode");
 
        if (darkMode){
            if (darkMode == "Active") {
                $('body').toggleClass('darkmode');
                $.cookie("DarkMode", "notActive", {expires:365, path:'/'});
                this.checked = false;
            } else if (darkMode == "notActive") {
                $('body').toggleClass('darkmode');
                $.cookie("DarkMode", "Active", {expires:365, path:'/'});
                this.checked = true;
            }
        } else {
            $('body').toggleClass('darkmode');
            $.cookie("DarkMode", "Active", {expires:365, path:'/'});
            this.checked = true;
        }
    });
});

参考https://gamesink.net/column/articles/233

ダークテーマのCSS

ダークテーマのCSSは、必要な部分だけ追加します。

その際、body classのdarkmodeをセレクタに追加します。

以下は例です。

body.darkmode {
    color: #fff;
    background-color: #444;
}
.darkmode #comments {
    padding: 25px 20px;
    background: #444;
    border: 2px solid #50c1a5;
}

まとめ

ダークテーマは最近の流行りなのですが、サイト全体のカラーを変えてしまうのではなく、ユーザーによって選択できるようにし、さらにユーザーごとに設定値を覚えておくようにする方がUXは高いと思います。

今回のカスタマイズは比較的簡単に導入できますので、もしそのような場面があったら思い出してください。

この記事を書いた人
ブーン

はるばる日本よりオランダ王国へやってまいりました。
自分の経験が少しでも参考になれば嬉しいです。
お問い合わせは、『こちら』からお願い致します。

\ブーンをフォロー/
スポンサーリンク
サイト運営
\シェアお願いします!/
\ブーンをフォロー/
こんな記事も読まれています

失敗しないレンタルサーバーランキング

mixhost

不正アクセスに強くて使いやすいおススメサーバー
\本サイトで利用中/
メリット①:自動ウィルス駆除対応
メリット②:サイトの表示速度が速い!
メリット③:転送量の上限が多い!
メリット④:自由にプラン変更ができ、アクセス増にも対応できる!
メリット⑤:バックアップデータが無料で復元できる!
メリット⑥:Wordpressが簡単にインストールできる!
メリット⑦:どのプランでも初期費用が無料!
メリット⑧:10日間の無料お試し期間と30日の返金保証!

Conoha Wing

国内Wordpress最速の最強サーバー
メリット①:圧倒的な表示速度
メリット②:レンタルサーバーと独自ドメインがセットでお得◎
メリット③:プラン変更はすべてのプランで自由自在
メリット④:一か月の利用転送量の制限が緩い(9TB~)
メリット⑤:WordPresサイトの移行が簡単

エックスサーバー

国内シェアNo1の安定性と実績が魅力。ALL SSDで死角なしの万能サーバー。
メリット①:サイトの表示速度が安定して速い!
メリット②:アクセス負荷に強くて安定性が高い!
メリット③:24時間365日の充実サポートで安心!電話サポートもあり!
メリット④:転送量が多い!
メリット⑤:自動バックアップ機能付き!
メリット⑥:WordPressが簡単にインストールできる!
メリット⑦:10日の無料お試し期間がある!

タイトルとURLをコピーしました