我想知道,基于下面的代码,我想把我的wp_redirect函数放在哪里,因为它目前只有spazzes out和sais:
Warning: Cannot modify header information - headers already sent by (output started at /***/***/WordPress/WordPressDev/wp-includes/script-loader.php:664) in /***/***/WordPress/WordPressDev/wp-includes/pluggable.php on line 881
我得到的是因为页面已经加载了。但我不知道在哪里调用这个功能。
我已经更换了我的网站和任何个人数据"与明星和example.com。这段代码怎么运行,它只是不会重定向我。
想法?
function get_latest_version_zip(){
global $wp_filesystem;
if(current_user_can('update_themes')){
$aisis_file_system_structure = WP_Filesystem();
$aisis_cred_url = 'admin.php?page=aisis-core-update';
if($aisis_file_system_structure == false){
request_filesystem_credentials($aisis_cred_url);
$this->credential_check = true;
}
$aisis_temp_file_download = download_url( 'http://example.com/aisis/aisis_update/Aisis2.zip' );
if(is_wp_error($aisis_temp_file_download)){
$error = $aisis_temp_file_download->get_error_code();
if($error == 'http_no_url') {
add_action( 'admin_notices', 'aisis_framework_download_update_erors' );
}
}
$aisis_unzip_to = $wp_filesystem->wp_content_dir() . "/themes/" . get_option('template');
$this->delete_contents_check(); //Check if we need to delete the aisis core folder.
$aisis_do_unzip = unzip_file($aisis_temp_file_download, $aisis_unzip_to);
unlink($aisis_temp_file_download); //delete temp jazz
if(is_wp_error($aisis_do_unzip)){
$error = $aisis_do_unzip->get_error_code();
if($error == 'incompatible_archive') {
$this->aisis_incompatible_archive_errors();
}
if($error == 'empty_archive') {
$this->aisis_empty_archive_errors();
}
if($error == 'mkdir_failed') {
$this->aisis_mkdir_failed_errors();
}
if($error == 'copy_failed') {
$this->aisis_copy_failed_errors();
}
return;
}
//throwing errors
wp_redirect(admin_url('admin.php?page=aisis-core-options'));
exit;
}
}
在我的functions.php文件中,我放置了以下代码:
function callback($buffer){
return $buffer;
}
function add_ob_start(){
ob_start("callback");
}
function flush_ob_end(){
ob_end_flush();
}
add_action('wp_head', 'add_ob_start');
add_action('wp_footer', 'flush_ob_end');
有了这个我仍然得到错误,我想我误解了一些事情......
答案 0 :(得分:3)
只需替换以下行
add_action('wp_head', 'add_ob_start');
与
add_action('init', 'add_ob_start');
输出缓冲应该在发送/回显到浏览器之前开始,并且wp_head
挂钩发生的时间比init
挂钩晚一点,直到然后已经发送了标头,并且保留/放置在您的顶部在任何回显/发送到浏览器之前functions.php
。
答案 1 :(得分:0)
问题在于wordpress中的某个地方已调用header()
函数,并且在output buffering
关闭时已将某些输出发送到客户端。
必须在输出之前发送标题,否则会出现您所描述的错误。
wp_redirect(admin_url('admin.php?page=aisis-core-options'));
以上行设置了如下标题:header('Location: admin.php......');
通过php.ini打开输出缓冲,在wordpress的index.php或者只是在向客户端发送任何内容之前,应该处理错误。
详细信息/文档可在此处找到:http://php.net/manual/en/book.outcontrol.php
我能想到的最简单的方法就是让你的wordpress index.php看起来像这样:ob_start();
// content of your index.php here
ob_flush();
答案 2 :(得分:0)
另一种可能性是增加一种嗜好:
add_action('wp_head', 'add_ob_start', 1);
第三个参数是$ priority。
此外,如果你在多个函数中挂钩,它可以让你完全控制执行链。