WordPress站点IE9/IE8首页重定向:解决JS兼容及全站跳转问题
解决WordPress仅IE8/IE9访问首页时定向到指定页面的问题
你之前的代码没加「是否访问首页」的判断,所以才会导致全站链接都被重定向。别担心,我们只需要给代码补充几个关键条件,就能精准控制只在首页触发重定向,还能避免循环跳转的问题。
具体实现步骤
把下面的代码放到你主题的header.php最顶部(一定要在任何HTML输出之前,比如<!DOCTYPE html>标签之前),这样能避免出现「headers already sent」的错误:
<?php // 检测访问者的IE版本 function get_ie_version() { $user_agent = $_SERVER['HTTP_USER_AGENT']; // 识别IE8 if (strpos($user_agent, 'MSIE 8.') !== false) { return 8; } // 识别IE9(兼容部分特殊User-Agent情况) elseif (strpos($user_agent, 'MSIE 9.') !== false || (strpos($user_agent, 'Trident/5.0') !== false)) { return 9; } return false; } $ie_version = get_ie_version(); // 核心判断:仅当访问首页、且不在目标页面时才执行重定向 if ($ie_version && is_front_page()) { // 替换成你实际创建的IE专属页面的slug $target_slugs = [ 8 => 'ie8-special-home', 9 => 'ie9-static-home' ]; $target_slug = $target_slugs[$ie_version]; // 避免循环重定向:如果已经在目标页面,就停止执行跳转逻辑 if (!is_page($target_slug)) { // 获取目标页面的永久链接 $redirect_url = get_permalink(get_page_by_path($target_slug)); if ($redirect_url) { wp_redirect($redirect_url); exit; // 必须加上,终止后续代码执行 } } } ?>
代码关键点说明
get_ie_version()函数:通过HTTP_USER_AGENT精准识别IE8和IE9,其中Trident/5.0是IE9特有的标识,能覆盖一些特殊的User-Agent伪装情况。is_front_page()条件:WordPress官方的条件标签,不管你的首页是静态页面还是博客列表页,都能准确判断当前是否在首页——这就是解决「全站重定向」问题的核心。!is_page($target_slug)判断:防止跳转到目标页面后,再次触发重定向导致无限循环。get_permalink(get_page_by_path()):通过页面的slug获取链接,比硬写URL更灵活,后续站点域名或页面URL变化时不用修改代码。
测试小技巧
你可以用浏览器的开发者工具(比如Chrome的「网络」面板)修改User-Agent,模拟IE8/IE9的访问请求,验证两点:
- 访问首页时会正确跳转到对应专属页面
- 访问站点内其他页面时,不会被强制重定向
内容的提问来源于stack exchange,提问作者sam
相关产品推荐
相关产品推荐

