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

在WordPress的page.php中使用header(location)重定向时出现Header已发送错误

解决WordPress中page.php重定向时Header已发送的问题

嘿,这个问题我太熟悉了!你遇到的「Header已发送」警告,本质原因是HTTP头信息必须在任何页面内容(包括空白字符、HTML标签)输出之前发送,而直接在page.php里写这段代码时,WordPress可能已经提前输出了一些内容(比如主题文件开头的空格、BOM标识,或者某个插件/主题函数提前输出了字符),导致header()函数无法正常工作。

下面给你两种靠谱的解决办法,优先推荐第一种:

方法一:用WordPress官方钩子(最稳妥)

不要在page.php里直接写重定向代码,而是把逻辑放到主题的functions.php文件中,用template_redirect钩子——这个钩子会在WordPress加载模板之前触发,此时还没有任何内容输出,完美适配重定向场景。

代码示例:

add_action('template_redirect', 'custom_page_slug_redirect');
function custom_page_slug_redirect() {
    global $post;
    
    // 先确认当前是页面类型,且post对象存在
    if (is_page() && isset($post)) {
        $post_slug = $post->post_name;
        if ($post_slug == 'about') {
            // 用WordPress封装的wp_redirect,比直接header()更规范
            wp_redirect(get_site_url() . '/about-us/');
            // 必须加上exit,终止后续代码执行,确保重定向生效
            exit;
        }
    }
}

方法二:强制在page.php最顶部执行(不推荐,风险高)

如果你一定要在page.php里写,必须确保这段代码在所有输出之前执行,包括get_header()函数(因为get_header会输出HTML头部内容),同时保证page.php文件开头没有任何空白字符或BOM。

代码示例:

<?php
// 这段代码必须放在page.php的最最顶部,不能有任何前置输出
global $post;
$post_slug = $post->post_name;
if ($post_slug == 'about') {
    wp_redirect(get_site_url() . '/about-us/');
    exit;
}
// 之后再加载头部模板
get_header();
// 剩下的page.php内容...
?>

关键注意事项

  • 一定要加exit;或die();:如果不加,WordPress会继续执行后续代码,可能导致重定向失效,甚至出现内容混乱。
  • 优先用wp_redirect():这是WordPress官方提供的重定向函数,会自动处理HTTP状态码,比原生的header()更符合WordPress的运行机制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:08:07