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
相关产品推荐
相关产品推荐

