_rewriteHelper = $rewriteHelper; // hook into template redirects, priority 5 add_action('template_redirect', array($this, 'handleRequest'), 5); // hool into rewrite action add_action('enlighter_rewriterules_init', array($this, 'registerRewriteRules')); } // register rewrite rules public function registerRewriteRules(){ foreach ($this->_pages as $slug => $d){ // add rewrite rules $this->_rewriteHelper->addRewriteRule($d[0], 'index.php?enlighter_' . $slug . '=$matches[1]', 'top'); $this->_rewriteHelper->addRewriteTag('%enlighter_' . $slug . '%', '([\w_]+)'); } } // add a new virtual page public function registerPage($slug, $regex, $cb){ // filter slug $slug = trim(strtolower(preg_replace('/[^\w]/', '', $slug))); // valid slug ? length value taken from WPRewrite class if (strlen($slug) < 3){ return false; } // store callback identified by slug $this->_pages[$slug] = array($regex, $cb); } // action disptaching public function handleRequest(){ // find query var foreach ($this->_pages as $slug => $d){ // query var set ? if (($match = get_query_var('enlighter_' . $slug, false)) !== false){ // execute callback call_user_func($d[1], $match); // stop wp processing exit(); } } } }