问题描述

我遇到这个错误。我不知道处理这个。

Cannot modify header information – headers already sent by (output started at /home/ben213/public_html/wp-content/themes/Bendaggers/functions.php:9) in /home/ben213/public_html/wp-includes/pluggable.php on line 934

我的 Functions.php 文件行#9 是:

<?php if(function_exists('register_sidebar'))register_sidebar();?>

而我的 pluggable.php#934 是

function wp_redirect($location, $status = 302) {
    global $is_IIS;

    $location = apply_filters('wp_redirect', $location, $status);
    $status = apply_filters('wp_redirect_status', $status, $location);

    if ( !$location ) // allows the wp_redirect filter to cancel a redirect
        return false;

    $location = wp_sanitize_redirect($location);

    if ( !$is_IIS && php_sapi_name() != 'cgi-fcgi' )
        status_header($status); // This causes problems on IIS and some FastCGI setups

    header("Location: $location", true, $status);}
endif;

我很难想出这个,因为我不是一个程序员。什么似乎是错的?请帮助我…

最佳解决办法

您的主题是将输出 (文本) 打印到浏览器中,但由于某些原因,WordPress 将在整个页面呈现之前将用户 (使用 wp_redirect) 重定向到该页面。您无法开始打印输出,然后重定向,否则您将收到您看到的错误。这就是 Paul Grime 在评论中得到的。

Ken White 对参考类似问题的帖子发表了评论。我已经通过缓冲脚本的输出来修复这个问题。

在您的主题的 functions.php 文件 (每当您的主题的页面加载时都会包含),请输入以下内容:

//allow redirection, even if my theme starts to send output to the browser
add_action('init', 'do_output_buffer');
function do_output_buffer() {
        ob_start();
}

现在,即使您的主题的一部分开始向浏览器发送输入,PHP 将不会发送该文本,直到该页面完全加载,这允许 WordPress 将需要的用户重定向到其自身逻辑的一部分。

次佳解决办法

如果您尝试从当前页面重定向到另一个页面,那么您已经处理了条件或没有条件,那么请使用此代码。例如,你有两个页面 A.php,& B.php 和当前你在 A.php 你想去其他页面 B.php 点击按钮。

   if(isset($_POST['save_btn']))
    {
        //write some of your code here, if necessary
        echo'<script> window.location="B.php"; </script> ';
     }

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。