You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WordPress点击按钮设置Cookie切换样式表失效问题求助

排查并修复主题样式表切换失效问题

我仔细看了你的代码,发现了几个关键逻辑错误,这就是样式切换没生效的原因,咱们一步步来修正:

核心问题分析

  • Cookie名称不匹配:你设置Cookie时用的是setcookie("style","$stylesheet","3600*7");,名称是style,但后面读取Cookie时却用了$_COOKIE['stylesheet'],名称完全对不上,自然读不到之前存储的样式选择。
  • Cookie过期时间格式错误:setcookie的第三个参数需要是Unix时间戳,你写的"3600*7"是字符串,就算去掉引号,3600*7=25200对应的是1970年的时间点,Cookie会立刻过期失效。正确写法应该是time() + 3600*7,表示当前时间往后7小时过期。
  • 变量赋值顺序混乱:你在处理完GET参数、设置好$stylesheet后,又直接执行$stylesheet = $as1stylesheet;,这会覆盖之前根据GET参数设置的值,导致点击按钮后即时的样式切换也不会生效;而且读取Cookie的逻辑放在这个赋值之后,就算Cookie正常,也会被初始值覆盖。
  • GET参数处理冗余:多个else if可以简化,同时缺少对非法参数的判断,容易出现意外情况。

修正后的完整代码

functions.php 修正版

// Accessible Stylesheet Cookie
// 用数组统一管理样式名称和对应的路径,方便后续扩展
$style_mapping = [
    'as1' => 'css/colors-as1.css',
    'as2' => 'css/colors-as2.css',
    'as3' => 'css/colors-as3.css'
];

// 初始化默认样式为as1
$stylesheet = $style_mapping['as1'];

// 优先处理用户点击切换的GET参数(优先级高于Cookie)
if (isset($_GET['style']) && array_key_exists($_GET['style'], $style_mapping)) {
    $selected_style = $_GET['style'];
    $stylesheet = $style_mapping[$selected_style];
    // 设置Cookie:名称统一为stylesheet,过期7小时,路径设为根目录确保全站有效
    setcookie('stylesheet', $selected_style, time() + 3600 * 7, '/');
} 
// 如果没有GET参数,读取Cookie保存的用户选择
elseif (isset($_COOKIE['stylesheet']) && array_key_exists($_COOKIE['stylesheet'], $style_mapping)) {
    $stylesheet = $style_mapping[$_COOKIE['stylesheet']];
}

header.php 优化(可选)

可以给当前激活的样式按钮加个标识,方便用户直观看到当前选择:

<a href="?style=as1" <?php echo ($stylesheet === $style_mapping['as1']) ? 'class="active-style"' : ''; ?>>AS1</a>
<a href="?style=as2" <?php echo ($stylesheet === $style_mapping['as2']) ? 'class="active-style"' : ''; ?>>AS2</a>
<a href="?style=as3" <?php echo ($stylesheet === $style_mapping['as3']) ? 'class="active-style"' : ''; ?>>AS3</a>

<!-- 样式表链接保持不变即可 -->
<link rel="stylesheet" type="text/css" media="all" id="accessible-stylesheet" href="<?php echo get_template_directory_uri(); ?>/<?php echo $stylesheet; ?>" />

测试前注意事项

修改代码后,记得清除浏览器的旧Cookie和缓存,然后点击按钮测试,应该就能正常切换样式表了。

内容的提问来源于stack exchange,提问作者Jay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 08:07:43