"Warning: Cannot modify header information headers already sent by (output started at..." 是 WordPress 中常见的错误,通常是由于在页面输出内容之后尝试使用 wp_redirect()

解决wordpress使用wp_redirect函数出现Warning: Cannot modify header information – headers already sent by (output started at…的方法

函数进行重定向而引起的。这个问题的根本原因是在 HTTP 标头已经发送到浏览器之后尝试修改标头信息。

要解决这个问题,可以按照以下几种方法来处理:

  1. 查找并删除不必要的空白字符:
    在你的主题文件或插件中,可能存在不必要的空格、换行符或 UTF8 BOM(字节顺序标记)。这些字符可能在标头输出之前被发送到浏览器。通过检查文件并删除这些字符,可以修复此问题。

  2. 确保 wp_redirect() 在页面内容输出之前调用:
    wp_redirect() 应该在任何页面内容输出之前被调用。确保你在 get_header() 或任何其他输出内容之前调用它。

    <?php
    // 以正确的位置调用 wp_redirect()
    wp_redirect($url);
    exit;
    ?>
  3. 使用 init 钩子来调用 wp_redirect()
    在 WordPress 初始化阶段调用 wp_redirect() 是一个很好的做法,可以确保在标头输出之前执行。可以在主题的 functions.php 文件中添加以下代码:

    function custom_redirect() {
       if (is_page('yourpageslug')) {
           wp_redirect('yourredirecturl');
           exit;
       }
    }
    add_action('init', 'custom_redirect');

    请替换 'yourpageslug''yourredirecturl' 为你实际的页面和重定向 URL。

  4. 使用 JavaScript 进行客户端重定向:
    如果在服务器端无法解决问题,你可以尝试使用 JavaScript 进行客户端重定向。这将在页面加载后进行重定向,而不会受到服务器端输出的影响。

    'yourredirecturl' 替换为你要重定向到的 URL。

  5. 检查插件冲突:
    有时,安装的插件可能会导致这个问题。尝试禁用最近安装的插件,然后逐个重新启用它们,以找出哪个插件引起了问题。

通过执行上述步骤之一,你应该能够解决 WordPress 中使用 wp_redirect() 函数引发的头部输出错误。如果问题仍然存在,可能需要进一步调查你的主题文件或其他定制代码是否引起了问题。