Cannot modify headers

时间:2013-03-13 作者:TheWebs

我非常讨厌这个错误。根本不懂。

这是我的代码,您要关注的是foreach循环:

public function reset_theme_options(){
    if($this->is_theme_options_array()){
        foreach($this->_theme_option[\'admin_options\'] as $option_name=>$value){
            if($value != false){
                delete_option($option_name);
                $http = new AisisCore_Http_Http();
                wp_safe_redirect($http->get_current_url());
            }
        }
        $this->_update_option();
    }else{
        $this->_theme_option = array();
        $this->_update_option();
    }

}
基本上,我所做的就是获取选项的名称,所以假设您将主题的所有选项存储在“My\\u theme”中,这是一个设置数组。

我所做的就是把它删除,它就这样工作了。

问题是我基本上是wp_safe_redirect()) 刷新页面,我可以通过javascript之类的方式来完成,但我认为这种方式更好。

因此,一切正常,我收到了成功消息,选项重置时出现以下故障:

警告:无法修改标题信息-标题已由/var/www/wordpress/wp-includes/plugable中的(输出开始于/var/www/wordpress/wp-admin/menu-header.php:94)发送。php在线876

好的,我再次单击重置按钮,一切正常。

我在这个错误中的步骤是:

(首先,从全新开始,不保存任何选项)-保存一些选项,点击提交。然后在页面刷新后,单击重置、boom error(动臂错误)、options still saved(选项仍保存)、再次单击reset(重置)、boom options reset(动臂选项重置)。

帮助

2 个回复
最合适的回答,由SO网友:TheWebs 整理而成

解决这个问题的实际方法是在函数中加入以下内容。php文件:

function callback($buffer){
    return $buffer;
}

function add_ob_start(){
    ob_start("callback");
}

function flush_ob_end(){
    ob_end_flush();
}

add_action(\'init\', \'add_ob_start\');
add_action(\'wp_footer\', \'flush_ob_end\');

SO网友:Milo

当您通过重定向时wp_safe_redirect, 这是通过向浏览器发送包含要重定向到的URL的标题来完成的。如果在尝试发送此标题之前已将任何内容发送到浏览器,则会出现标题已发送错误。一旦内容进入浏览器,快乐标题时间就结束了,不能再发送更多的标题。

解决方案是,在任何内容进入浏览器之前,必须先运行代码,然后将其挂接到an action 在WordPress开始呈现页面之前执行。

结束