原因
现在是夏天了,我想把博客的白天夜间自动切换的时间,从19:00-06:00调整为22:00-05:00
发现将php代码里的时间调整后,导致博客的文字在19:00-22:00这段时间文章的标题是淡白色文字
// 1. PHP 端:根据 Cookie 或服务器时间自动给 <body> 添加 night 类(无痕浏览器完美适配)
function child_add_night_body_class($classes) {
// 优先检查 Cookie(手动切换优先)
if (isset($_COOKIE['night']) && $_COOKIE['night'] === '1') {
$classes[] = 'night';
} else if (isset($_COOKIE['night']) && $_COOKIE['night'] === '0') {
// Cookie 为 0 表示强制日间,不做任何事
} else {
// 没有 Cookie 时,用服务器时间判断(22:00-05:00)
$hour = current_time('H'); // 获取 WordPress 时区的当前小时(0-23)
if ($hour >= 22 || $hour < 5) {
$classes[] = 'night';
}
}
return $classes;
}
add_filter('body_class', 'child_add_night_body_class');
查了下发现忘记修改了防闪烁部分的js代码时间
// ===== 优化版防闪烁脚本:操作 <html> 类 + 刷新保持深色(时间改为22:00-05:00) =====
(function() {
var night = document.cookie.replace(/(?:(?:^|.*;\s*)night\s*\=\s*([^;]*).*$)|^.*$/, "$1");
if (night === '1' || (night === '' && (new Date().getHours() >= 22 || new Date().getHours() < 5))) {
document.documentElement.classList.add('night');
// 双重保险:直接修改样式
document.documentElement.style.backgroundColor = '#1a1a1a';
}
})();
</script>
<?php
}
add_action('wp_head', 'night_mode_head_inline', 1);
将上面两个代码修改后即可完成时间的切换
修复问题
另外,一直有一个问题,就是如果切换为夜间模式时,点击刷新网页,再切换白天,此时发现文字依然是夜间状态,不会自动变色,这次也一并修复了
原有问题的代码
// 全局切换函数(只操作 body 上的 night 类)
// max-age=3600为Cookie1小时过期。有效期内遵循用户手动设置,过期后根据服务器时间自动切换。
window.nightModeToggle = function() {
if (body.classList.contains('night')) {
body.classList.remove('night');
btn.innerHTML = '☀️';
document.cookie = 'night=0;path=/;max-age=3600';
} else {
body.classList.add('night');
btn.innerHTML = '🌙';
document.cookie = 'night=1;path=/;max-age=3600';
}
};
// 事件委托,确保按钮在任何时候都能点击
document.addEventListener('click', function(e) {
if (e.target.closest('#nightModeToggle')) {
nightModeToggle();
}
});
// 初始化图标(根据 body 是否已有 night 类)
if (body.classList.contains('night')) {
btn.innerHTML = '🌙';
}
})();
</script>
<?php
}
add_action('wp_footer', 'night_mode_footer', 99);
修复后的代码
// 全局切换函数(同时操作 body 和 html)
// max-age=3600为Cookie1小时过期。有效期内遵循用户手动设置,过期后根据服务器时间自动切换。
window.nightModeToggle = function() {
var html = document.documentElement;
if (body.classList.contains('night')) {
body.classList.remove('night');
html.classList.remove('night');
btn.innerHTML = '☀️';
document.cookie = 'night=0;path=/;max-age=3600';
} else {
body.classList.add('night');
html.classList.add('night');
btn.innerHTML = '🌙';
document.cookie = 'night=1;path=/;max-age=3600';
}
};
// 事件委托,确保按钮在任何时候都能点击
document.addEventListener('click', function(e) {
if (e.target.closest('#nightModeToggle')) {
nightModeToggle();
}
});
// 初始化图标(根据 body 是否已有 night 类)
if (body.classList.contains('night')) {
btn.innerHTML = '🌙';
}
})();
</script>
<?php
}
add_action('wp_footer', 'night_mode_footer', 99);