title: Wordpress redirect issue, headers already sent
body: <p>I am wondering, based on the code bellow, where I would want to put my wp_redirect function because where it currently is does nothing but spazzes out and sais:</p>
  
  <pre><code> 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
  </code></pre>
  
  <p>Which I get because the page has already loaded. but I am un sure where to call this function.</p>
  
  <p>I have replace my web site and any "personal data" with stars and example.com. How ever this code does work, it just wont redirect me.</p>
  
  <p>thoughts?</p>
  
  <pre><code>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-&gt;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-&gt;get_error_code();
                      if($error == 'http_no_url') {
                          add_action( 'admin_notices', 'aisis_framework_download_update_erors' );
                      }
                  }
  
                  $aisis_unzip_to = $wp_filesystem-&gt;wp_content_dir() . "/themes/" . get_option('template');
  
                  $this-&gt;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-&gt;get_error_code();
                      if($error == 'incompatible_archive') {
                          $this-&gt;aisis_incompatible_archive_errors();
                      }
                      if($error == 'empty_archive') {
                          $this-&gt;aisis_empty_archive_errors();
                      }
                      if($error == 'mkdir_failed') {
                          $this-&gt;aisis_mkdir_failed_errors();
                      }
                      if($error == 'copy_failed') {
                          $this-&gt;aisis_copy_failed_errors();
                      }
                      return;
                  }
                  //throwing errors
                  wp_redirect(admin_url('admin.php?page=aisis-core-options'));
                  exit;
  
               }
           }
  </code></pre>
  
  <p>in my functions.php file I placed the following code:</p>
  
  <pre><code> 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');
  </code></pre>
  
  <p>with this I still get the error, I think I misunderstanding something....</p>