title: wp_rewrite in a WordPress Plugin
body: <p>Ok, I've got this code that I've been using to spit out news to an application of mine.  It was working until today.  I've cutout all the logic in the following code to make it simpiler.  But it should "WORK"  Can someone help me fix this code to where it works, and is done right?  I know it's hacked together , but it didn't seem to have any problems until today.  I have not updated anything, don't know what the deal is.</p>
  
  <pre><code>
  
   Plugin Name:   MyPlugin Example
   Version:       1.0.1
  
  
  If ( ! class_exists("MyPlugin") )
  {
      class MyPlugin
      {
          var $db_version = "1.0"; //not used yet
  
          function init()
          {
     //Nothing as of now.
          }
          function activate()
          {
              global $wp_rewrite;
              $this->flush_rewrite_rules();
          }
  
          function pushoutput( $id )
          {
              $output->out =' The output worked!';
              $this->output( $output );
  
          }
          function output( $output )
          {
              ob_start();
              ob_end_clean();
              header( 'Cache-Control: no-cache, must-revalidate' );
              header( 'Expires: Mon, 26 Jul 1997 05:00:00 GMT' );
              header( 'Content-type: application/json' );
  
              echo json_encode( $output );
              //Must encode this...
          }
  
          function flush_rewrite_rules()
          {
              global $wp_rewrite;
              $wp_rewrite->flush_rules();
          }
  
          function createRewriteRules( $rewrite )
          {
              global $wp_rewrite;
              $new_rules = array( 'MyPlugin/(.+)' => 'index.php?MyPlugin=' . $wp_rewrite->preg_index(1) );
              if ( ! is_array($wp_rewrite->rules) )
              {
                  $wp_rewrite->rules = array();
              }
              $wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
              return $wp_rewrite;
          }
  
  
          function add_query_vars( $qvars )
          {
              $qvars[] = 'MyPlugin';
              return $qvars;
          }
          function template_redirect_intercept()
          {
              global $wp_query;
              if ( $wp_query->get('MyPlugin') )
              {
                  $id = $wp_query->query_vars['MyPlugin'];
                  $this->pushoutput( $id );
  
  
                  exit;
              }
          }
      }
  }
  If ( class_exists("MyPlugin") )
  {
      $MyPluginCode = new MyPlugin();
  }
  If ( isset($MyPluginCode) )
  {
      register_activation_hook( __file__, array($MyPluginCode, 'activate') );
      add_action( 'admin-init', array(&$MyPluginCode, 'flush_rewrite_rules') );
      //add_action( 'init', array(&$MyPluginCode, 'init') );
      add_action( 'generate_rewrite_rules', array(&$MyPluginCode, 'createRewriteRules') );
  
      add_action( 'template_redirect', array(&$MyPluginCode, 'template_redirect_intercept') );
      // add_filter( 'query_vars', array(&$MyPluginCode, 'add_query_vars') );
  }
  
  </code></pre>